@pipeline-builder/pipeline-manager 4.1.15 → 4.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/config.yml +16 -37
  2. package/dist/boilerplate.js +10 -2
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +97 -79
  5. package/dist/commands/audit-stacks.js +3 -3
  6. package/dist/commands/create-pat.d.ts +2 -3
  7. package/dist/commands/create-pat.d.ts.map +1 -1
  8. package/dist/commands/create-pat.js +3 -4
  9. package/dist/commands/create-pipeline.d.ts.map +1 -1
  10. package/dist/commands/create-pipeline.js +198 -190
  11. package/dist/commands/list-pipelines.js +2 -2
  12. package/dist/commands/list-plugins.js +2 -2
  13. package/dist/commands/login.d.ts +2 -2
  14. package/dist/commands/login.js +3 -3
  15. package/dist/commands/new-plugin.d.ts +48 -5
  16. package/dist/commands/new-plugin.d.ts.map +1 -1
  17. package/dist/commands/new-plugin.js +261 -95
  18. package/dist/commands/plugin-lifecycle.d.ts +29 -0
  19. package/dist/commands/plugin-lifecycle.d.ts.map +1 -0
  20. package/dist/commands/plugin-lifecycle.js +147 -0
  21. package/dist/commands/provision.d.ts +42 -2
  22. package/dist/commands/provision.d.ts.map +1 -1
  23. package/dist/commands/provision.js +184 -147
  24. package/dist/commands/publish-plugin.d.ts +62 -0
  25. package/dist/commands/publish-plugin.d.ts.map +1 -0
  26. package/dist/commands/publish-plugin.js +224 -0
  27. package/dist/commands/redrive-events.d.ts +1 -1
  28. package/dist/commands/redrive-events.js +2 -2
  29. package/dist/commands/store-token.d.ts +46 -1
  30. package/dist/commands/store-token.d.ts.map +1 -1
  31. package/dist/commands/store-token.js +127 -102
  32. package/dist/commands/test-plugin.d.ts +72 -0
  33. package/dist/commands/test-plugin.d.ts.map +1 -0
  34. package/dist/commands/test-plugin.js +285 -0
  35. package/dist/commands/upload-plugin.d.ts +6 -7
  36. package/dist/commands/upload-plugin.d.ts.map +1 -1
  37. package/dist/commands/upload-plugin.js +127 -189
  38. package/dist/commands/validate-plugin.d.ts +37 -4
  39. package/dist/commands/validate-plugin.d.ts.map +1 -1
  40. package/dist/commands/validate-plugin.js +129 -144
  41. package/dist/commands/validate-templates.d.ts.map +1 -1
  42. package/dist/commands/validate-templates.js +8 -9
  43. package/dist/config/plugin-catalog-assets.d.ts +13 -0
  44. package/dist/config/plugin-catalog-assets.d.ts.map +1 -0
  45. package/dist/config/plugin-catalog-assets.js +21 -0
  46. package/dist/config.yml +16 -37
  47. package/dist/lambda/token-renew-handler.d.ts.map +1 -1
  48. package/dist/lambda/token-renew-handler.js +109 -154
  49. package/dist/types/config.d.ts +2 -6
  50. package/dist/types/config.d.ts.map +1 -1
  51. package/dist/types/config.js +1 -1
  52. package/dist/types/plugin.d.ts +21 -0
  53. package/dist/types/plugin.d.ts.map +1 -1
  54. package/dist/types/plugin.js +1 -1
  55. package/dist/utils/aws-env.d.ts +1 -2
  56. package/dist/utils/aws-env.d.ts.map +1 -1
  57. package/dist/utils/aws-env.js +2 -3
  58. package/dist/utils/catalog-prompt.d.ts +26 -0
  59. package/dist/utils/catalog-prompt.d.ts.map +1 -0
  60. package/dist/utils/catalog-prompt.js +113 -0
  61. package/dist/utils/command-utils.d.ts.map +1 -1
  62. package/dist/utils/command-utils.js +14 -3
  63. package/dist/utils/config-loader.d.ts.map +1 -1
  64. package/dist/utils/config-loader.js +4 -6
  65. package/dist/utils/credential-store.d.ts +16 -0
  66. package/dist/utils/credential-store.d.ts.map +1 -1
  67. package/dist/utils/credential-store.js +57 -2
  68. package/dist/utils/deploy-runner.d.ts.map +1 -1
  69. package/dist/utils/deploy-runner.js +7 -2
  70. package/dist/utils/pipeline-config.d.ts +1 -2
  71. package/dist/utils/pipeline-config.d.ts.map +1 -1
  72. package/dist/utils/pipeline-config.js +1 -1
  73. package/dist/utils/plugin-docker.d.ts +44 -0
  74. package/dist/utils/plugin-docker.d.ts.map +1 -0
  75. package/dist/utils/plugin-docker.js +71 -0
  76. package/dist/utils/plugin-package.d.ts +40 -0
  77. package/dist/utils/plugin-package.d.ts.map +1 -0
  78. package/dist/utils/plugin-package.js +159 -0
  79. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  80. package/dist/utils/plugin-resolver.js +43 -29
  81. package/dist/utils/plugin-scan.d.ts +22 -0
  82. package/dist/utils/plugin-scan.d.ts.map +1 -0
  83. package/dist/utils/plugin-scan.js +52 -0
  84. package/dist/utils/plugin-zip.d.ts +15 -0
  85. package/dist/utils/plugin-zip.d.ts.map +1 -0
  86. package/dist/utils/plugin-zip.js +96 -0
  87. package/dist/utils/registry.d.ts +15 -0
  88. package/dist/utils/registry.d.ts.map +1 -1
  89. package/dist/utils/registry.js +17 -2
  90. package/dist/utils/service-account.d.ts.map +1 -1
  91. package/dist/utils/service-account.js +9 -10
  92. package/package.json +45 -8
@@ -0,0 +1,113 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * The ACCEPT-OR-EDIT step for `plugin publish`: every descriptive
5
+ * catalog field is shown with its detected value and source, and the author
6
+ * accepts it, edits it or clears it. `--yes` accepts everything detected;
7
+ * `--metadata <file.yaml>` supplies edits non-interactively. Edits pass the
8
+ * same api-core validator the server applies (contract keys refused).
9
+ */
10
+ import fs from 'fs';
11
+ import path from 'path';
12
+ import { parseCatalogEdits, validateCatalogField, } from '@pipeline-builder/api-core';
13
+ import YAML from 'yaml';
14
+ import { ValidationError } from './error-handler.js';
15
+ import { SOURCE_LABELS, formatCatalogValue } from './plugin-package.js';
16
+ /** Fields whose value is long markdown: edited by naming a file. */
17
+ const FILE_FIELDS = new Set(['readme', 'changelog']);
18
+ /** Read and validate a `--metadata` edits file (YAML or JSON). */
19
+ export function readMetadataFile(file) {
20
+ const abs = path.resolve(file);
21
+ if (!fs.existsSync(abs))
22
+ throw new ValidationError(`--metadata file not found: ${abs}`, 'metadata', abs);
23
+ let raw;
24
+ try {
25
+ raw = YAML.parse(fs.readFileSync(abs, 'utf-8'), { maxAliasCount: 100 });
26
+ }
27
+ catch (err) {
28
+ throw new ValidationError(`--metadata: invalid YAML (${err.message.split('\n')[0]})`, 'metadata', abs);
29
+ }
30
+ const parsed = parseCatalogEdits(raw);
31
+ if (!parsed.ok)
32
+ throw new ValidationError(`--metadata: ${parsed.error}`, 'metadata', abs);
33
+ return parsed.value;
34
+ }
35
+ /** Turn a typed answer into a field value (before validation). */
36
+ export function parseTypedValue(field, text, cwd = process.cwd()) {
37
+ if (FILE_FIELDS.has(field)) {
38
+ const file = path.resolve(cwd, text);
39
+ if (!fs.existsSync(file))
40
+ throw new Error(`file not found: ${file}`);
41
+ return fs.readFileSync(file, 'utf-8');
42
+ }
43
+ if (field === 'keywords')
44
+ return text.split(',').map(k => k.trim()).filter(Boolean);
45
+ if (field === 'icon') {
46
+ const [key, badge] = text.split(':').map(s => s.trim());
47
+ return badge ? { key, badge } : key;
48
+ }
49
+ return text;
50
+ }
51
+ /** One line describing a detected field for the prompt. */
52
+ export function describeDetected(d) {
53
+ const source = d.source ? SOURCE_LABELS[d.source] ?? d.source : null;
54
+ if (d.error)
55
+ return `${d.field}: (blank — detected ${source ?? 'value'} is invalid: ${d.error})`;
56
+ if (d.value === null)
57
+ return `${d.field}: (empty)`;
58
+ return `${d.field}: ${formatCatalogValue(d.value)} [${source}]`;
59
+ }
60
+ /**
61
+ * Walk every field: Enter/`a` accepts, `e` edits (validated, re-asked on a bad
62
+ * value), `c` clears. Returns only the fields the author changed.
63
+ */
64
+ export async function promptCatalogEdits(detected, ask) {
65
+ const edits = {};
66
+ for (const d of detected) {
67
+ console.log(` ${describeDetected(d)}`);
68
+ for (;;) {
69
+ const answer = (await ask(' [A]ccept, [e]dit, [c]lear? ')).trim().toLowerCase();
70
+ if (answer === '' || answer === 'a')
71
+ break;
72
+ if (answer === 'c') {
73
+ edits[d.field] = null;
74
+ break;
75
+ }
76
+ if (answer !== 'e')
77
+ continue;
78
+ const hint = FILE_FIELDS.has(d.field) ? 'path to a markdown file' : d.field === 'keywords' ? 'comma-separated' : d.field === 'icon' ? 'key or key:badge' : 'value';
79
+ const typed = (await ask(` New ${d.field} (${hint}): `)).trim();
80
+ try {
81
+ const checked = validateCatalogField(d.field, parseTypedValue(d.field, typed));
82
+ if (!checked.ok)
83
+ throw new Error(checked.error);
84
+ edits[d.field] = checked.value;
85
+ break;
86
+ }
87
+ catch (err) {
88
+ console.log(` ✗ ${err.message} — try again`);
89
+ }
90
+ }
91
+ }
92
+ const parsed = parseCatalogEdits(edits);
93
+ if (!parsed.ok)
94
+ throw new ValidationError(parsed.error);
95
+ return parsed.value;
96
+ }
97
+ /**
98
+ * Resolve the author's edits, non-interactively when asked: `--metadata` edits
99
+ * (every other detected value accepted) or `--yes` (everything detected
100
+ * accepted); otherwise the interactive prompt. Without a terminal, `--yes` or
101
+ * `--metadata` is required — nothing is accepted silently.
102
+ */
103
+ export async function collectCatalogEdits(detected, opts) {
104
+ if (opts.metadataFile)
105
+ return readMetadataFile(opts.metadataFile);
106
+ if (opts.yes)
107
+ return {};
108
+ if (!opts.ask) {
109
+ throw new ValidationError('No terminal to prompt on: pass --yes to accept the detected metadata, or --metadata <file.yaml> with your edits');
110
+ }
111
+ return promptCatalogEdits(detected, opts.ask);
112
+ }
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy1wcm9tcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvY2F0YWxvZy1wcm9tcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQ3hCLE9BQU8sRUFDTCxpQkFBaUIsRUFBRSxvQkFBb0IsR0FFeEMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RSxvRUFBb0U7QUFDcEUsTUFBTSxXQUFXLEdBQW9DLElBQUksR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFLdEYsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFZO0lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsTUFBTSxJQUFJLGVBQWUsQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pHLElBQUksR0FBWSxDQUFDO0lBQ2pCLElBQUksQ0FBQztRQUNILEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUFDLE9BQU8sR0FBRyxF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QUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsTUFBTTtZQUNSLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBVSxHQUFhLENBQUMsT0FBTyxjQUFjLENBQUMsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFBRSxNQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsUUFBeUIsRUFDekIsSUFBeUQ7SUFFekQsSUFBSSxJQUFJLENBQUMsWUFBWTtRQUFFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLElBQUksSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2QsTUFBTSxJQUFJLGVBQWUsQ0FBQyxpSEFBaUgsQ0FBQyxDQUFDO0lBQy9JLENBQUM7SUFDRCxPQUFPLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBBQ0NFUFQtT1ItRURJVCBzdGVwIGZvciBgcGx1Z2luIHB1Ymxpc2hgOiBldmVyeSBkZXNjcmlwdGl2ZVxuICogY2F0YWxvZyBmaWVsZCBpcyBzaG93biB3aXRoIGl0cyBkZXRlY3RlZCB2YWx1ZSBhbmQgc291cmNlLCBhbmQgdGhlIGF1dGhvclxuICogYWNjZXB0cyBpdCwgZWRpdHMgaXQgb3IgY2xlYXJzIGl0LiBgLS15ZXNgIGFjY2VwdHMgZXZlcnl0aGluZyBkZXRlY3RlZDtcbiAqIGAtLW1ldGFkYXRhIDxmaWxlLnlhbWw+YCBzdXBwbGllcyBlZGl0cyBub24taW50ZXJhY3RpdmVseS4gRWRpdHMgcGFzcyB0aGVcbiAqIHNhbWUgYXBpLWNvcmUgdmFsaWRhdG9yIHRoZSBzZXJ2ZXIgYXBwbGllcyAoY29udHJhY3Qga2V5cyByZWZ1c2VkKS5cbiAqL1xuXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBwYXJzZUNhdGFsb2dFZGl0cywgdmFsaWRhdGVDYXRhbG9nRmllbGQsXG4gIHR5cGUgRGV0ZWN0ZWRGaWVsZCwgdHlwZSBQbHVnaW5DYXRhbG9nRWRpdHMsIHR5cGUgUGx1Z2luQ2F0YWxvZ0ZpZWxkLFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgWUFNTCBmcm9tICd5YW1sJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciB9IGZyb20gJy4vZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBTT1VSQ0VfTEFCRUxTLCBmb3JtYXRDYXRhbG9nVmFsdWUgfSBmcm9tICcuL3BsdWdpbi1wYWNrYWdlLmpzJztcblxuLyoqIEZpZWxkcyB3aG9zZSB2YWx1ZSBpcyBsb25nIG1hcmtkb3duOiBlZGl0ZWQgYnkgbmFtaW5nIGEgZmlsZS4gKi9cbmNvbnN0IEZJTEVfRklFTERTOiBSZWFkb25seVNldDxQbHVnaW5DYXRhbG9nRmllbGQ+ID0gbmV3IFNldChbJ3JlYWRtZScsICdjaGFuZ2Vsb2cnXSk7XG5cbi8qKiBBc2tzIG9uZSBxdWVzdGlvbiwgcmV0dXJucyB0aGUgYW5zd2VyICh0cmltbWVkIGJ5IHRoZSBjYWxsZXIpLiAqL1xuZXhwb3J0IHR5cGUgQXNrID0gKHF1ZXN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcblxuLyoqIFJlYWQgYW5kIHZhbGlkYXRlIGEgYC0tbWV0YWRhdGFgIGVkaXRzIGZpbGUgKFlBTUwgb3IgSlNPTikuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZE1ldGFkYXRhRmlsZShmaWxlOiBzdHJpbmcpOiBQbHVnaW5DYXRhbG9nRWRpdHMge1xuICBjb25zdCBhYnMgPSBwYXRoLnJlc29sdmUoZmlsZSk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhhYnMpKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLW1ldGFkYXRhIGZpbGUgbm90IGZvdW5kOiAke2Fic31gLCAnbWV0YWRhdGEnLCBhYnMpO1xuICBsZXQgcmF3OiB1bmtub3duO1xuICB0cnkge1xuICAgIHJhdyA9IFlBTUwucGFyc2UoZnMucmVhZEZpbGVTeW5jKGFicywgJ3V0Zi04JyksIHsgbWF4QWxpYXNDb3VudDogMTAwIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGAtLW1ldGFkYXRhOiBpbnZhbGlkIFlBTUwgKCR7KGVyciBhcyBFcnJvcikubWVzc2FnZS5zcGxpdCgnXFxuJylbMF19KWAsICdtZXRhZGF0YScsIGFicyk7XG4gIH1cbiAgY29uc3QgcGFyc2VkID0gcGFyc2VDYXRhbG9nRWRpdHMocmF3KTtcbiAgaWYgKCFwYXJzZWQub2spIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYC0tbWV0YWRhdGE6ICR7cGFyc2VkLmVycm9yfWAsICdtZXRhZGF0YScsIGFicyk7XG4gIHJldHVybiBwYXJzZWQudmFsdWU7XG59XG5cbi8qKiBUdXJuIGEgdHlwZWQgYW5zd2VyIGludG8gYSBmaWVsZCB2YWx1ZSAoYmVmb3JlIHZhbGlkYXRpb24pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVHlwZWRWYWx1ZShmaWVsZDogUGx1Z2luQ2F0YWxvZ0ZpZWxkLCB0ZXh0OiBzdHJpbmcsIGN3ZCA9IHByb2Nlc3MuY3dkKCkpOiB1bmtub3duIHtcbiAgaWYgKEZJTEVfRklFTERTLmhhcyhmaWVsZCkpIHtcbiAgICBjb25zdCBmaWxlID0gcGF0aC5yZXNvbHZlKGN3ZCwgdGV4dCk7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGUpKSB0aHJvdyBuZXcgRXJyb3IoYGZpbGUgbm90IGZvdW5kOiAke2ZpbGV9YCk7XG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKTtcbiAgfVxuICBpZiAoZmllbGQgPT09ICdrZXl3b3JkcycpIHJldHVybiB0ZXh0LnNwbGl0KCcsJykubWFwKGsgPT4gay50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgaWYgKGZpZWxkID09PSAnaWNvbicpIHtcbiAgICBjb25zdCBba2V5LCBiYWRnZV0gPSB0ZXh0LnNwbGl0KCc6JykubWFwKHMgPT4gcy50cmltKCkpO1xuICAgIHJldHVybiBiYWRnZSA/IHsga2V5LCBiYWRnZSB9IDoga2V5O1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuXG4vKiogT25lIGxpbmUgZGVzY3JpYmluZyBhIGRldGVjdGVkIGZpZWxkIGZvciB0aGUgcHJvbXB0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlRGV0ZWN0ZWQoZDogRGV0ZWN0ZWRGaWVsZCk6IHN0cmluZyB7XG4gIGNvbnN0IHNvdXJjZSA9IGQuc291cmNlID8gU09VUkNFX0xBQkVMU1tkLnNvdXJjZV0gPz8gZC5zb3VyY2UgOiBudWxsO1xuICBpZiAoZC5lcnJvcikgcmV0dXJuIGAke2QuZmllbGR9OiAoYmxhbmsg4oCUIGRldGVjdGVkICR7c291cmNlID8/ICd2YWx1ZSd9IGlzIGludmFsaWQ6ICR7ZC5lcnJvcn0pYDtcbiAgaWYgKGQudmFsdWUgPT09IG51bGwpIHJldHVybiBgJHtkLmZpZWxkfTogKGVtcHR5KWA7XG4gIHJldHVybiBgJHtkLmZpZWxkfTogJHtmb3JtYXRDYXRhbG9nVmFsdWUoZC52YWx1ZSl9ICBbJHtzb3VyY2V9XWA7XG59XG5cbi8qKlxuICogV2FsayBldmVyeSBmaWVsZDogRW50ZXIvYGFgIGFjY2VwdHMsIGBlYCBlZGl0cyAodmFsaWRhdGVkLCByZS1hc2tlZCBvbiBhIGJhZFxuICogdmFsdWUpLCBgY2AgY2xlYXJzLiBSZXR1cm5zIG9ubHkgdGhlIGZpZWxkcyB0aGUgYXV0aG9yIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHRDYXRhbG9nRWRpdHMoZGV0ZWN0ZWQ6IERldGVjdGVkRmllbGRbXSwgYXNrOiBBc2spOiBQcm9taXNlPFBsdWdpbkNhdGFsb2dFZGl0cz4ge1xuICBjb25zdCBlZGl0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBkIG9mIGRldGVjdGVkKSB7XG4gICAgY29uc29sZS5sb2coYCAgJHtkZXNjcmliZURldGVjdGVkKGQpfWApO1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGFuc3dlciA9IChhd2FpdCBhc2soJyAgICBbQV1jY2VwdCwgW2VdZGl0LCBbY11sZWFyPyAnKSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoYW5zd2VyID09PSAnJyB8fCBhbnN3ZXIgPT09ICdhJykgYnJlYWs7XG4gICAgICBpZiAoYW5zd2VyID09PSAnYycpIHtcbiAgICAgICAgZWRpdHNbZC5maWVsZF0gPSBudWxsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChhbnN3ZXIgIT09ICdlJykgY29udGludWU7XG4gICAgICBjb25zdCBoaW50ID0gRklMRV9GSUVMRFMuaGFzKGQuZmllbGQpID8gJ3BhdGggdG8gYSBtYXJrZG93biBmaWxlJyA6IGQuZmllbGQgPT09ICdrZXl3b3JkcycgPyAnY29tbWEtc2VwYXJhdGVkJyA6IGQuZmllbGQgPT09ICdpY29uJyA/ICdrZXkgb3Iga2V5OmJhZGdlJyA6ICd2YWx1ZSc7XG4gICAgICBjb25zdCB0eXBlZCA9IChhd2FpdCBhc2soYCAgICBOZXcgJHtkLmZpZWxkfSAoJHtoaW50fSk6IGApKS50cmltKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsaWRhdGVDYXRhbG9nRmllbGQoZC5maWVsZCwgcGFyc2VUeXBlZFZhbHVlKGQuZmllbGQsIHR5cGVkKSk7XG4gICAgICAgIGlmICghY2hlY2tlZC5vaykgdGhyb3cgbmV3IEVycm9yKGNoZWNrZWQuZXJyb3IpO1xuICAgICAgICBlZGl0c1tkLmZpZWxkXSA9IGNoZWNrZWQudmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAg4pyXICR7KGVyciBhcyBFcnJvcikubWVzc2FnZX0g4oCUIHRyeSBhZ2FpbmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBwYXJzZWQgPSBwYXJzZUNhdGFsb2dFZGl0cyhlZGl0cyk7XG4gIGlmICghcGFyc2VkLm9rKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHBhcnNlZC5lcnJvcik7XG4gIHJldHVybiBwYXJzZWQudmFsdWU7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgYXV0aG9yJ3MgZWRpdHMsIG5vbi1pbnRlcmFjdGl2ZWx5IHdoZW4gYXNrZWQ6IGAtLW1ldGFkYXRhYCBlZGl0c1xuICogKGV2ZXJ5IG90aGVyIGRldGVjdGVkIHZhbHVlIGFjY2VwdGVkKSBvciBgLS15ZXNgIChldmVyeXRoaW5nIGRldGVjdGVkXG4gKiBhY2NlcHRlZCk7IG90aGVyd2lzZSB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0LiBXaXRob3V0IGEgdGVybWluYWwsIGAtLXllc2Agb3JcbiAqIGAtLW1ldGFkYXRhYCBpcyByZXF1aXJlZCDigJQgbm90aGluZyBpcyBhY2NlcHRlZCBzaWxlbnRseS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RDYXRhbG9nRWRpdHMoXG4gIGRldGVjdGVkOiBEZXRlY3RlZEZpZWxkW10sXG4gIG9wdHM6IHsgeWVzPzogYm9vbGVhbjsgbWV0YWRhdGFGaWxlPzogc3RyaW5nOyBhc2s/OiBBc2sgfSxcbik6IFByb21pc2U8UGx1Z2luQ2F0YWxvZ0VkaXRzPiB7XG4gIGlmIChvcHRzLm1ldGFkYXRhRmlsZSkgcmV0dXJuIHJlYWRNZXRhZGF0YUZpbGUob3B0cy5tZXRhZGF0YUZpbGUpO1xuICBpZiAob3B0cy55ZXMpIHJldHVybiB7fTtcbiAgaWYgKCFvcHRzLmFzaykge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ05vIHRlcm1pbmFsIHRvIHByb21wdCBvbjogcGFzcyAtLXllcyB0byBhY2NlcHQgdGhlIGRldGVjdGVkIG1ldGFkYXRhLCBvciAtLW1ldGFkYXRhIDxmaWxlLnlhbWw+IHdpdGggeW91ciBlZGl0cycpO1xuICB9XG4gIHJldHVybiBwcm9tcHRDYXRhbG9nRWRpdHMoZGV0ZWN0ZWQsIG9wdHMuYXNrKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"command-utils.d.ts","sourceRoot":"","sources":["../../src/utils/command-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAQvG;AAED;;mFAEmF;AACnF,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAI3D;AAED;;gCAEgC;AAChC,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAE7D;AAED;;8EAE8E;AAC9E,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAKzD;AAmCD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDlB;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,EAAE;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,SAAS,CAAC,CAQrB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAYrF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBnF"}
1
+ {"version":3,"file":"command-utils.d.ts","sourceRoot":"","sources":["../../src/utils/command-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAQvG;AAED;;mFAEmF;AACnF,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAI3D;AAED;;gCAEgC;AAChC,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAE7D;AAED;;8EAE8E;AAC9E,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAE9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAOjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI,CAKzD;AA8CD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDlB;AAED;;;;;;;GAOG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,EAAE;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,SAAS,CAAC,CAQrB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAYrF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBnF"}
@@ -6,7 +6,7 @@ import pico from 'picocolors';
6
6
  import { ApiClient } from './api-client.js';
7
7
  import { getSecretValue } from './aws-secrets.js';
8
8
  import { getApiConfig, getConfigWithOptions } from './config-loader.js';
9
- import { clearSession, isSessionUsable, loadSession, saveSession } from './credential-store.js';
9
+ import { clearSession, isSessionUsable, loadSession, saveSession, withRefreshLock } from './credential-store.js';
10
10
  import { printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from './output-utils.js';
11
11
  import { formatDuration, generateExecutionId } from '../config/cli.constants.js';
12
12
  const { bold, cyan, green, magenta } = pico;
@@ -76,7 +76,18 @@ export function printSslWarning(verifySsl) {
76
76
  * `X-Pb-Client` is mandatory on /auth/refresh (the CSRF gate) and its value also
77
77
  * picks the transport: anything but `web` keeps the body flow the CLI uses.
78
78
  */
79
- async function refreshStoredSession(baseUrl, session) {
79
+ async function refreshStoredSession(baseUrl, stale) {
80
+ // One refresh at a time per machine (see `withRefreshLock`): a second process
81
+ // re-reads the store under the lock and uses the pair the first one saved,
82
+ // rather than spending the same single-use refresh token again.
83
+ return withRefreshLock(async () => {
84
+ const current = loadSession(baseUrl);
85
+ if (isSessionUsable(current))
86
+ return current.accessToken;
87
+ return renewSession(baseUrl, current ?? stale);
88
+ });
89
+ }
90
+ async function renewSession(baseUrl, session) {
80
91
  if (!session.refreshToken)
81
92
  return undefined;
82
93
  try {
@@ -208,4 +219,4 @@ export function validateEntityId(id, entityName) {
208
219
  }
209
220
  return trimmed;
210
221
  }
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb21tYW5kLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBZ0IsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFlLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQXNCLE1BQU0sdUJBQXVCLENBQUM7QUFDcEgsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpGLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFNUM7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsUUFBaUIsRUFBRSxJQUEwQjtJQUM3RixNQUFNLFdBQVcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO0lBQzFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakIsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMs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SyxFQUFFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNuRCxZQUFZLENBQUMsR0FBRyxVQUFVLDJCQUEyQixFQUFFO1lBQ3JELFFBQVEsRUFBRSxPQUFPO1lBQ2pCLGNBQWMsRUFBRSw4Q0FBOEM7WUFDOUQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyB0eXBlIENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuL2FwaS1jbGllbnQuanMnO1xuaW1wb3J0IHsgZ2V0U2VjcmV0VmFsdWUgfSBmcm9tICcuL2F3cy1zZWNyZXRzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnLCBnZXRBcGlDb25maWcsIGdldENvbmZpZ1dpdGhPcHRpb25zIH0gZnJvbSAnLi9jb25maWctbG9hZGVyLmpzJztcbmltcG9ydCB7IGNsZWFyU2Vzc2lvbiwgaXNTZXNzaW9uVXNhYmxlLCBsb2FkU2Vzc2lvbiwgc2F2ZVNlc3Npb24sIHR5cGUgU3RvcmVkU2Vzc2lvbiB9IGZyb20gJy4vY3JlZGVudGlhbC1zdG9yZS5qcyc7XG5pbXBvcnQgeyBwcmludEVycm9yLCBwcmludEluZm8sIHByaW50S2V5VmFsdWUsIHByaW50U2VjdGlvbiwgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZ2VuZXJhdGVFeGVjdXRpb25JZCB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBncmVlbiwgbWFnZW50YSB9ID0gcGljbztcblxuLyoqXG4gKiBQcmludCBjb21tYW5kIGhlYWRlciB3aXRoIHNlY3Rpb24gdGl0bGUgYW5kIGV4ZWN1dGlvbiBJRC5cbiAqIFJldHVybnMgdGhlIGV4ZWN1dGlvbiBJRCBmb3IgdXNlIGluIGVycm9yIGhhbmRsZXJzIGFuZCBzdW1tYXJpZXMuXG4gKlxuICogUGFzcyBgeyBxdWlldDogdHJ1ZSB9YCB0byBzdXBwcmVzcyB0aGUgZGVjb3JhdGl2ZSBvdXRwdXQgd2hpbGUgc3RpbGwgZ2V0dGluZyB0aGVcbiAqIGlkIOKAlCB1c2VkIGJvdGggYnkgYC0tcXVpZXRgIGNhbGxlcnMgYW5kIGJ5IGAtLWpzb25gIGNvbW1hbmRzIChzbyB0aGUgYmFubmVyXG4gKiBkb2Vzbid0IGxhbmQgb24gc3Rkb3V0IGFoZWFkIG9mIHRoZSBKU09OIHBheWxvYWQgYW5kIGJyZWFrIGDigKYgLS1qc29uIHwganFgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50Q29tbWFuZEhlYWRlcih0aXRsZTogc3RyaW5nLCBzdWJ0aXRsZT86IHN0cmluZywgb3B0cz86IHsgcXVpZXQ/OiBib29sZWFuIH0pOiBzdHJpbmcge1xuICBjb25zdCBleGVjdXRpb25JZCA9IGdlbmVyYXRlRXhlY3V0aW9uSWQoKTtcbiAgaWYgKCFvcHRzPy5xdWlldCkge1xuICAgIHByaW50U2VjdGlvbih0aXRsZSk7XG4gICAgY29uc29sZS5sb2coYCR7bWFnZW50YShgW0VYRS0ke2V4ZWN1dGlvbklkfV1gKX0gJHtjeWFuKGJvbGQoc3VidGl0bGUgfHwgdGl0bGUpKX1gKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH1cbiAgcmV0dXJuIGV4ZWN1dGlvbklkO1xufVxuXG4vKiogQXR0YWNoIHRoZSBzdGFuZGFyZCBgLS12ZXJpZnktc3NsYCAvIGAtLW5vLXZlcmlmeS1zc2xgIHBhaXIuIFRoZSB0d28gdG9nZXRoZXJcbiAqICBnaXZlIENvbW1hbmRlciBhbiBleHBsaWNpdCB0cmktc3RhdGUgYG9wdGlvbnMudmVyaWZ5U3NsYCAodHJ1ZS9mYWxzZS91bmRlZmluZWQpLlxuICogIFJldHVybnMgdGhlIGNvbW1hbmQgc28gaXQgY29tcG9zZXM6IGB3aXRoU3NsT3B0aW9ucyhwcm9ncmFtLmNvbW1hbmQoJ3gnKSnigKZgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTc2xPcHRpb25zPFQgZXh0ZW5kcyBDb21tYW5kPihjbWQ6IFQpOiBUIHtcbiAgcmV0dXJuIGNtZFxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpIGFzIFQ7XG59XG5cbi8qKiBBdHRhY2ggdGhlIHN0YW5kYXJkIGAtLXJlZ2lvbiA8cmVnaW9uPmAgb3B0aW9uIChvbmUgY2Fub25pY2FsIGRlc2NyaXB0aW9uKS5cbiAqICBSZWdpb24gcmVzb2x1dGlvbiAoZmxhZyDihpIgQVdTX1JFR0lPTiDihpIgQ0RLX0RFRkFVTFRfUkVHSU9OIOKGkiB1cy1lYXN0LTEpIGxpdmVzIGluXG4gKiAgYXdzLWVudi5yZXNvbHZlQXdzUmVnaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWdpb25PcHRpb248VCBleHRlbmRzIENvbW1hbmQ+KGNtZDogVCk6IFQge1xuICByZXR1cm4gY21kLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZGVmYXVsdHMgdG8gQVdTX1JFR0lPTiAvIENES19ERUZBVUxUX1JFR0lPTiAvIHVzLWVhc3QtMSknKSBhcyBUO1xufVxuXG4vKiogQXR0YWNoIHRoZSBzdGFuZGFyZCBgLS1wcm9maWxlIDxwcm9maWxlPmAgb3B0aW9uIChvbmUgY2Fub25pY2FsIGRlc2NyaXB0aW9uKS5cbiAqICBObyBkZWZhdWx0IGlzIHBpbm5lZCBzbyB0aGUgQVdTIGRlZmF1bHQgY3JlZGVudGlhbCBjaGFpbiAoZW52IHZhcnMsIFNTTywgcm9sZXMpXG4gKiAgd29ya3Mgb3V0IG9mIHRoZSBib3g7IC0tcHJvZmlsZSBvbmx5IHNlbGVjdHMgYSBzaGFyZWQgcHJvZmlsZSB3aGVuIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUHJvZmlsZU9wdGlvbjxUIGV4dGVuZHMgQ29tbWFuZD4oY21kOiBUKTogVCB7XG4gIHJldHVybiBjbWQub3B0aW9uKCctLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBDTEkgcHJvZmlsZSAoZGVmYXVsdHMgdG8gdGhlIHN0YW5kYXJkIEFXUyBjcmVkZW50aWFsIGNoYWluKScpIGFzIFQ7XG59XG5cbi8qKlxuICogUHJpbnQgZXhlY3V0aW9uIHN1bW1hcnkgd2l0aCBJRCwgZHVyYXRpb24sIGFuZCBzdGF0dXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEV4ZWN1dGlvblN1bW1hcnkoZXhlY3V0aW9uSWQ6IHN0cmluZywgZHVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAnRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihkdXJhdGlvbiksXG4gICAgJ1N0YXR1cyc6IGdyZWVuKCfinJMgU3VjY2VzcycpLFxuICB9KTtcbn1cblxuLyoqXG4gKiBXYXJuIGlmIFNTTCB2ZXJpZmljYXRpb24gaXMgZGlzYWJsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFNzbFdhcm5pbmcodmVyaWZ5U3NsPzogYm9vbGVhbik6IHZvaWQge1xuICBpZiAodmVyaWZ5U3NsID09PSBmYWxzZSkge1xuICAgIHByaW50V2FybmluZygnU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBpcyBESVNBQkxFRCcpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlbmV3IGEgc3RvcmVkIHNlc3Npb24gd2l0aCBpdHMgcmVmcmVzaCB0b2tlbiwgcGVyc2lzdCB0aGUgcm90YXRlZCBwYWlyLCBhbmRcbiAqIHJldHVybiB0aGUgbmV3IGFjY2VzcyB0b2tlbi4gUmV0dXJucyB1bmRlZmluZWQgKGFuZCBmb3JnZXRzIHRoZSBzZXNzaW9uKSB3aGVuXG4gKiB0aGUgcGxhdGZvcm0gcmVmdXNlcyBpdCDigJQgYSByb3RhdGVkLWF3YXkgb3IgcmV2b2tlZCB0b2tlbiBpcyBkZWFkLCBhbmQga2VlcGluZ1xuICogaXQgd291bGQgbWFrZSBldmVyeSBsYXRlciBjb21tYW5kIGZhaWwgdGhlIHNhbWUgd2F5LlxuICpcbiAqIGBYLVBiLUNsaWVudGAgaXMgbWFuZGF0b3J5IG9uIC9hdXRoL3JlZnJlc2ggKHRoZSBDU1JGIGdhdGUpIGFuZCBpdHMgdmFsdWUgYWxzb1xuICogcGlja3MgdGhlIHRyYW5zcG9ydDogYW55dGhpbmcgYnV0IGB3ZWJgIGtlZXBzIHRoZSBib2R5IGZsb3cgdGhlIENMSSB1c2VzLlxuICovXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoU3RvcmVkU2Vzc2lvbihiYXNlVXJsOiBzdHJpbmcsIHNlc3Npb246IFN0b3JlZFNlc3Npb24pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXNlc3Npb24ucmVmcmVzaFRva2VuKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDx7IGRhdGE/OiB7IGFjY2Vzc1Rva2VuPzogc3RyaW5nOyByZWZyZXNoVG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNJbj86IG51bWJlciB9IH0+KFxuICAgICAgYCR7YmFzZVVybH0vYXBpL2F1dGgvcmVmcmVzaGAsXG4gICAgICB7IHJlZnJlc2hUb2tlbjogc2Vzc2lvbi5yZWZyZXNoVG9rZW4gfSxcbiAgICAgIHsgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnWC1QYi1DbGllbnQnOiAnY2xpJyB9LCB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICApO1xuICAgIGNvbnN0IHJlbmV3ZWQgPSByZXNwb25zZS5kYXRhPy5kYXRhO1xuICAgIGlmICghcmVuZXdlZD8uYWNjZXNzVG9rZW4pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc2F2ZVNlc3Npb24oYmFzZVVybCwge1xuICAgICAgYWNjZXNzVG9rZW46IHJlbmV3ZWQuYWNjZXNzVG9rZW4sXG4gICAgICAuLi4ocmVuZXdlZC5yZWZyZXNoVG9rZW4gPyB7IHJlZnJlc2hUb2tlbjogcmVuZXdlZC5yZWZyZXNoVG9rZW4gfSA6IHt9KSxcbiAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIChyZW5ld2VkLmV4cGlyZXNJbiA/PyA5MDApICogMTAwMCxcbiAgICAgIC4uLihzZXNzaW9uLm9yZ2FuaXphdGlvbklkID8geyBvcmdhbml6YXRpb25JZDogc2Vzc2lvbi5vcmdhbml6YXRpb25JZCB9IDoge30pLFxuICAgIH0pO1xuICAgIHJldHVybiByZW5ld2VkLmFjY2Vzc1Rva2VuO1xuICB9IGNhdGNoIHtcbiAgICBjbGVhclNlc3Npb24oYmFzZVVybCk7XG4gICAgcHJpbnRXYXJuaW5nKCdUaGUgc3RvcmVkIHNlc3Npb24gY291bGQgbm90IGJlIHJlbmV3ZWQg4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpblwiIGFnYWluJyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwbGF0Zm9ybSBjcmVkZW50aWFsIHVzaW5nIHRocmVlIG1ldGhvZHMgKGluIHByaW9yaXR5IG9yZGVyKTpcbiAqXG4gKiAxLiBQTEFURk9STV9UT0tFTiBlbnYgdmFyIChhIEpXVCwgb3IgYW4gb3BhcXVlIGBwYl9wYXRf4oCmYC9gcGJfc2Ff4oCmYCBrZXkpXG4gKiAyLiB0aGUgc2Vzc2lvbiBgYXV0aCBsb2dpbmAgc3RvcmVkIGZvciB0aGlzIHBsYXRmb3JtIChyZW5ld2VkIGlmIGl0IGhhcyBleHBpcmVkKVxuICogMy4gLS1zdG9yZS10b2tlbnMgZmxhZyDihpIgdGhlIHNlcnZpY2UtYWNjb3VudCBrZXkgaW4gQVdTIFNlY3JldHMgTWFuYWdlclxuICpcbiAqIEByZXR1cm5zIHRoZSBiZWFyZXIgY3JlZGVudGlhbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUb2tlbihvcHRpb25zOiB7XG4gIHN0b3JlVG9rZW5zPzogYm9vbGVhbjtcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFBhdGggMTogUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICBpZiAocHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4pIHtcbiAgICBwcmludEluZm8oJ1VzaW5nIFBMQVRGT1JNX1RPS0VOIGZyb20gZW52aXJvbm1lbnQnKTtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU47XG4gIH1cblxuICAvLyBQYXRoIDI6IHRoZSBzdG9yZWQgYnJvd3NlciBzaWduLWluLiBTa2lwcGVkIGVudGlyZWx5IHdoZW4gLS1zdG9yZS10b2tlbnNcbiAgLy8gbmFtZXMgYSBtYWNoaW5lIGNyZWRlbnRpYWwsIHNvIGFuIG9wZXJhdG9yJ3MgbGFwdG9wIHNlc3Npb24gY2FuIG5ldmVyIGJlXG4gIC8vIHVzZWQgd2hlcmUgdGhlIGF1dG9tYXRpb24gY3JlZGVudGlhbCB3YXMgYXNrZWQgZm9yLlxuICBpZiAoIW9wdGlvbnMuc3RvcmVUb2tlbnMpIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2V0QXBpQ29uZmlnKCkuYXBpLmJhc2VVcmw7XG4gICAgY29uc3Qgc3RvcmVkID0gbG9hZFNlc3Npb24oYmFzZVVybCk7XG4gICAgaWYgKGlzU2Vzc2lvblVzYWJsZShzdG9yZWQpKSB7XG4gICAgICBwcmludEluZm8oJ1VzaW5nIHRoZSBzdG9yZWQgc2Vzc2lvbiBmcm9tIFwiYXV0aCBsb2dpblwiJyk7XG4gICAgICByZXR1cm4gc3RvcmVkLmFjY2Vzc1Rva2VuO1xuICAgIH1cbiAgICBpZiAoc3RvcmVkKSB7XG4gICAgICBjb25zdCByZW5ld2VkID0gYXdhaXQgcmVmcmVzaFN0b3JlZFNlc3Npb24oYmFzZVVybCwgc3RvcmVkKTtcbiAgICAgIGlmIChyZW5ld2VkKSB7XG4gICAgICAgIHByaW50SW5mbygnUmVuZXdlZCB0aGUgc3RvcmVkIHNlc3Npb24gZnJvbSBcImF1dGggbG9naW5cIicpO1xuICAgICAgICByZXR1cm4gcmVuZXdlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXRoIDM6IC0tc3RvcmUtdG9rZW5zIOKGkiByZWFkIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gIGlmIChvcHRpb25zLnN0b3JlVG9rZW5zKSB7XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuICAgIGlmICghc2VjcmV0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGlzIHJlcXVpcmVkIHdpdGggLS1zdG9yZS10b2tlbnMnKTtcbiAgICB9XG5cbiAgICBwcmludEluZm8oJ0ZldGNoaW5nIHNlY3JldCBmcm9tIFNlY3JldHMgTWFuYWdlcicsIHsgc2VjcmV0OiBzZWNyZXROYW1lIH0pO1xuXG4gICAgY29uc3Qgc2VjcmV0SnNvbiA9IGF3YWl0IGdldFNlY3JldFZhbHVlKHNlY3JldE5hbWUsIHsgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbiwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIH0pO1xuICAgIGNvbnN0IHNlY3JldCA9IEpTT04ucGFyc2Uoc2VjcmV0SnNvbikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcmludFN1Y2Nlc3MoJ1NlY3JldCByZXRyaWV2ZWQgZnJvbSBTZWNyZXRzIE1hbmFnZXInKTtcblxuICAgIC8vIHN0b3JlLXRva2VuIHdyaXRlcyB0aGUgc2VydmljZS1hY2NvdW50IEtFWSB0byB0aGUgYHBhc3N3b3JkYCBmaWVsZCAoc2NoZW1hOlxuICAgIC8vIHsgdXNlcm5hbWU6IG9yZ0lkLCBwYXNzd29yZDogcGJfc2Ff4oCmIH0g4oCUIHNhdGlzZmllcyBDb2RlQnVpbGQnc1xuICAgIC8vIHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHMpLCBub3QgYGFjY2Vzc1Rva2VuYC4gVGhlIGtleSBpcyBwcmVzZW50ZWQgYXMgYVxuICAgIC8vIGJlYXJlciBjcmVkZW50aWFsIGFuZCBleGNoYW5nZWQgc2VydmVyLXNpZGUsIHNvIG5vdGhpbmcgaGVyZSBkZWNvZGVzIGl0LlxuICAgIGlmICghc2VjcmV0LnBhc3N3b3JkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3JldCBtaXNzaW5nIHBhc3N3b3JkIChzZXJ2aWNlLWFjY291bnQga2V5KSDigJQgcnVuIFwicGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlblwiIHRvIHByb3Zpc2lvbiBvbmUnKTtcbiAgICB9XG5cbiAgICBwcmludEluZm8oJ1VzaW5nIHRoZSBzdG9yZWQgc2VydmljZS1hY2NvdW50IGtleScpO1xuICAgIHJldHVybiBzZWNyZXQucGFzc3dvcmQ7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLiBVc2Ugb25lIG9mOlxcbicgK1xuICAgICcgIC0gUnVuIFwicGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXCIgKGJyb3dzZXIgc2lnbi1pbiwgc3RvcmVkIGZvciB0aGlzIHBsYXRmb3JtKVxcbicgK1xuICAgICcgIC0gU2V0IFBMQVRGT1JNX1RPS0VOIHRvIGFuIGFjY2VzcyBrZXkgZnJvbSBcInBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXRcIlxcbicgK1xuICAgICcgIC0gUGFzcyAtLXN0b3JlLXRva2VucyB3aXRoIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXInLFxuICApO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYW5kIHJldHVybiBhbiBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnQuXG4gKlxuICogU3VwcG9ydHMgdGhyZWUgYXV0aCBtZXRob2RzOlxuICogMS4gUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICogMi4gdGhlIHN0b3JlZCBgYXV0aCBsb2dpbmAgc2Vzc2lvbiBmb3IgdGhpcyBwbGF0Zm9ybSAocmVuZXdlZCBvbiBleHBpcnkpXG4gKiAzLiAtLXN0b3JlLXRva2VucyArIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIg4oaSIGZldGNoIHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9uczoge1xuICBzdG9yZVRva2Vucz86IGJvb2xlYW47XG4gIHZlcmlmeVNzbD86IGJvb2xlYW47XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbn0pOiBQcm9taXNlPEFwaUNsaWVudD4ge1xuICAvLyBSZXNvbHZlIHRva2VuIGFuZCBzZXQgaXQgaW4gZW52IHNvIEFwaUNsaWVudC9nZXRDb25maWcgY2FuIGZpbmQgaXRcbiAgaWYgKCFwcm9jZXNzLmVudi5QTEFURk9STV9UT0tFTikge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgcmVzb2x2ZVRva2VuKG9wdGlvbnMpO1xuICAgIHByb2Nlc3MuZW52LlBMQVRGT1JNX1RPS0VOID0gdG9rZW47XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGFuZCByZXR1cm4gYW4gYXV0aGVudGljYXRlZCBBUEkgY2xpZW50IChzeW5jIOKAlCByZXF1aXJlcyBQTEFURk9STV9UT0tFTikuXG4gKiBVc2UgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIGZvciAtLXN0b3JlLXRva2VucyBzdXBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zOiB7IHZlcmlmeVNzbD86IGJvb2xlYW4gfSk6IEFwaUNsaWVudCB7XG4gIGNvbnN0IGNvbmZpZzogQ29uZmlnID0gZ2V0Q29uZmlnV2l0aE9wdGlvbnMob3B0aW9ucyk7XG4gIHByaW50SW5mbygnSW5pdGlhbGl6aW5nIEFQSSBjbGllbnQnLCB7IGJhc2VVcmw6IGNvbmZpZy5hcGkuYmFzZVVybCB9KTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChjb25maWcpO1xuXG4gIGlmICghY2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgcHJpbnRFcnJvcignTm90IGF1dGhlbnRpY2F0ZWQnLCB7IGhpbnQ6ICdSdW4gXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW5cIiwgc2V0IFBMQVRGT1JNX1RPS0VOLCBvciB1c2UgLS1zdG9yZS10b2tlbnMnIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHByaW50U3VjY2VzcygnQVBJIGNsaWVudCBpbml0aWFsaXplZCcpO1xuICByZXR1cm4gY2xpZW50O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcmVxdWlyZWQgZW50aXR5IElEIChVTElEIG9yIFVVSUQgZm9ybWF0KS5cbiAqIFJldHVybnMgdHJpbW1lZCBJRC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIElEIGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVudGl0eUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVudGl0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWQgfHwgdHlwZW9mIGlkICE9PSAnc3RyaW5nJyB8fCBpZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgSW52YWxpZCAke2VudGl0eU5hbWV9IElEYCwgeyBwcm92aWRlZDogaWQgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eU5hbWV9IElEIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cblxuICBjb25zdCB0cmltbWVkID0gaWQudHJpbSgpO1xuXG4gIGlmICh0cmltbWVkLmxlbmd0aCAhPT0gMjYgJiYgdHJpbW1lZC5sZW5ndGggIT09IDM2KSB7XG4gICAgcHJpbnRXYXJuaW5nKGAke2VudGl0eU5hbWV9IElEIGZvcm1hdCBtYXkgYmUgaW52YWxpZGAsIHtcbiAgICAgIHByb3ZpZGVkOiB0cmltbWVkLFxuICAgICAgZXhwZWN0ZWRMZW5ndGg6ICcyNiBjaGFyYWN0ZXJzIChVTElEKSBvciAzNiBjaGFyYWN0ZXJzIChVVUlEKScsXG4gICAgICBhY3R1YWxMZW5ndGg6IHRyaW1tZWQubGVuZ3RoLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbiJdfQ==
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb21tYW5kLXV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBZ0IsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxJQUFJLE1BQU0sWUFBWSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFlLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3JJLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRixNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTVDOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBYSxFQUFFLFFBQWlCLEVBQUUsSUFBMEI7SUFDN0YsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUMxQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcs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QUFFLFVBQWtCO0lBQ3pFLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUQsVUFBVSxDQUFDLFdBQVcsVUFBVSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsVUFBVSxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFMUIsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25ELFlBQVksQ0FBQyxHQUFHLFVBQVUsMkJBQTJCLEVBQUU7WUFDckQsUUFBUSxFQUFFLE9BQU87WUFDakIsY0FBYyxFQUFFLDhDQUE4QztZQUM5RCxZQUFZLEVBQUUsT0FBTyxDQUFDLE1BQU07U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHR5cGUgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4vYXBpLWNsaWVudC5qcyc7XG5pbXBvcnQgeyBnZXRTZWNyZXRWYWx1ZSB9IGZyb20gJy4vYXdzLXNlY3JldHMuanMnO1xuaW1wb3J0IHsgdHlwZSBDb25maWcsIGdldEFwaUNvbmZpZywgZ2V0Q29uZmlnV2l0aE9wdGlvbnMgfSBmcm9tICcuL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgY2xlYXJTZXNzaW9uLCBpc1Nlc3Npb25Vc2FibGUsIGxvYWRTZXNzaW9uLCBzYXZlU2Vzc2lvbiwgd2l0aFJlZnJlc2hMb2NrLCB0eXBlIFN0b3JlZFNlc3Npb24gfSBmcm9tICcuL2NyZWRlbnRpYWwtc3RvcmUuanMnO1xuaW1wb3J0IHsgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgZm9ybWF0RHVyYXRpb24sIGdlbmVyYXRlRXhlY3V0aW9uSWQgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZ3JlZW4sIG1hZ2VudGEgfSA9IHBpY287XG5cbi8qKlxuICogUHJpbnQgY29tbWFuZCBoZWFkZXIgd2l0aCBzZWN0aW9uIHRpdGxlIGFuZCBleGVjdXRpb24gSUQuXG4gKiBSZXR1cm5zIHRoZSBleGVjdXRpb24gSUQgZm9yIHVzZSBpbiBlcnJvciBoYW5kbGVycyBhbmQgc3VtbWFyaWVzLlxuICpcbiAqIFBhc3MgYHsgcXVpZXQ6IHRydWUgfWAgdG8gc3VwcHJlc3MgdGhlIGRlY29yYXRpdmUgb3V0cHV0IHdoaWxlIHN0aWxsIGdldHRpbmcgdGhlXG4gKiBpZCDigJQgdXNlZCBib3RoIGJ5IGAtLXF1aWV0YCBjYWxsZXJzIGFuZCBieSBgLS1qc29uYCBjb21tYW5kcyAoc28gdGhlIGJhbm5lclxuICogZG9lc24ndCBsYW5kIG9uIHN0ZG91dCBhaGVhZCBvZiB0aGUgSlNPTiBwYXlsb2FkIGFuZCBicmVhayBg4oCmIC0tanNvbiB8IGpxYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludENvbW1hbmRIZWFkZXIodGl0bGU6IHN0cmluZywgc3VidGl0bGU/OiBzdHJpbmcsIG9wdHM/OiB7IHF1aWV0PzogYm9vbGVhbiB9KTogc3RyaW5nIHtcbiAgY29uc3QgZXhlY3V0aW9uSWQgPSBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk7XG4gIGlmICghb3B0cz8ucXVpZXQpIHtcbiAgICBwcmludFNlY3Rpb24odGl0bGUpO1xuICAgIGNvbnNvbGUubG9nKGAke21hZ2VudGEoYFtFWEUtJHtleGVjdXRpb25JZH1dYCl9ICR7Y3lhbihib2xkKHN1YnRpdGxlIHx8IHRpdGxlKSl9YCk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICB9XG4gIHJldHVybiBleGVjdXRpb25JZDtcbn1cblxuLyoqIEF0dGFjaCB0aGUgc3RhbmRhcmQgYC0tdmVyaWZ5LXNzbGAgLyBgLS1uby12ZXJpZnktc3NsYCBwYWlyLiBUaGUgdHdvIHRvZ2V0aGVyXG4gKiAgZ2l2ZSBDb21tYW5kZXIgYW4gZXhwbGljaXQgdHJpLXN0YXRlIGBvcHRpb25zLnZlcmlmeVNzbGAgKHRydWUvZmFsc2UvdW5kZWZpbmVkKS5cbiAqICBSZXR1cm5zIHRoZSBjb21tYW5kIHNvIGl0IGNvbXBvc2VzOiBgd2l0aFNzbE9wdGlvbnMocHJvZ3JhbS5jb21tYW5kKCd4Jykp4oCmYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3NsT3B0aW9uczxUIGV4dGVuZHMgQ29tbWFuZD4oY21kOiBUKTogVCB7XG4gIHJldHVybiBjbWRcbiAgICAub3B0aW9uKCctLXZlcmlmeS1zc2wnLCAnRW5hYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5vcHRpb24oJy0tbm8tdmVyaWZ5LXNzbCcsICdEaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKSBhcyBUO1xufVxuXG4vKiogQXR0YWNoIHRoZSBzdGFuZGFyZCBgLS1yZWdpb24gPHJlZ2lvbj5gIG9wdGlvbiAob25lIGNhbm9uaWNhbCBkZXNjcmlwdGlvbikuXG4gKiAgUmVnaW9uIHJlc29sdXRpb24gKGZsYWcg4oaSIEFXU19SRUdJT04g4oaSIENES19ERUZBVUxUX1JFR0lPTiDihpIgdXMtZWFzdC0xKSBsaXZlcyBpblxuICogIGF3cy1lbnYucmVzb2x2ZUF3c1JlZ2lvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVnaW9uT3B0aW9uPFQgZXh0ZW5kcyBDb21tYW5kPihjbWQ6IFQpOiBUIHtcbiAgcmV0dXJuIGNtZC5vcHRpb24oJy0tcmVnaW9uIDxyZWdpb24+JywgJ0FXUyByZWdpb24gKGRlZmF1bHRzIHRvIEFXU19SRUdJT04gLyBDREtfREVGQVVMVF9SRUdJT04gLyB1cy1lYXN0LTEpJykgYXMgVDtcbn1cblxuLyoqIEF0dGFjaCB0aGUgc3RhbmRhcmQgYC0tcHJvZmlsZSA8cHJvZmlsZT5gIG9wdGlvbiAob25lIGNhbm9uaWNhbCBkZXNjcmlwdGlvbikuXG4gKiAgTm8gZGVmYXVsdCBpcyBwaW5uZWQgc28gdGhlIEFXUyBkZWZhdWx0IGNyZWRlbnRpYWwgY2hhaW4gKGVudiB2YXJzLCBTU08sIHJvbGVzKVxuICogIHdvcmtzIG91dCBvZiB0aGUgYm94OyAtLXByb2ZpbGUgb25seSBzZWxlY3RzIGEgc2hhcmVkIHByb2ZpbGUgd2hlbiBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFByb2ZpbGVPcHRpb248VCBleHRlbmRzIENvbW1hbmQ+KGNtZDogVCk6IFQge1xuICByZXR1cm4gY21kLm9wdGlvbignLS1wcm9maWxlIDxwcm9maWxlPicsICdBV1MgQ0xJIHByb2ZpbGUgKGRlZmF1bHRzIHRvIHRoZSBzdGFuZGFyZCBBV1MgY3JlZGVudGlhbCBjaGFpbiknKSBhcyBUO1xufVxuXG4vKipcbiAqIFByaW50IGV4ZWN1dGlvbiBzdW1tYXJ5IHdpdGggSUQsIGR1cmF0aW9uLCBhbmQgc3RhdHVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRFeGVjdXRpb25TdW1tYXJ5KGV4ZWN1dGlvbklkOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnRXhlY3V0aW9uIElEJzogZXhlY3V0aW9uSWQsXG4gICAgJ0R1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24oZHVyYXRpb24pLFxuICAgICdTdGF0dXMnOiBncmVlbign4pyTIFN1Y2Nlc3MnKSxcbiAgfSk7XG59XG5cbi8qKlxuICogV2FybiBpZiBTU0wgdmVyaWZpY2F0aW9uIGlzIGRpc2FibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRTc2xXYXJuaW5nKHZlcmlmeVNzbD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgaWYgKHZlcmlmeVNzbCA9PT0gZmFsc2UpIHtcbiAgICBwcmludFdhcm5pbmcoJ1NTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gaXMgRElTQUJMRUQnKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5ldyBhIHN0b3JlZCBzZXNzaW9uIHdpdGggaXRzIHJlZnJlc2ggdG9rZW4sIHBlcnNpc3QgdGhlIHJvdGF0ZWQgcGFpciwgYW5kXG4gKiByZXR1cm4gdGhlIG5ldyBhY2Nlc3MgdG9rZW4uIFJldHVybnMgdW5kZWZpbmVkIChhbmQgZm9yZ2V0cyB0aGUgc2Vzc2lvbikgd2hlblxuICogdGhlIHBsYXRmb3JtIHJlZnVzZXMgaXQg4oCUIGEgcm90YXRlZC1hd2F5IG9yIHJldm9rZWQgdG9rZW4gaXMgZGVhZCwgYW5kIGtlZXBpbmdcbiAqIGl0IHdvdWxkIG1ha2UgZXZlcnkgbGF0ZXIgY29tbWFuZCBmYWlsIHRoZSBzYW1lIHdheS5cbiAqXG4gKiBgWC1QYi1DbGllbnRgIGlzIG1hbmRhdG9yeSBvbiAvYXV0aC9yZWZyZXNoICh0aGUgQ1NSRiBnYXRlKSBhbmQgaXRzIHZhbHVlIGFsc29cbiAqIHBpY2tzIHRoZSB0cmFuc3BvcnQ6IGFueXRoaW5nIGJ1dCBgd2ViYCBrZWVwcyB0aGUgYm9keSBmbG93IHRoZSBDTEkgdXNlcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVmcmVzaFN0b3JlZFNlc3Npb24oYmFzZVVybDogc3RyaW5nLCBzdGFsZTogU3RvcmVkU2Vzc2lvbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIC8vIE9uZSByZWZyZXNoIGF0IGEgdGltZSBwZXIgbWFjaGluZSAoc2VlIGB3aXRoUmVmcmVzaExvY2tgKTogYSBzZWNvbmQgcHJvY2Vzc1xuICAvLyByZS1yZWFkcyB0aGUgc3RvcmUgdW5kZXIgdGhlIGxvY2sgYW5kIHVzZXMgdGhlIHBhaXIgdGhlIGZpcnN0IG9uZSBzYXZlZCxcbiAgLy8gcmF0aGVyIHRoYW4gc3BlbmRpbmcgdGhlIHNhbWUgc2luZ2xlLXVzZSByZWZyZXNoIHRva2VuIGFnYWluLlxuICByZXR1cm4gd2l0aFJlZnJlc2hMb2NrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50ID0gbG9hZFNlc3Npb24oYmFzZVVybCk7XG4gICAgaWYgKGlzU2Vzc2lvblVzYWJsZShjdXJyZW50KSkgcmV0dXJuIGN1cnJlbnQuYWNjZXNzVG9rZW47XG4gICAgcmV0dXJuIHJlbmV3U2Vzc2lvbihiYXNlVXJsLCBjdXJyZW50ID8/IHN0YWxlKTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlbmV3U2Vzc2lvbihiYXNlVXJsOiBzdHJpbmcsIHNlc3Npb246IFN0b3JlZFNlc3Npb24pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXNlc3Npb24ucmVmcmVzaFRva2VuKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDx7IGRhdGE/OiB7IGFjY2Vzc1Rva2VuPzogc3RyaW5nOyByZWZyZXNoVG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNJbj86IG51bWJlciB9IH0+KFxuICAgICAgYCR7YmFzZVVybH0vYXBpL2F1dGgvcmVmcmVzaGAsXG4gICAgICB7IHJlZnJlc2hUb2tlbjogc2Vzc2lvbi5yZWZyZXNoVG9rZW4gfSxcbiAgICAgIHsgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnWC1QYi1DbGllbnQnOiAnY2xpJyB9LCB0aW1lb3V0OiAzMF8wMDAgfSxcbiAgICApO1xuICAgIGNvbnN0IHJlbmV3ZWQgPSByZXNwb25zZS5kYXRhPy5kYXRhO1xuICAgIGlmICghcmVuZXdlZD8uYWNjZXNzVG9rZW4pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc2F2ZVNlc3Npb24oYmFzZVVybCwge1xuICAgICAgYWNjZXNzVG9rZW46IHJlbmV3ZWQuYWNjZXNzVG9rZW4sXG4gICAgICAuLi4ocmVuZXdlZC5yZWZyZXNoVG9rZW4gPyB7IHJlZnJlc2hUb2tlbjogcmVuZXdlZC5yZWZyZXNoVG9rZW4gfSA6IHt9KSxcbiAgICAgIGV4cGlyZXNBdDogRGF0ZS5ub3coKSArIChyZW5ld2VkLmV4cGlyZXNJbiA/PyA5MDApICogMTAwMCxcbiAgICAgIC4uLihzZXNzaW9uLm9yZ2FuaXphdGlvbklkID8geyBvcmdhbml6YXRpb25JZDogc2Vzc2lvbi5vcmdhbml6YXRpb25JZCB9IDoge30pLFxuICAgIH0pO1xuICAgIHJldHVybiByZW5ld2VkLmFjY2Vzc1Rva2VuO1xuICB9IGNhdGNoIHtcbiAgICBjbGVhclNlc3Npb24oYmFzZVVybCk7XG4gICAgcHJpbnRXYXJuaW5nKCdUaGUgc3RvcmVkIHNlc3Npb24gY291bGQgbm90IGJlIHJlbmV3ZWQg4oCUIHJ1biBcInBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpblwiIGFnYWluJyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBwbGF0Zm9ybSBjcmVkZW50aWFsIHVzaW5nIHRocmVlIG1ldGhvZHMgKGluIHByaW9yaXR5IG9yZGVyKTpcbiAqXG4gKiAxLiBQTEFURk9STV9UT0tFTiBlbnYgdmFyIChhIEpXVCwgb3IgYW4gb3BhcXVlIGBwYl9wYXRf4oCmYC9gcGJfc2Ff4oCmYCBrZXkpXG4gKiAyLiB0aGUgc2Vzc2lvbiBgYXV0aCBsb2dpbmAgc3RvcmVkIGZvciB0aGlzIHBsYXRmb3JtIChyZW5ld2VkIGlmIGl0IGhhcyBleHBpcmVkKVxuICogMy4gLS1zdG9yZS10b2tlbnMgZmxhZyDihpIgdGhlIHNlcnZpY2UtYWNjb3VudCBrZXkgaW4gQVdTIFNlY3JldHMgTWFuYWdlclxuICpcbiAqIEByZXR1cm5zIHRoZSBiZWFyZXIgY3JlZGVudGlhbCBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVUb2tlbihvcHRpb25zOiB7XG4gIHN0b3JlVG9rZW5zPzogYm9vbGVhbjtcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICBwcm9maWxlPzogc3RyaW5nO1xufSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIFBhdGggMTogUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICBpZiAocHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4pIHtcbiAgICBwcmludEluZm8oJ1VzaW5nIFBMQVRGT1JNX1RPS0VOIGZyb20gZW52aXJvbm1lbnQnKTtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU47XG4gIH1cblxuICAvLyBQYXRoIDI6IHRoZSBzdG9yZWQgYnJvd3NlciBzaWduLWluLiBTa2lwcGVkIGVudGlyZWx5IHdoZW4gLS1zdG9yZS10b2tlbnNcbiAgLy8gbmFtZXMgYSBtYWNoaW5lIGNyZWRlbnRpYWwsIHNvIGFuIG9wZXJhdG9yJ3MgbGFwdG9wIHNlc3Npb24gY2FuIG5ldmVyIGJlXG4gIC8vIHVzZWQgd2hlcmUgdGhlIGF1dG9tYXRpb24gY3JlZGVudGlhbCB3YXMgYXNrZWQgZm9yLlxuICBpZiAoIW9wdGlvbnMuc3RvcmVUb2tlbnMpIHtcbiAgICBjb25zdCBiYXNlVXJsID0gZ2V0QXBpQ29uZmlnKCkuYXBpLmJhc2VVcmw7XG4gICAgY29uc3Qgc3RvcmVkID0gbG9hZFNlc3Npb24oYmFzZVVybCk7XG4gICAgaWYgKGlzU2Vzc2lvblVzYWJsZShzdG9yZWQpKSB7XG4gICAgICBwcmludEluZm8oJ1VzaW5nIHRoZSBzdG9yZWQgc2Vzc2lvbiBmcm9tIFwiYXV0aCBsb2dpblwiJyk7XG4gICAgICByZXR1cm4gc3RvcmVkLmFjY2Vzc1Rva2VuO1xuICAgIH1cbiAgICBpZiAoc3RvcmVkKSB7XG4gICAgICBjb25zdCByZW5ld2VkID0gYXdhaXQgcmVmcmVzaFN0b3JlZFNlc3Npb24oYmFzZVVybCwgc3RvcmVkKTtcbiAgICAgIGlmIChyZW5ld2VkKSB7XG4gICAgICAgIHByaW50SW5mbygnUmVuZXdlZCB0aGUgc3RvcmVkIHNlc3Npb24gZnJvbSBcImF1dGggbG9naW5cIicpO1xuICAgICAgICByZXR1cm4gcmVuZXdlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQYXRoIDM6IC0tc3RvcmUtdG9rZW5zIOKGkiByZWFkIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gIGlmIChvcHRpb25zLnN0b3JlVG9rZW5zKSB7XG4gICAgY29uc3Qgc2VjcmV0TmFtZSA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1NFQ1JFVF9OQU1FO1xuICAgIGlmICghc2VjcmV0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQTEFURk9STV9TRUNSRVRfTkFNRSBlbnYgdmFyIGlzIHJlcXVpcmVkIHdpdGggLS1zdG9yZS10b2tlbnMnKTtcbiAgICB9XG5cbiAgICBwcmludEluZm8oJ0ZldGNoaW5nIHNlY3JldCBmcm9tIFNlY3JldHMgTWFuYWdlcicsIHsgc2VjcmV0OiBzZWNyZXROYW1lIH0pO1xuXG4gICAgY29uc3Qgc2VjcmV0SnNvbiA9IGF3YWl0IGdldFNlY3JldFZhbHVlKHNlY3JldE5hbWUsIHsgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbiwgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlIH0pO1xuICAgIGNvbnN0IHNlY3JldCA9IEpTT04ucGFyc2Uoc2VjcmV0SnNvbikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwcmludFN1Y2Nlc3MoJ1NlY3JldCByZXRyaWV2ZWQgZnJvbSBTZWNyZXRzIE1hbmFnZXInKTtcblxuICAgIC8vIHN0b3JlLXRva2VuIHdyaXRlcyB0aGUgc2VydmljZS1hY2NvdW50IEtFWSB0byB0aGUgYHBhc3N3b3JkYCBmaWVsZCAoc2NoZW1hOlxuICAgIC8vIHsgdXNlcm5hbWU6IG9yZ0lkLCBwYXNzd29yZDogcGJfc2Ff4oCmIH0g4oCUIHNhdGlzZmllcyBDb2RlQnVpbGQnc1xuICAgIC8vIHNlY3JldHNNYW5hZ2VyQ3JlZGVudGlhbHMpLCBub3QgYGFjY2Vzc1Rva2VuYC4gVGhlIGtleSBpcyBwcmVzZW50ZWQgYXMgYVxuICAgIC8vIGJlYXJlciBjcmVkZW50aWFsIGFuZCBleGNoYW5nZWQgc2VydmVyLXNpZGUsIHNvIG5vdGhpbmcgaGVyZSBkZWNvZGVzIGl0LlxuICAgIGlmICghc2VjcmV0LnBhc3N3b3JkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3JldCBtaXNzaW5nIHBhc3N3b3JkIChzZXJ2aWNlLWFjY291bnQga2V5KSDigJQgcnVuIFwicGlwZWxpbmUtbWFuYWdlciBpbmZyYSBzdG9yZS10b2tlblwiIHRvIHByb3Zpc2lvbiBvbmUnKTtcbiAgICB9XG5cbiAgICBwcmludEluZm8oJ1VzaW5nIHRoZSBzdG9yZWQgc2VydmljZS1hY2NvdW50IGtleScpO1xuICAgIHJldHVybiBzZWNyZXQucGFzc3dvcmQ7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ0F1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLiBVc2Ugb25lIG9mOlxcbicgK1xuICAgICcgIC0gUnVuIFwicGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXCIgKGJyb3dzZXIgc2lnbi1pbiwgc3RvcmVkIGZvciB0aGlzIHBsYXRmb3JtKVxcbicgK1xuICAgICcgIC0gU2V0IFBMQVRGT1JNX1RPS0VOIHRvIGFuIGFjY2VzcyBrZXkgZnJvbSBcInBpcGVsaW5lLW1hbmFnZXIgYXV0aCBwYXRcIlxcbicgK1xuICAgICcgIC0gUGFzcyAtLXN0b3JlLXRva2VucyB3aXRoIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXInLFxuICApO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemUgYW5kIHJldHVybiBhbiBhdXRoZW50aWNhdGVkIEFQSSBjbGllbnQuXG4gKlxuICogU3VwcG9ydHMgdGhyZWUgYXV0aCBtZXRob2RzOlxuICogMS4gUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICogMi4gdGhlIHN0b3JlZCBgYXV0aCBsb2dpbmAgc2Vzc2lvbiBmb3IgdGhpcyBwbGF0Zm9ybSAocmVuZXdlZCBvbiBleHBpcnkpXG4gKiAzLiAtLXN0b3JlLXRva2VucyArIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIg4oaSIGZldGNoIHRva2VuIGZyb20gU2VjcmV0cyBNYW5hZ2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9uczoge1xuICBzdG9yZVRva2Vucz86IGJvb2xlYW47XG4gIHZlcmlmeVNzbD86IGJvb2xlYW47XG4gIHJlZ2lvbj86IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbn0pOiBQcm9taXNlPEFwaUNsaWVudD4ge1xuICAvLyBSZXNvbHZlIHRva2VuIGFuZCBzZXQgaXQgaW4gZW52IHNvIEFwaUNsaWVudC9nZXRDb25maWcgY2FuIGZpbmQgaXRcbiAgaWYgKCFwcm9jZXNzLmVudi5QTEFURk9STV9UT0tFTikge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgcmVzb2x2ZVRva2VuKG9wdGlvbnMpO1xuICAgIHByb2Nlc3MuZW52LlBMQVRGT1JNX1RPS0VOID0gdG9rZW47XG4gIH1cblxuICByZXR1cm4gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIGFuZCByZXR1cm4gYW4gYXV0aGVudGljYXRlZCBBUEkgY2xpZW50IChzeW5jIOKAlCByZXF1aXJlcyBQTEFURk9STV9UT0tFTikuXG4gKiBVc2UgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIGZvciAtLXN0b3JlLXRva2VucyBzdXBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXV0aGVudGljYXRlZENsaWVudChvcHRpb25zOiB7IHZlcmlmeVNzbD86IGJvb2xlYW4gfSk6IEFwaUNsaWVudCB7XG4gIGNvbnN0IGNvbmZpZzogQ29uZmlnID0gZ2V0Q29uZmlnV2l0aE9wdGlvbnMob3B0aW9ucyk7XG4gIHByaW50SW5mbygnSW5pdGlhbGl6aW5nIEFQSSBjbGllbnQnLCB7IGJhc2VVcmw6IGNvbmZpZy5hcGkuYmFzZVVybCB9KTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChjb25maWcpO1xuXG4gIGlmICghY2xpZW50LmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgcHJpbnRFcnJvcignTm90IGF1dGhlbnRpY2F0ZWQnLCB7IGhpbnQ6ICdSdW4gXCJwaXBlbGluZS1tYW5hZ2VyIGF1dGggbG9naW5cIiwgc2V0IFBMQVRGT1JNX1RPS0VOLCBvciB1c2UgLS1zdG9yZS10b2tlbnMnIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHByaW50U3VjY2VzcygnQVBJIGNsaWVudCBpbml0aWFsaXplZCcpO1xuICByZXR1cm4gY2xpZW50O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcmVxdWlyZWQgZW50aXR5IElEIChVTElEIG9yIFVVSUQgZm9ybWF0KS5cbiAqIFJldHVybnMgdHJpbW1lZCBJRC5cbiAqXG4gKiBAdGhyb3dzIEVycm9yIGlmIElEIGlzIGVtcHR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUVudGl0eUlkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVudGl0eU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaWQgfHwgdHlwZW9mIGlkICE9PSAnc3RyaW5nJyB8fCBpZC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcHJpbnRFcnJvcihgSW52YWxpZCAke2VudGl0eU5hbWV9IElEYCwgeyBwcm92aWRlZDogaWQgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2VudGl0eU5hbWV9IElEIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cblxuICBjb25zdCB0cmltbWVkID0gaWQudHJpbSgpO1xuXG4gIGlmICh0cmltbWVkLmxlbmd0aCAhPT0gMjYgJiYgdHJpbW1lZC5sZW5ndGggIT09IDM2KSB7XG4gICAgcHJpbnRXYXJuaW5nKGAke2VudGl0eU5hbWV9IElEIGZvcm1hdCBtYXkgYmUgaW52YWxpZGAsIHtcbiAgICAgIHByb3ZpZGVkOiB0cmltbWVkLFxuICAgICAgZXhwZWN0ZWRMZW5ndGg6ICcyNiBjaGFyYWN0ZXJzIChVTElEKSBvciAzNiBjaGFyYWN0ZXJzIChVVUlEKScsXG4gICAgICBhY3R1YWxMZW5ndGg6IHRyaW1tZWQubGVuZ3RoLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,YAAY,EAAE,MAAM,EAAE,CAAC;AA6CvB;;;;;;;;;;;GAWG;AACH;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCnD;AAED,wBAAgB,SAAS,IAAI,MAAM,CA8BlC;AAaD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAU7E"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,YAAY,EAAE,MAAM,EAAE,CAAC;AA2CvB;;;;;;;;;;;GAWG;AACH;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAuCnD;AAED,wBAAgB,SAAS,IAAI,MAAM,CA8BlC;AAaD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAU7E"}
@@ -19,12 +19,10 @@ const defaultConfig = {
19
19
  api: {
20
20
  baseUrl: 'https://localhost:8443',
21
21
  timeout: 30_000,
22
- pipelineUrl: '/api/pipeline',
23
- pipelineListUrl: '/api/pipelines',
22
+ pipelineUrl: '/api/pipelines',
24
23
  pipelineTemplateUrl: '/api/pipeline-templates',
25
- pluginUrl: '/api/plugin',
26
- pluginListUrl: '/api/plugins',
27
- pluginUploadUrl: '/api/plugin/upload',
24
+ pluginUrl: '/api/plugins',
25
+ pluginUploadUrl: '/api/plugins/upload',
28
26
  rejectUnauthorized: true,
29
27
  },
30
28
  };
@@ -162,4 +160,4 @@ export function getConfigWithOptions(options) {
162
160
  }
163
161
  return config;
164
162
  }
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25maWctbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BFLE9BQU8sRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELDBEQUEwRDtBQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBSS9EOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQXlCO0lBQzFDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsT0FBTyxFQUFFLE1BQU07UUFDZixXQUFXLEVBQUUsZUFBZTtRQUM1QixlQUFlLEVBQUUsZ0JBQWdCO1FBQ2pDLG1CQUFtQixFQUFFLHlCQUF5QjtRQUM5QyxTQUFTLEVBQUUsYUFBYTtRQUN4QixhQUFhLEVBQUUsY0FBYztRQUM3QixlQUFlLEVBQUUsb0JBQW9CO1FBQ3JDLGtCQUFrQixFQUFFLElBQUk7S0FDekI7Q0FDRixDQUFDO0FBRUYsNERBQTREO0FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFcEY7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBZ0IsRUFBRSxNQUE0QjtJQUNwRSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUU1QyxJQUFJLENBQUM7UUFDSCxVQUFVLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDakIsWUFBWSxDQUFDLHFFQUFxRSxDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLFlBQVksQ0FBQyw0Q0FBNEMsRUFBRTtZQUN6RCxJQUFJLEVBQUUsUUFBUTtZQUNkLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDO1NBQzNCLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxZQUFZO0lBQzFCLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFFL0Ysc0VBQXNFO0lBQ3RFLDhFQUE4RTtJQUM5RSwrRUFBK0U7SUFDL0UseUVBQXlFO0lBQ3pFLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRixNQUFNLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRW5ELDBDQUEwQztJQUMxQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNsQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELFVBQVUsQ0FBQywwQ0FBMEMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixLQUFLLEdBQUcsQ0FBQztRQUM1RCxJQUFJLE9BQU8sSUFBSSxlQUFlLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLFlBQVksQ0FBQyxxRkFBcUYsQ0FBQyxDQUFDO1FBQ3RHLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLE9BQU8sQ0FBQztZQUN6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLFlBQVksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1lBQ3BGLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ2xDLFVBQVUsQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO2FBQU0sQ0FBQztZQUNOLFlBQVksQ0FBQyw2Q0FBNkMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDeEcsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7SUFFOUIsOEVBQThFO0lBQzlFLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLHlCQUF5QjtJQUN6QixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsVUFBVSxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDOUYsTUFBTSxJQUFJLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsVUFBVSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFFaEQsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULElBQUksRUFBRSxFQUFFLEtBQUssRUFBRTtLQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLE1BQWM7SUFDckMsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUU7S0FDbEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQWdDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzNCLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNoQyx1RUFBdUU7UUFDdkUsNkVBQTZFO1FBQzdFLG1FQUFtRTtRQUNuRSx1QkFBdUIsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcbmltcG9ydCB7IGlzU2Vzc2lvblVzYWJsZSwgbG9hZFNlc3Npb24gfSBmcm9tICcuL2NyZWRlbnRpYWwtc3RvcmUuanMnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRFcnJvciwgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgYXNzZXJ0U3NsRGlzYWJsZUFsbG93ZWQsIGlzUHJvZHVjdGlvbkVudiB9IGZyb20gJy4vdGxzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuZXhwb3J0IHR5cGUgeyBDb25maWcgfTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24g4oCUIEFQSSBlbmRwb2ludCBwYXRocyBhbmQgY29ubmVjdGlvbiBzZXR0aW5ncy5cbiAqL1xuY29uc3QgZGVmYXVsdENvbmZpZzogT21pdDxDb25maWcsICdhdXRoJz4gPSB7XG4gIGFwaToge1xuICAgIGJhc2VVcmw6ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJyxcbiAgICB0aW1lb3V0OiAzMF8wMDAsXG4gICAgcGlwZWxpbmVVcmw6ICcvYXBpL3BpcGVsaW5lJyxcbiAgICBwaXBlbGluZUxpc3RVcmw6ICcvYXBpL3BpcGVsaW5lcycsXG4gICAgcGlwZWxpbmVUZW1wbGF0ZVVybDogJy9hcGkvcGlwZWxpbmUtdGVtcGxhdGVzJyxcbiAgICBwbHVnaW5Vcmw6ICcvYXBpL3BsdWdpbicsXG4gICAgcGx1Z2luTGlzdFVybDogJy9hcGkvcGx1Z2lucycsXG4gICAgcGx1Z2luVXBsb2FkVXJsOiAnL2FwaS9wbHVnaW4vdXBsb2FkJyxcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IHRydWUsXG4gIH0sXG59O1xuXG4vKiogVXNlciBjb25maWcgZmlsZSBwYXRoOiB+Ly5waXBlbGluZS1tYW5hZ2VyL2NvbmZpZy55bWwgKi9cbmNvbnN0IFVTRVJfQ09ORklHX1BBVEggPSBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLnBpcGVsaW5lLW1hbmFnZXInLCAnY29uZmlnLnltbCcpO1xuXG4vKipcbiAqIExvYWQgYSBZQU1MIGNvbmZpZyBmaWxlIGFuZCBtZXJnZSBpdHMgYGFwaWAgc2VjdGlvbiBpbnRvIHRoZSBjb25maWcuXG4gKiBSZXR1cm5zIHRoZSBtZXJnZWQgY29uZmlnIG9yIHRoZSBvcmlnaW5hbCBpZiBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgZmFpbHMuXG4gKi9cbmZ1bmN0aW9uIGxvYWRDb25maWdGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIGNvbmZpZzogT21pdDxDb25maWcsICdhdXRoJz4pOiBPbWl0PENvbmZpZywgJ2F1dGgnPiB7XG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlUGF0aCkpIHJldHVybiBjb25maWc7XG5cbiAgdHJ5IHtcbiAgICBwcmludERlYnVnKCdMb2FkaW5nIGNvbmZpZ3VyYXRpb24nLCB7IHBhdGg6IGZpbGVQYXRoIH0pO1xuICAgIGNvbnN0IHBhcnNlZCA9IHlhbWwucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKSk7XG4gICAgaWYgKHBhcnNlZD8uYXV0aCkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdBdXRoIHNlY3Rpb24gaW4gY29uZmlnIGZpbGUgaXMgaWdub3JlZCDigJQgdXNlIFBMQVRGT1JNX1RPS0VOIGVudiB2YXInKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgYXBpOiB7IC4uLmNvbmZpZy5hcGksIC4uLnBhcnNlZD8uYXBpIH0gfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludFdhcm5pbmcoJ0ZhaWxlZCB0byBsb2FkIGNvbmZpZyBmaWxlLCB1c2luZyBkZWZhdWx0cycsIHtcbiAgICAgIHBhdGg6IGZpbGVQYXRoLFxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvciksXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxufVxuXG4vKipcbiAqIExvYWQgY29uZmlndXJhdGlvbiBmcm9tIGZpbGVzIGFuZCBlbnZpcm9ubWVudC5cbiAqXG4gKiBQcmlvcml0eSAobGFzdCB3aW5zKTpcbiAqIDEuIEJ1aWx0LWluIGRlZmF1bHRzXG4gKiAyLiBVc2VyIGNvbmZpZyBmaWxlOiB+Ly5waXBlbGluZS1tYW5hZ2VyL2NvbmZpZy55bWxcbiAqIDMuIFByb2plY3QgY29uZmlnIGZpbGU6IENMSV9DT05GSUdfUEFUSCBvciAuL2NvbmZpZy55bWxcbiAqIDQuIEVudmlyb25tZW50IHZhcmlhYmxlc1xuICpcbiAqIEF1dGggdG9rZW4gY29tZXMgZnJvbSBQTEFURk9STV9UT0tFTiwgZWxzZSB0aGUgc3RvcmVkIGBhdXRoIGxvZ2luYCBzZXNzaW9uIOKAlFxuICogbmV2ZXIgZnJvbSBhIGNvbmZpZyBmaWxlLlxuICovXG4vKipcbiAqIFJlc29sdmUgdGhlIEFQSS9jb25uZWN0aW9uIGNvbmZpZyAoYmFzZSBVUkwsIFNTTCwgdGltZW91dHMpIGZyb20gZmlsZXMgYW5kXG4gKiBlbnZpcm9ubWVudCBXSVRIT1VUIHJlcXVpcmluZyBgUExBVEZPUk1fVE9LRU5gLlxuICpcbiAqIFRoaXMgaXMgdGhlIHRva2VuLW9wdGlvbmFsIHNsaWNlIG9mIHtAbGluayBnZXRDb25maWd9LiBUaGUgcHJlLWF1dGggbG9naW4gc3RlcFxuICogKGBlbnN1cmVQbGF0Zm9ybVRva2VuYCkgbmVlZHMgdGhlIHJlc29sdmVkIGJhc2UgVVJMIHRvIFBPU1QgYC9hcGkvYXV0aC9sb2dpbmBcbiAqICpiZWZvcmUqIGFueSB0b2tlbiBleGlzdHMg4oCUIGNhbGxpbmcgYGdldENvbmZpZygpYCB0aGVyZSB3b3VsZCB0aHJvdyBvbiB0aGVcbiAqIG1pc3NpbmcgdG9rZW4gYW5kIG1ha2UgaW5saW5lLWxvZ2luIGRlYWQtb24tYXJyaXZhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwaUNvbmZpZygpOiBPbWl0PENvbmZpZywgJ2F1dGgnPiB7XG4gIGNvbnN0IHByb2plY3RDb25maWdQYXRoID0gcHJvY2Vzcy5lbnYuQ0xJX0NPTkZJR19QQVRIIHx8IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi9jb25maWcueW1sJyk7XG5cbiAgLy8gTGF5ZXIgMTogZGVmYXVsdHMg4oaSIExheWVyIDI6IHVzZXIgY29uZmlnIOKGkiBMYXllciAzOiBwcm9qZWN0IGNvbmZpZy5cbiAgLy8gYGFwaWAgaXMgY29waWVkIHRvbzogYSBzaGFsbG93IGB7IC4uLmRlZmF1bHRDb25maWcgfWAgc2hhcmVzIHRoZSBTQU1FIGBhcGlgXG4gIC8vIG9iamVjdCwgc28gdGhlIGBQTEFURk9STV9CQVNFX1VSTGAgYXNzaWdubWVudCBiZWxvdyBtdXRhdGVkIHRoZSBtb2R1bGUtbGV2ZWxcbiAgLy8gZGVmYXVsdHMgYW5kIGxlYWtlZCBvbmUgY2FsbGVyJ3MgYmFzZSBVUkwgaW50byBldmVyeSBsYXRlciByZXNvbHV0aW9uLlxuICBsZXQgY29uZmlnID0gbG9hZENvbmZpZ0ZpbGUoVVNFUl9DT05GSUdfUEFUSCwgeyBhcGk6IHsgLi4uZGVmYXVsdENvbmZpZy5hcGkgfSB9KTtcbiAgY29uZmlnID0gbG9hZENvbmZpZ0ZpbGUocHJvamVjdENvbmZpZ1BhdGgsIGNvbmZpZyk7XG5cbiAgLy8gTGF5ZXIgNDogZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gIGlmIChwcm9jZXNzLmVudi5QTEFURk9STV9CQVNFX1VSTCkge1xuICAgIGNvbmZpZy5hcGkuYmFzZVVybCA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMO1xuICAgIHByaW50RGVidWcoJ1VzaW5nIFBMQVRGT1JNX0JBU0VfVVJMIGZyb20gZW52aXJvbm1lbnQnLCB7IGJhc2VVcmw6IGNvbmZpZy5hcGkuYmFzZVVybCB9KTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZGlzYWJsZSA9IHByb2Nlc3MuZW52LlRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID09PSAnMCc7XG4gICAgaWYgKGRpc2FibGUgJiYgaXNQcm9kdWN0aW9uRW52KCkpIHtcbiAgICAgIHByaW50V2FybmluZygnSWdub3JpbmcgVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MCBpbiBwcm9kdWN0aW9uIOKAlCBTU0wgdmVyaWZpY2F0aW9uIHJlbWFpbnMgZW5hYmxlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA9ICFkaXNhYmxlO1xuICAgICAgaWYgKGRpc2FibGUpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKCdTU0wgY2VydGlmaWNhdGUgdmFsaWRhdGlvbiBkaXNhYmxlZCB2aWEgVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ9MCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5VUExPQURfVElNRU9VVCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHByb2Nlc3MuZW52LlVQTE9BRF9USU1FT1VULCAxMCk7XG4gICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+IDApIHtcbiAgICAgIGNvbmZpZy5hcGkudXBsb2FkVGltZW91dCA9IHBhcnNlZDtcbiAgICAgIHByaW50RGVidWcoJ1VzaW5nIFVQTE9BRF9USU1FT1VUIGZyb20gZW52aXJvbm1lbnQnLCB7IHVwbG9hZFRpbWVvdXQ6IGAke3BhcnNlZH1tc2AgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBVUExPQURfVElNRU9VVCB2YWx1ZSwgdXNpbmcgZGVmYXVsdCcsIHsgcHJvdmlkZWQ6IHByb2Nlc3MuZW52LlVQTE9BRF9USU1FT1VUIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcoKTogQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0QXBpQ29uZmlnKCk7XG5cbiAgLy8gUExBVEZPUk1fVE9LRU4gd2lucyAoYW4gYWNjZXNzIGtleSBpbiBDSSwgb3IgYW4gZXhwbGljaXQgZXhwb3J0KTsgb3RoZXJ3aXNlXG4gIC8vIGZhbGwgYmFjayB0byB0aGUgc2Vzc2lvbiBgYXV0aCBsb2dpbmAgc3RvcmVkIGZvciBUSElTIHBsYXRmb3JtLiBBIHN0b3JlZFxuICAvLyBzZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgZXhwaXJlZCBpcyBpZ25vcmVkIHJhdGhlciB0aGFuIHNlbnQgYW5kIHJlamVjdGVkIOKAlFxuICAvLyB0aGUgYXN5bmMgcGF0aCAoYHJlc29sdmVUb2tlbmApIHJlZnJlc2hlcyBpdCwgYW5kIGV2ZXJ5dGhpbmcgZWxzZSB0ZWxscyB0aGVcbiAgLy8gdXNlciB0byBzaWduIGluIGFnYWluLlxuICBjb25zdCBzdG9yZWQgPSBsb2FkU2Vzc2lvbihjb25maWcuYXBpLmJhc2VVcmwpO1xuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LlBMQVRGT1JNX1RPS0VOIHx8IChpc1Nlc3Npb25Vc2FibGUoc3RvcmVkKSA/IHN0b3JlZC5hY2Nlc3NUb2tlbiA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKCF0b2tlbikge1xuICAgIHByaW50RXJyb3IoJ05vdCBzaWduZWQgaW46IG5vIFBMQVRGT1JNX1RPS0VOLCBhbmQgbm8gdmFsaWQgc3RvcmVkIHNlc3Npb24gZm9yIHRoaXMgcGxhdGZvcm0nKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1biBcInBpcGVsaW5lLW1hbmFnZXIgYXV0aCBsb2dpblwiLCBvciBzZXQgUExBVEZPUk1fVE9LRU4gdG8gYW4gYWNjZXNzIGtleScpO1xuICB9XG5cbiAgaWYgKHRva2VuLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BMQVRGT1JNX1RPS0VOIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAodG9rZW4uaW5jbHVkZXMoJyAnKSkge1xuICAgIHByaW50V2FybmluZygnUExBVEZPUk1fVE9LRU4gY29udGFpbnMgd2hpdGVzcGFjZSDigJQgdGhpcyBtYXkgY2F1c2UgaXNzdWVzJyk7XG4gIH1cblxuICBwcmludERlYnVnKCdDb25maWd1cmF0aW9uIGxvYWRlZCBzdWNjZXNzZnVsbHknKTtcblxuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICBhdXRoOiB7IHRva2VuIH0sXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgY29weSBvZiBgY29uZmlnYCB3aXRoIFNTTCB2ZXJpZmljYXRpb24gZGlzYWJsZWQuIE1vZHVsZS1wcml2YXRlIOKAlCB0aGVcbiAqIG9ubHkgY2FsbGVyIGlzIGBnZXRDb25maWdXaXRoT3B0aW9uc2AgYmVsb3cuXG4gKi9cbmZ1bmN0aW9uIHdpdGhTU0xEaXNhYmxlZChjb25maWc6IENvbmZpZyk6IENvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIGFwaTogeyAuLi5jb25maWcuYXBpLCByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlIH0sXG4gIH07XG59XG5cbi8qKlxuICogTG9hZCBjb25maWd1cmF0aW9uLCBvcHRpb25hbGx5IGRpc2FibGluZyBTU0wgYmFzZWQgb24gY29tbWFuZCBvcHRpb25zLlxuICogUmVwbGFjZXMgdGhlIHJlcGVhdGVkIHBhdHRlcm46XG4gKiAgIGBvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UgPyB3aXRoU1NMRGlzYWJsZWQoZ2V0Q29uZmlnKCkpIDogZ2V0Q29uZmlnKClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdXaXRoT3B0aW9ucyhvcHRpb25zOiB7IHZlcmlmeVNzbD86IGJvb2xlYW4gfSk6IENvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICBpZiAob3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlKSB7XG4gICAgLy8gRXZlcnkgYXV0aGVudGljYXRlZCBjb21tYW5kIGZsb3dzIGl0cyB0b2tlbiB0aHJvdWdoIGhlcmUg4oCUIHJlZnVzZSB0b1xuICAgIC8vIGRpc2FibGUgY2VydCB2ZXJpZmljYXRpb24gaW4gcHJvZHVjdGlvbiAobWlycm9ycyB0aGUgbG9naW4vcmVuZXdhbCBndWFyZHMpXG4gICAgLy8gc28gYSBNSVRNIGNhbid0IGhhcnZlc3QgdGhlIEJlYXJlciBKV1QuIE5vLW9wIGluIG5vbi1wcm9kdWN0aW9uLlxuICAgIGFzc2VydFNzbERpc2FibGVBbGxvd2VkKCdhdXRoZW50aWNhdGVkIEFQSSBjbGllbnQgKC0tbm8tdmVyaWZ5LXNzbCknKTtcbiAgICByZXR1cm4gd2l0aFNTTERpc2FibGVkKGNvbmZpZyk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiJdfQ==
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25maWctbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BFLE9BQU8sRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELDBEQUEwRDtBQUMxRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBSS9EOztHQUVHO0FBQ0gsTUFBTSxhQUFhLEdBQXlCO0lBQzFDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSx3QkFBd0I7UUFDakMsT0FBTyxFQUFFLE1BQU07UUFDZixXQUFXLEVBQUUsZ0JBQWdCO1FBQzdCLG1CQUFtQixFQUFFLHlCQUF5QjtRQUM5QyxTQUFTLEVBQUUsY0FBYztRQUN6QixlQUFlLEVBQUUscUJBQXFCO1FBQ3RDLGtCQUFrQixFQUFFLElBQUk7S0FDekI7Q0FDRixDQUFD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RCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsVUFBVSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFFaEQsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULElBQUksRUFBRSxFQUFFLEtBQUssRUFBRTtLQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLE1BQWM7SUFDckMsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNULEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUU7S0FDbEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQWdDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO0lBQzNCLElBQUksT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNoQyx1RUFBdUU7UUFDdkUsNkVBQTZFO1FBQzdFLG1FQUFtRTtRQUNuRSx1QkFBdUIsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ3RFLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICd5YW1sJztcbmltcG9ydCB7IGlzU2Vzc2lvblVzYWJsZSwgbG9hZFNlc3Npb24gfSBmcm9tICcuL2NyZWRlbnRpYWwtc3RvcmUuanMnO1xuaW1wb3J0IHsgcHJpbnREZWJ1ZywgcHJpbnRFcnJvciwgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi9vdXRwdXQtdXRpbHMuanMnO1xuaW1wb3J0IHsgYXNzZXJ0U3NsRGlzYWJsZUFsbG93ZWQsIGlzUHJvZHVjdGlvbkVudiB9IGZyb20gJy4vdGxzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBwYXRoLmRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuZXhwb3J0IHR5cGUgeyBDb25maWcgfTtcblxuLyoqXG4gKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24g4oCUIEFQSSBlbmRwb2ludCBwYXRocyBhbmQgY29ubmVjdGlvbiBzZXR0aW5ncy5cbiAqL1xuY29uc3QgZGVmYXVsdENvbmZpZzogT21pdDxDb25maWcsICdhdXRoJz4gPSB7XG4gIGFwaToge1xuICAgIGJhc2VVcmw6ICdodHRwczovL2xvY2FsaG9zdDo4NDQzJyxcbiAgICB0aW1lb3V0OiAzMF8wMDAsXG4gICAgcGlwZWxpbmVVcmw6ICcvYXBpL3BpcGVsaW5lcycsXG4gICAgcGlwZWxpbmVUZW1wbGF0ZVVybDogJy9hcGkvcGlwZWxpbmUtdGVtcGxhdGVzJyxcbiAgICBwbHVnaW5Vcmw6ICcvYXBpL3BsdWdpbnMnLFxuICAgIHBsdWdpblVwbG9hZFVybDogJy9hcGkvcGx1Z2lucy91cGxvYWQnLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgfSxcbn07XG5cbi8qKiBVc2VyIGNvbmZpZyBmaWxlIHBhdGg6IH4vLnBpcGVsaW5lLW1hbmFnZXIvY29uZmlnLnltbCAqL1xuY29uc3QgVVNFUl9DT05GSUdfUEFUSCA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcucGlwZWxpbmUtbWFuYWdlcicsICdjb25maWcueW1sJyk7XG5cbi8qKlxuICogTG9hZCBhIFlBTUwgY29uZmlnIGZpbGUgYW5kIG1lcmdlIGl0cyBgYXBpYCBzZWN0aW9uIGludG8gdGhlIGNvbmZpZy5cbiAqIFJldHVybnMgdGhlIG1lcmdlZCBjb25maWcgb3IgdGhlIG9yaWdpbmFsIGlmIGZpbGUgZG9lc24ndCBleGlzdCBvciBmYWlscy5cbiAqL1xuZnVuY3Rpb24gbG9hZENvbmZpZ0ZpbGUoZmlsZVBhdGg6IHN0cmluZywgY29uZmlnOiBPbWl0PENvbmZpZywgJ2F1dGgnPik6IE9taXQ8Q29uZmlnLCAnYXV0aCc+IHtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkgcmV0dXJuIGNvbmZpZztcblxuICB0cnkge1xuICAgIHByaW50RGVidWcoJ0xvYWRpbmcgY29uZmlndXJhdGlvbicsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgY29uc3QgcGFyc2VkID0geWFtbC5wYXJzZShmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGYtOCcpKTtcbiAgICBpZiAocGFyc2VkPy5hdXRoKSB7XG4gICAgICBwcmludFdhcm5pbmcoJ0F1dGggc2VjdGlvbiBpbiBjb25maWcgZmlsZSBpcyBpZ25vcmVkIOKAlCB1c2UgUExBVEZPUk1fVE9LRU4gZW52IHZhcicpO1xuICAgIH1cbiAgICByZXR1cm4geyBhcGk6IHsgLi4uY29uZmlnLmFwaSwgLi4ucGFyc2VkPy5hcGkgfSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW50V2FybmluZygnRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGUsIHVzaW5nIGRlZmF1bHRzJywge1xuICAgICAgcGF0aDogZmlsZVBhdGgsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG59XG5cbi8qKlxuICogTG9hZCBjb25maWd1cmF0aW9uIGZyb20gZmlsZXMgYW5kIGVudmlyb25tZW50LlxuICpcbiAqIFByaW9yaXR5IChsYXN0IHdpbnMpOlxuICogMS4gQnVpbHQtaW4gZGVmYXVsdHNcbiAqIDIuIFVzZXIgY29uZmlnIGZpbGU6IH4vLnBpcGVsaW5lLW1hbmFnZXIvY29uZmlnLnltbFxuICogMy4gUHJvamVjdCBjb25maWcgZmlsZTogQ0xJX0NPTkZJR19QQVRIIG9yIC4vY29uZmlnLnltbFxuICogNC4gRW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKlxuICogQXV0aCB0b2tlbiBjb21lcyBmcm9tIFBMQVRGT1JNX1RPS0VOLCBlbHNlIHRoZSBzdG9yZWQgYGF1dGggbG9naW5gIHNlc3Npb24g4oCUXG4gKiBuZXZlciBmcm9tIGEgY29uZmlnIGZpbGUuXG4gKi9cbi8qKlxuICogUmVzb2x2ZSB0aGUgQVBJL2Nvbm5lY3Rpb24gY29uZmlnIChiYXNlIFVSTCwgU1NMLCB0aW1lb3V0cykgZnJvbSBmaWxlcyBhbmRcbiAqIGVudmlyb25tZW50IFdJVEhPVVQgcmVxdWlyaW5nIGBQTEFURk9STV9UT0tFTmAuXG4gKlxuICogVGhpcyBpcyB0aGUgdG9rZW4tb3B0aW9uYWwgc2xpY2Ugb2Yge0BsaW5rIGdldENvbmZpZ30uIFRoZSBwcmUtYXV0aCBsb2dpbiBzdGVwXG4gKiAoYGVuc3VyZVBsYXRmb3JtVG9rZW5gKSBuZWVkcyB0aGUgcmVzb2x2ZWQgYmFzZSBVUkwgdG8gUE9TVCBgL2FwaS9hdXRoL2xvZ2luYFxuICogKmJlZm9yZSogYW55IHRva2VuIGV4aXN0cyDigJQgY2FsbGluZyBgZ2V0Q29uZmlnKClgIHRoZXJlIHdvdWxkIHRocm93IG9uIHRoZVxuICogbWlzc2luZyB0b2tlbiBhbmQgbWFrZSBpbmxpbmUtbG9naW4gZGVhZC1vbi1hcnJpdmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBpQ29uZmlnKCk6IE9taXQ8Q29uZmlnLCAnYXV0aCc+IHtcbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwcm9jZXNzLmVudi5DTElfQ09ORklHX1BBVEggfHwgcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uL2NvbmZpZy55bWwnKTtcblxuICAvLyBMYXllciAxOiBkZWZhdWx0cyDihpIgTGF5ZXIgMjogdXNlciBjb25maWcg4oaSIExheWVyIDM6IHByb2plY3QgY29uZmlnLlxuICAvLyBgYXBpYCBpcyBjb3BpZWQgdG9vOiBhIHNoYWxsb3cgYHsgLi4uZGVmYXVsdENvbmZpZyB9YCBzaGFyZXMgdGhlIFNBTUUgYGFwaWBcbiAgLy8gb2JqZWN0LCBzbyB0aGUgYFBMQVRGT1JNX0JBU0VfVVJMYCBhc3NpZ25tZW50IGJlbG93IG11dGF0ZWQgdGhlIG1vZHVsZS1sZXZlbFxuICAvLyBkZWZhdWx0cyBhbmQgbGVha2VkIG9uZSBjYWxsZXIncyBiYXNlIFVSTCBpbnRvIGV2ZXJ5IGxhdGVyIHJlc29sdXRpb24uXG4gIGxldCBjb25maWcgPSBsb2FkQ29uZmlnRmlsZShVU0VSX0NPTkZJR19QQVRILCB7IGFwaTogeyAuLi5kZWZhdWx0Q29uZmlnLmFwaSB9IH0pO1xuICBjb25maWcgPSBsb2FkQ29uZmlnRmlsZShwcm9qZWN0Q29uZmlnUGF0aCwgY29uZmlnKTtcblxuICAvLyBMYXllciA0OiBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXNcbiAgaWYgKHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMKSB7XG4gICAgY29uZmlnLmFwaS5iYXNlVXJsID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkw7XG4gICAgcHJpbnREZWJ1ZygnVXNpbmcgUExBVEZPUk1fQkFTRV9VUkwgZnJvbSBlbnZpcm9ubWVudCcsIHsgYmFzZVVybDogY29uZmlnLmFwaS5iYXNlVXJsIH0pO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52LlRMU19SRUpFQ1RfVU5BVVRIT1JJWkVEICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkaXNhYmxlID0gcHJvY2Vzcy5lbnYuVExTX1JFSkVDVF9VTkFVVEhPUklaRUQgPT09ICcwJztcbiAgICBpZiAoZGlzYWJsZSAmJiBpc1Byb2R1Y3Rpb25FbnYoKSkge1xuICAgICAgcHJpbnRXYXJuaW5nKCdJZ25vcmluZyBUTFNfUkVKRUNUX1VOQVVUSE9SSVpFRD0wIGluIHByb2R1Y3Rpb24g4oCUIFNTTCB2ZXJpZmljYXRpb24gcmVtYWlucyBlbmFibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZy5hcGkucmVqZWN0VW5hdXRob3JpemVkID0gIWRpc2FibGU7XG4gICAgICBpZiAoZGlzYWJsZSkge1xuICAgICAgICBwcmludFdhcm5pbmcoJ1NTTCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGRpc2FibGVkIHZpYSBUTFNfUkVKRUNUX1VOQVVUSE9SSVpFRD0wJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52LlVQTE9BRF9USU1FT1VUKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQocHJvY2Vzcy5lbnYuVVBMT0FEX1RJTUVPVVQsIDEwKTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgcGFyc2VkID4gMCkge1xuICAgICAgY29uZmlnLmFwaS51cGxvYWRUaW1lb3V0ID0gcGFyc2VkO1xuICAgICAgcHJpbnREZWJ1ZygnVXNpbmcgVVBMT0FEX1RJTUVPVVQgZnJvbSBlbnZpcm9ubWVudCcsIHsgdXBsb2FkVGltZW91dDogYCR7cGFyc2VkfW1zYCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJpbnRXYXJuaW5nKCdJbnZhbGlkIFVQTE9BRF9USU1FT1VUIHZhbHVlLCB1c2luZyBkZWZhdWx0JywgeyBwcm92aWRlZDogcHJvY2Vzcy5lbnYuVVBMT0FEX1RJTUVPVVQgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZygpOiBDb25maWcge1xuICBjb25zdCBjb25maWcgPSBnZXRBcGlDb25maWcoKTtcblxuICAvLyBQTEFURk9STV9UT0tFTiB3aW5zIChhbiBhY2Nlc3Mga2V5IGluIENJLCBvciBhbiBleHBsaWNpdCBleHBvcnQpOyBvdGhlcndpc2VcbiAgLy8gZmFsbCBiYWNrIHRvIHRoZSBzZXNzaW9uIGBhdXRoIGxvZ2luYCBzdG9yZWQgZm9yIFRISVMgcGxhdGZvcm0uIEEgc3RvcmVkXG4gIC8vIHNlc3Npb24gdGhhdCBoYXMgYWxyZWFkeSBleHBpcmVkIGlzIGlnbm9yZWQgcmF0aGVyIHRoYW4gc2VudCBhbmQgcmVqZWN0ZWQg4oCUXG4gIC8vIHRoZSBhc3luYyBwYXRoIChgcmVzb2x2ZVRva2VuYCkgcmVmcmVzaGVzIGl0LCBhbmQgZXZlcnl0aGluZyBlbHNlIHRlbGxzIHRoZVxuICAvLyB1c2VyIHRvIHNpZ24gaW4gYWdhaW4uXG4gIGNvbnN0IHN0b3JlZCA9IGxvYWRTZXNzaW9uKGNvbmZpZy5hcGkuYmFzZVVybCk7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4gfHwgKGlzU2Vzc2lvblVzYWJsZShzdG9yZWQpID8gc3RvcmVkLmFjY2Vzc1Rva2VuIDogdW5kZWZpbmVkKTtcblxuICBpZiAoIXRva2VuKSB7XG4gICAgcHJpbnRFcnJvcignTm90IHNpZ25lZCBpbjogbm8gUExBVEZPUk1fVE9LRU4sIGFuZCBubyB2YWxpZCBzdG9yZWQgc2Vzc2lvbiBmb3IgdGhpcyBwbGF0Zm9ybScpO1xuICAgIHRocm93IG5ldyBFcnJvcignUnVuIFwicGlwZWxpbmUtbWFuYWdlciBhdXRoIGxvZ2luXCIsIG9yIHNldCBQTEFURk9STV9UT0tFTiB0byBhbiBhY2Nlc3Mga2V5Jyk7XG4gIH1cblxuICBpZiAodG9rZW4udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUExBVEZPUk1fVE9LRU4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmICh0b2tlbi5pbmNsdWRlcygnICcpKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdQTEFURk9STV9UT0tFTiBjb250YWlucyB3aGl0ZXNwYWNlIOKAlCB0aGlzIG1heSBjYXVzZSBpc3N1ZXMnKTtcbiAgfVxuXG4gIHByaW50RGVidWcoJ0NvbmZpZ3VyYXRpb24gbG9hZGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIGF1dGg6IHsgdG9rZW4gfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBjb3B5IG9mIGBjb25maWdgIHdpdGggU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZC4gTW9kdWxlLXByaXZhdGUg4oCUIHRoZVxuICogb25seSBjYWxsZXIgaXMgYGdldENvbmZpZ1dpdGhPcHRpb25zYCBiZWxvdy5cbiAqL1xuZnVuY3Rpb24gd2l0aFNTTERpc2FibGVkKGNvbmZpZzogQ29uZmlnKTogQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5jb25maWcsXG4gICAgYXBpOiB7IC4uLmNvbmZpZy5hcGksIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UgfSxcbiAgfTtcbn1cblxuLyoqXG4gKiBMb2FkIGNvbmZpZ3VyYXRpb24sIG9wdGlvbmFsbHkgZGlzYWJsaW5nIFNTTCBiYXNlZCBvbiBjb21tYW5kIG9wdGlvbnMuXG4gKiBSZXBsYWNlcyB0aGUgcmVwZWF0ZWQgcGF0dGVybjpcbiAqICAgYG9wdGlvbnMudmVyaWZ5U3NsID09PSBmYWxzZSA/IHdpdGhTU0xEaXNhYmxlZChnZXRDb25maWcoKSkgOiBnZXRDb25maWcoKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ1dpdGhPcHRpb25zKG9wdGlvbnM6IHsgdmVyaWZ5U3NsPzogYm9vbGVhbiB9KTogQ29uZmlnIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGlmIChvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UpIHtcbiAgICAvLyBFdmVyeSBhdXRoZW50aWNhdGVkIGNvbW1hbmQgZmxvd3MgaXRzIHRva2VuIHRocm91Z2ggaGVyZSDigJQgcmVmdXNlIHRvXG4gICAgLy8gZGlzYWJsZSBjZXJ0IHZlcmlmaWNhdGlvbiBpbiBwcm9kdWN0aW9uIChtaXJyb3JzIHRoZSBsb2dpbi9yZW5ld2FsIGd1YXJkcylcbiAgICAvLyBzbyBhIE1JVE0gY2FuJ3QgaGFydmVzdCB0aGUgQmVhcmVyIEpXVC4gTm8tb3AgaW4gbm9uLXByb2R1Y3Rpb24uXG4gICAgYXNzZXJ0U3NsRGlzYWJsZUFsbG93ZWQoJ2F1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudCAoLS1uby12ZXJpZnktc3NsKScpO1xuICAgIHJldHVybiB3aXRoU1NMRGlzYWJsZWQoY29uZmlnKTtcbiAgfVxuICByZXR1cm4gY29uZmlnO1xufVxuIl19
@@ -20,4 +20,20 @@ export declare function loadSession(baseUrl: string): StoredSession | undefined;
20
20
  export declare function clearSession(baseUrl: string): void;
21
21
  /** True when the stored access token is still usable (with a little slack). */
22
22
  export declare function isSessionUsable(session: StoredSession | undefined): session is StoredSession;
23
+ /**
24
+ * Run `fn` holding the machine-wide REFRESH LOCK (`~/.pipeline-manager/refresh.lock`,
25
+ * created exclusively).
26
+ *
27
+ * A refresh token is single-use: two CLI processes renewing the same stored
28
+ * session at once (a script fanning out commands, two terminals) would present
29
+ * the same token twice, and outside the platform's short rotation grace the
30
+ * second use reads as REUSE — which revokes the session. Serializing the refresh
31
+ * means the second process waits, then (re-reading the store) finds the pair the
32
+ * first one already saved instead of spending the old token again.
33
+ *
34
+ * A lock left behind by a crashed process is broken after
35
+ * {@link REFRESH_LOCK_STALE_MS}; waiting gives up after {@link REFRESH_LOCK_WAIT_MS}
36
+ * and runs `fn` anyway (the platform grace still covers a near-simultaneous use).
37
+ */
38
+ export declare function withRefreshLock<T>(fn: () => Promise<T>): Promise<T>;
23
39
  //# sourceMappingURL=credential-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/utils/credential-store.ts"],"names":[],"mappings":"AAgCA,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,kEAAkE;AAClE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAgCD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,CAK1F;AAED;2DAC2D;AAC3D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtE;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAalD;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,IAAI,aAAa,CAE5F"}
1
+ {"version":3,"file":"credential-store.d.ts","sourceRoot":"","sources":["../../src/utils/credential-store.ts"],"names":[],"mappings":"AAuCA,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,kEAAkE;AAClE,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAgCD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,IAAI,CAK1F;AAED;2DAC2D;AAC3D,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEtE;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAalD;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,IAAI,aAAa,CAE5F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CA2BzE"}
@@ -10,7 +10,7 @@
10
10
  * It holds a real session — the access token AND its refresh token — because
11
11
  * that is what the device flow hands back and what lets the CLI keep working for
12
12
  * days without another browser round trip. Nothing else about the account is
13
- * stored: no password (the CLI no longer has one to store) and no identifier.
13
+ * stored: no password (the CLI never holds one) and no identifier.
14
14
  *
15
15
  * Resolution order everywhere else in the CLI is unchanged in spirit: an
16
16
  * explicit `PLATFORM_TOKEN` in the environment always wins, so CI keeps using an
@@ -23,6 +23,12 @@ import { errorMessage } from '@pipeline-builder/api-core';
23
23
  import { printDebug, printWarning } from './output-utils.js';
24
24
  const STORE_DIR = path.join(os.homedir(), '.pipeline-manager');
25
25
  const STORE_FILE = path.join(STORE_DIR, 'credentials.json');
26
+ const REFRESH_LOCK_FILE = path.join(STORE_DIR, 'refresh.lock');
27
+ /** A lock older than this belongs to a process that died mid-refresh. */
28
+ const REFRESH_LOCK_STALE_MS = 30_000;
29
+ /** How long a second process waits for the first one's refresh to finish. */
30
+ const REFRESH_LOCK_WAIT_MS = 15_000;
31
+ const REFRESH_LOCK_POLL_MS = 100;
26
32
  /** Re-authenticate rather than hand out a token this close to expiry. */
27
33
  const EXPIRY_SKEW_MS = 60_000;
28
34
  /** Where the sessions live — surfaced in help text and errors. */
@@ -90,4 +96,53 @@ export function clearSession(baseUrl) {
90
96
  export function isSessionUsable(session) {
91
97
  return !!session?.accessToken && session.expiresAt - EXPIRY_SKEW_MS > Date.now();
92
98
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jcmVkZW50aWFsLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBRTVELHlFQUF5RTtBQUN6RSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFtQjlCLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxPQUFlO0lBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsU0FBUztJQUNoQixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxNQUFNLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRixPQUFPLE1BQW1CLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCw2RUFBNkU7UUFDN0UsbURBQW1EO0lBQ3JELENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDdEMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWdCO0lBQ2xDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRCw0RUFBNEU7SUFDNUUsa0ZBQWtGO0lBQ2xGLE1BQU0sR0FBRyxHQUFHLEdBQUcsVUFBVSxNQUFNLENBQUM7SUFDaEMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxxRUFBcUU7QUFDckUsTUFBTSxVQUFVLFdBQVcsQ0FBQyxPQUFlLEVBQUUsT0FBdUM7SUFDbEYsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDMUIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFDdEYsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xCLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVEOzJEQUMyRDtBQUMzRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQWU7SUFDekMsT0FBTyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELHVGQUF1RjtBQUN2RixNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWU7SUFDMUMsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDMUIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPO0lBQ25ELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUM7UUFDSCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwyRUFBMkU7UUFDM0UsWUFBWSxDQUFDLHlDQUF5QyxFQUFFO1lBQ3RELElBQUksRUFBRSxVQUFVO1lBQ2hCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDO1NBQzNCLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxlQUFlLENBQUMsT0FBa0M7SUFDaEUsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsSUFBSSxPQUFPLENBQUMsU0FBUyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIE9uLWRpc2sgc2Vzc2lvbiBzdG9yZSBmb3IgYGF1dGggbG9naW5gLlxuICpcbiAqIGB+Ly5waXBlbGluZS1tYW5hZ2VyL2NyZWRlbnRpYWxzLmpzb25gLCBvd25lci1vbmx5ICgwNjAwIGZpbGUgaW5zaWRlIHRoZSAwNzAwXG4gKiBkaXJlY3RvcnkgdGhlIGF1ZGl0IGxvZyBhbHJlYWR5IGNyZWF0ZXMpLCBrZXllZCBieSBwbGF0Zm9ybSBiYXNlIFVSTCBzbyBvbmVcbiAqIG1hY2hpbmUgY2FuIGhvbGQgc2Vzc2lvbnMgZm9yIHNldmVyYWwgcGxhdGZvcm1zIGF0IG9uY2UuXG4gKlxuICogSXQgaG9sZHMgYSByZWFsIHNlc3Npb24g4oCUIHRoZSBhY2Nlc3MgdG9rZW4gQU5EIGl0cyByZWZyZXNoIHRva2VuIOKAlCBiZWNhdXNlXG4gKiB0aGF0IGlzIHdoYXQgdGhlIGRldmljZSBmbG93IGhhbmRzIGJhY2sgYW5kIHdoYXQgbGV0cyB0aGUgQ0xJIGtlZXAgd29ya2luZyBmb3JcbiAqIGRheXMgd2l0aG91dCBhbm90aGVyIGJyb3dzZXIgcm91bmQgdHJpcC4gTm90aGluZyBlbHNlIGFib3V0IHRoZSBhY2NvdW50IGlzXG4gKiBzdG9yZWQ6IG5vIHBhc3N3b3JkICh0aGUgQ0xJIG5vIGxvbmdlciBoYXMgb25lIHRvIHN0b3JlKSBhbmQgbm8gaWRlbnRpZmllci5cbiAqXG4gKiBSZXNvbHV0aW9uIG9yZGVyIGV2ZXJ5d2hlcmUgZWxzZSBpbiB0aGUgQ0xJIGlzIHVuY2hhbmdlZCBpbiBzcGlyaXQ6IGFuXG4gKiBleHBsaWNpdCBgUExBVEZPUk1fVE9LRU5gIGluIHRoZSBlbnZpcm9ubWVudCBhbHdheXMgd2lucywgc28gQ0kga2VlcHMgdXNpbmcgYW5cbiAqIGFjY2VzcyBrZXkgYW5kIGlzIG5ldmVyIGFmZmVjdGVkIGJ5IHdoYXRldmVyIGEgZGV2ZWxvcGVyJ3MgbGFwdG9wIGhhcyBjYWNoZWQuXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50V2FybmluZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgU1RPUkVfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJyk7XG5jb25zdCBTVE9SRV9GSUxFID0gcGF0aC5qb2luKFNUT1JFX0RJUiwgJ2NyZWRlbnRpYWxzLmpzb24nKTtcblxuLyoqIFJlLWF1dGhlbnRpY2F0ZSByYXRoZXIgdGhhbiBoYW5kIG91dCBhIHRva2VuIHRoaXMgY2xvc2UgdG8gZXhwaXJ5LiAqL1xuY29uc3QgRVhQSVJZX1NLRVdfTVMgPSA2MF8wMDA7XG5cbi8qKiBPbmUgcGxhdGZvcm0ncyBzdG9yZWQgc2Vzc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVkU2Vzc2lvbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIC8qKiBSb3RhdGVkIG9uIGV2ZXJ5IHJlZnJlc2g7IGFic2VudCBvbmx5IGlmIHRoZSBwbGF0Zm9ybSBzdG9wcGVkIGlzc3Vpbmcgb25lLiAqL1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBFcG9jaCBtcyB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuICovXG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICAvKiogVGhlIG9yZyB0aGUgc2Vzc2lvbiB3YXMgc2NvcGVkIHRvIHdoZW4gaXQgd2FzIHN0b3JlZCAoaW5mb3JtYXRpb25hbCkuICovXG4gIG9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICBzYXZlZEF0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdG9yZUZpbGUge1xuICB2ZXJzaW9uOiAxO1xuICBzZXNzaW9uczogUmVjb3JkPHN0cmluZywgU3RvcmVkU2Vzc2lvbj47XG59XG5cbi8qKiBXaGVyZSB0aGUgc2Vzc2lvbnMgbGl2ZSDigJQgc3VyZmFjZWQgaW4gaGVscCB0ZXh0IGFuZCBlcnJvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlZGVudGlhbFN0b3JlUGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gU1RPUkVfRklMRTtcbn1cblxuLyoqXG4gKiBUcmFpbGluZyBzbGFzaGVzIGFuZCBjYXNlIGRpZmZlcmVuY2VzIGluIHRoZSBob3N0IHdvdWxkIG90aGVyd2lzZSBzcGxpdCBvbmVcbiAqIHBsYXRmb3JtIGludG8gc2V2ZXJhbCBlbnRyaWVzLlxuICovXG5mdW5jdGlvbiBzdG9yZUtleShiYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJykudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gcmVhZFN0b3JlKCk6IFN0b3JlRmlsZSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoU1RPUkVfRklMRSwgJ3V0Zi04JykpO1xuICAgIGlmIChwYXJzZWQ/LnZlcnNpb24gPT09IDEgJiYgcGFyc2VkLnNlc3Npb25zICYmIHR5cGVvZiBwYXJzZWQuc2Vzc2lvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyc2VkIGFzIFN0b3JlRmlsZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE1pc3Npbmcgb3IgdW5yZWFkYWJsZTogdHJlYXQgYXMgZW1wdHkuIEEgY29ycnVwdCBmaWxlIG11c3Qgbm90IGJyZWFrIGV2ZXJ5XG4gICAgLy8gY29tbWFuZCDigJQgdGhlIG5leHQgc3VjY2Vzc2Z1bCBsb2dpbiByZXdyaXRlcyBpdC5cbiAgfVxuICByZXR1cm4geyB2ZXJzaW9uOiAxLCBzZXNzaW9uczoge30gfTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTdG9yZShzdG9yZTogU3RvcmVGaWxlKTogdm9pZCB7XG4gIGZzLm1rZGlyU3luYyhTVE9SRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbiAgLy8gV3JpdGUgdGhyb3VnaCBhIHRlbXAgZmlsZSBzbyBhbiBpbnRlcnJ1cHRlZCB3cml0ZSBjYW4ndCBsZWF2ZSBhIHRydW5jYXRlZFxuICAvLyBzdG9yZSBiZWhpbmQsIGFuZCBjcmVhdGUgaXQgMDYwMCBmcm9tIHRoZSBzdGFydCAobmV2ZXIgYnJpZWZseSB3b3JsZC1yZWFkYWJsZSkuXG4gIGNvbnN0IHRtcCA9IGAke1NUT1JFX0ZJTEV9LnRtcGA7XG4gIGZzLndyaXRlRmlsZVN5bmModG1wLCBgJHtKU09OLnN0cmluZ2lmeShzdG9yZSwgbnVsbCwgMil9XFxuYCwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgZnMucmVuYW1lU3luYyh0bXAsIFNUT1JFX0ZJTEUpO1xufVxuXG4vKiogUGVyc2lzdCB0aGUgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXZlU2Vzc2lvbihiYXNlVXJsOiBzdHJpbmcsIHNlc3Npb246IE9taXQ8U3RvcmVkU2Vzc2lvbiwgJ3NhdmVkQXQnPik6IHZvaWQge1xuICBjb25zdCBzdG9yZSA9IHJlYWRTdG9yZSgpO1xuICBzdG9yZS5zZXNzaW9uc1tzdG9yZUtleShiYXNlVXJsKV0gPSB7IC4uLnNlc3Npb24sIHNhdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICB3cml0ZVN0b3JlKHN0b3JlKTtcbiAgcHJpbnREZWJ1ZygnU2Vzc2lvbiBzdG9yZWQnLCB7IHBhdGg6IFNUT1JFX0ZJTEUsIHBsYXRmb3JtOiBzdG9yZUtleShiYXNlVXJsKSB9KTtcbn1cblxuLyoqIFRoZSBzdG9yZWQgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgLCBvciB1bmRlZmluZWQuIEV4cGlyeSBpcyBOT1QgY2hlY2tlZCBoZXJlIOKAlFxuICogIGNhbGxlcnMgZGVjaWRlIHdoZXRoZXIgdG8gdXNlLCByZWZyZXNoIG9yIGlnbm9yZSBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkU2Vzc2lvbihiYXNlVXJsOiBzdHJpbmcpOiBTdG9yZWRTZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlYWRTdG9yZSgpLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXTtcbn1cblxuLyoqIEZvcmdldCB0aGUgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgIChzaWduLW91dCwgb3IgYSByZWZyZXNoIHRoZSBwbGF0Zm9ybSByZWplY3RlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBzdG9yZSA9IHJlYWRTdG9yZSgpO1xuICBpZiAoIShzdG9yZUtleShiYXNlVXJsKSBpbiBzdG9yZS5zZXNzaW9ucykpIHJldHVybjtcbiAgZGVsZXRlIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXTtcbiAgdHJ5IHtcbiAgICB3cml0ZVN0b3JlKHN0b3JlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBMb3NpbmcgdGhlIGFiaWxpdHkgdG8gY2xlYXIgYSBkZWFkIHNlc3Npb24gaXMgYSBudWlzYW5jZSwgbm90IGEgZmFpbHVyZS5cbiAgICBwcmludFdhcm5pbmcoJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIHN0b3JlZCBjcmVkZW50aWFscycsIHtcbiAgICAgIHBhdGg6IFNUT1JFX0ZJTEUsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogVHJ1ZSB3aGVuIHRoZSBzdG9yZWQgYWNjZXNzIHRva2VuIGlzIHN0aWxsIHVzYWJsZSAod2l0aCBhIGxpdHRsZSBzbGFjaykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXNzaW9uVXNhYmxlKHNlc3Npb246IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQpOiBzZXNzaW9uIGlzIFN0b3JlZFNlc3Npb24ge1xuICByZXR1cm4gISFzZXNzaW9uPy5hY2Nlc3NUb2tlbiAmJiBzZXNzaW9uLmV4cGlyZXNBdCAtIEVYUElSWV9TS0VXX01TID4gRGF0ZS5ub3coKTtcbn1cbiJdfQ==
99
+ /**
100
+ * Run `fn` holding the machine-wide REFRESH LOCK (`~/.pipeline-manager/refresh.lock`,
101
+ * created exclusively).
102
+ *
103
+ * A refresh token is single-use: two CLI processes renewing the same stored
104
+ * session at once (a script fanning out commands, two terminals) would present
105
+ * the same token twice, and outside the platform's short rotation grace the
106
+ * second use reads as REUSE — which revokes the session. Serializing the refresh
107
+ * means the second process waits, then (re-reading the store) finds the pair the
108
+ * first one already saved instead of spending the old token again.
109
+ *
110
+ * A lock left behind by a crashed process is broken after
111
+ * {@link REFRESH_LOCK_STALE_MS}; waiting gives up after {@link REFRESH_LOCK_WAIT_MS}
112
+ * and runs `fn` anyway (the platform grace still covers a near-simultaneous use).
113
+ */
114
+ export async function withRefreshLock(fn) {
115
+ fs.mkdirSync(STORE_DIR, { recursive: true, mode: 0o700 });
116
+ const deadline = Date.now() + REFRESH_LOCK_WAIT_MS;
117
+ let held = false;
118
+ while (!held) {
119
+ try {
120
+ fs.closeSync(fs.openSync(REFRESH_LOCK_FILE, 'wx', 0o600));
121
+ held = true;
122
+ }
123
+ catch (error) {
124
+ if (error.code !== 'EEXIST')
125
+ break; // can't lock at all — proceed unlocked
126
+ try {
127
+ if (Date.now() - fs.statSync(REFRESH_LOCK_FILE).mtimeMs > REFRESH_LOCK_STALE_MS) {
128
+ fs.rmSync(REFRESH_LOCK_FILE, { force: true });
129
+ continue;
130
+ }
131
+ }
132
+ catch {
133
+ continue; // vanished between open and stat — try again
134
+ }
135
+ if (Date.now() >= deadline)
136
+ break;
137
+ await new Promise((resolve) => setTimeout(resolve, REFRESH_LOCK_POLL_MS));
138
+ }
139
+ }
140
+ try {
141
+ return await fn();
142
+ }
143
+ finally {
144
+ if (held)
145
+ fs.rmSync(REFRESH_LOCK_FILE, { force: true });
146
+ }
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGVudGlhbC1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jcmVkZW50aWFsLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFL0QseUVBQXlFO0FBQ3pFLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLDZFQUE2RTtBQUM3RSxNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQztBQUNwQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUVqQyx5RUFBeUU7QUFDekUsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDO0FBbUI5QixrRUFBa0U7QUFDbEUsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxRQUFRLENBQUMsT0FBZTtJQUMvQixPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxP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RSxNQUFNO1lBQ2xDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7WUFBUyxDQUFDO1FBQ1QsSUFBSSxJQUFJO1lBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogT24tZGlzayBzZXNzaW9uIHN0b3JlIGZvciBgYXV0aCBsb2dpbmAuXG4gKlxuICogYH4vLnBpcGVsaW5lLW1hbmFnZXIvY3JlZGVudGlhbHMuanNvbmAsIG93bmVyLW9ubHkgKDA2MDAgZmlsZSBpbnNpZGUgdGhlIDA3MDBcbiAqIGRpcmVjdG9yeSB0aGUgYXVkaXQgbG9nIGFscmVhZHkgY3JlYXRlcyksIGtleWVkIGJ5IHBsYXRmb3JtIGJhc2UgVVJMIHNvIG9uZVxuICogbWFjaGluZSBjYW4gaG9sZCBzZXNzaW9ucyBmb3Igc2V2ZXJhbCBwbGF0Zm9ybXMgYXQgb25jZS5cbiAqXG4gKiBJdCBob2xkcyBhIHJlYWwgc2Vzc2lvbiDigJQgdGhlIGFjY2VzcyB0b2tlbiBBTkQgaXRzIHJlZnJlc2ggdG9rZW4g4oCUIGJlY2F1c2VcbiAqIHRoYXQgaXMgd2hhdCB0aGUgZGV2aWNlIGZsb3cgaGFuZHMgYmFjayBhbmQgd2hhdCBsZXRzIHRoZSBDTEkga2VlcCB3b3JraW5nIGZvclxuICogZGF5cyB3aXRob3V0IGFub3RoZXIgYnJvd3NlciByb3VuZCB0cmlwLiBOb3RoaW5nIGVsc2UgYWJvdXQgdGhlIGFjY291bnQgaXNcbiAqIHN0b3JlZDogbm8gcGFzc3dvcmQgKHRoZSBDTEkgbmV2ZXIgaG9sZHMgb25lKSBhbmQgbm8gaWRlbnRpZmllci5cbiAqXG4gKiBSZXNvbHV0aW9uIG9yZGVyIGV2ZXJ5d2hlcmUgZWxzZSBpbiB0aGUgQ0xJIGlzIHVuY2hhbmdlZCBpbiBzcGlyaXQ6IGFuXG4gKiBleHBsaWNpdCBgUExBVEZPUk1fVE9LRU5gIGluIHRoZSBlbnZpcm9ubWVudCBhbHdheXMgd2lucywgc28gQ0kga2VlcHMgdXNpbmcgYW5cbiAqIGFjY2VzcyBrZXkgYW5kIGlzIG5ldmVyIGFmZmVjdGVkIGJ5IHdoYXRldmVyIGEgZGV2ZWxvcGVyJ3MgbGFwdG9wIGhhcyBjYWNoZWQuXG4gKi9cblxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHByaW50RGVidWcsIHByaW50V2FybmluZyB9IGZyb20gJy4vb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgU1RPUkVfRElSID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgJy5waXBlbGluZS1tYW5hZ2VyJyk7XG5jb25zdCBTVE9SRV9GSUxFID0gcGF0aC5qb2luKFNUT1JFX0RJUiwgJ2NyZWRlbnRpYWxzLmpzb24nKTtcbmNvbnN0IFJFRlJFU0hfTE9DS19GSUxFID0gcGF0aC5qb2luKFNUT1JFX0RJUiwgJ3JlZnJlc2gubG9jaycpO1xuXG4vKiogQSBsb2NrIG9sZGVyIHRoYW4gdGhpcyBiZWxvbmdzIHRvIGEgcHJvY2VzcyB0aGF0IGRpZWQgbWlkLXJlZnJlc2guICovXG5jb25zdCBSRUZSRVNIX0xPQ0tfU1RBTEVfTVMgPSAzMF8wMDA7XG4vKiogSG93IGxvbmcgYSBzZWNvbmQgcHJvY2VzcyB3YWl0cyBmb3IgdGhlIGZpcnN0IG9uZSdzIHJlZnJlc2ggdG8gZmluaXNoLiAqL1xuY29uc3QgUkVGUkVTSF9MT0NLX1dBSVRfTVMgPSAxNV8wMDA7XG5jb25zdCBSRUZSRVNIX0xPQ0tfUE9MTF9NUyA9IDEwMDtcblxuLyoqIFJlLWF1dGhlbnRpY2F0ZSByYXRoZXIgdGhhbiBoYW5kIG91dCBhIHRva2VuIHRoaXMgY2xvc2UgdG8gZXhwaXJ5LiAqL1xuY29uc3QgRVhQSVJZX1NLRVdfTVMgPSA2MF8wMDA7XG5cbi8qKiBPbmUgcGxhdGZvcm0ncyBzdG9yZWQgc2Vzc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmVkU2Vzc2lvbiB7XG4gIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gIC8qKiBSb3RhdGVkIG9uIGV2ZXJ5IHJlZnJlc2g7IGFic2VudCBvbmx5IGlmIHRoZSBwbGF0Zm9ybSBzdG9wcGVkIGlzc3Vpbmcgb25lLiAqL1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBFcG9jaCBtcyB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuICovXG4gIGV4cGlyZXNBdDogbnVtYmVyO1xuICAvKiogVGhlIG9yZyB0aGUgc2Vzc2lvbiB3YXMgc2NvcGVkIHRvIHdoZW4gaXQgd2FzIHN0b3JlZCAoaW5mb3JtYXRpb25hbCkuICovXG4gIG9yZ2FuaXphdGlvbklkPzogc3RyaW5nO1xuICBzYXZlZEF0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdG9yZUZpbGUge1xuICB2ZXJzaW9uOiAxO1xuICBzZXNzaW9uczogUmVjb3JkPHN0cmluZywgU3RvcmVkU2Vzc2lvbj47XG59XG5cbi8qKiBXaGVyZSB0aGUgc2Vzc2lvbnMgbGl2ZSDigJQgc3VyZmFjZWQgaW4gaGVscCB0ZXh0IGFuZCBlcnJvcnMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlZGVudGlhbFN0b3JlUGF0aCgpOiBzdHJpbmcge1xuICByZXR1cm4gU1RPUkVfRklMRTtcbn1cblxuLyoqXG4gKiBUcmFpbGluZyBzbGFzaGVzIGFuZCBjYXNlIGRpZmZlcmVuY2VzIGluIHRoZSBob3N0IHdvdWxkIG90aGVyd2lzZSBzcGxpdCBvbmVcbiAqIHBsYXRmb3JtIGludG8gc2V2ZXJhbCBlbnRyaWVzLlxuICovXG5mdW5jdGlvbiBzdG9yZUtleShiYXNlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJykudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gcmVhZFN0b3JlKCk6IFN0b3JlRmlsZSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoU1RPUkVfRklMRSwgJ3V0Zi04JykpO1xuICAgIGlmIChwYXJzZWQ/LnZlcnNpb24gPT09IDEgJiYgcGFyc2VkLnNlc3Npb25zICYmIHR5cGVvZiBwYXJzZWQuc2Vzc2lvbnMgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gcGFyc2VkIGFzIFN0b3JlRmlsZTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE1pc3Npbmcgb3IgdW5yZWFkYWJsZTogdHJlYXQgYXMgZW1wdHkuIEEgY29ycnVwdCBmaWxlIG11c3Qgbm90IGJyZWFrIGV2ZXJ5XG4gICAgLy8gY29tbWFuZCDigJQgdGhlIG5leHQgc3VjY2Vzc2Z1bCBsb2dpbiByZXdyaXRlcyBpdC5cbiAgfVxuICByZXR1cm4geyB2ZXJzaW9uOiAxLCBzZXNzaW9uczoge30gfTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTdG9yZShzdG9yZTogU3RvcmVGaWxlKTogdm9pZCB7XG4gIGZzLm1rZGlyU3luYyhTVE9SRV9ESVIsIHsgcmVjdXJzaXZlOiB0cnVlLCBtb2RlOiAwbzcwMCB9KTtcbiAgLy8gV3JpdGUgdGhyb3VnaCBhIHRlbXAgZmlsZSBzbyBhbiBpbnRlcnJ1cHRlZCB3cml0ZSBjYW4ndCBsZWF2ZSBhIHRydW5jYXRlZFxuICAvLyBzdG9yZSBiZWhpbmQsIGFuZCBjcmVhdGUgaXQgMDYwMCBmcm9tIHRoZSBzdGFydCAobmV2ZXIgYnJpZWZseSB3b3JsZC1yZWFkYWJsZSkuXG4gIGNvbnN0IHRtcCA9IGAke1NUT1JFX0ZJTEV9LnRtcGA7XG4gIGZzLndyaXRlRmlsZVN5bmModG1wLCBgJHtKU09OLnN0cmluZ2lmeShzdG9yZSwgbnVsbCwgMil9XFxuYCwgeyBtb2RlOiAwbzYwMCB9KTtcbiAgZnMucmVuYW1lU3luYyh0bXAsIFNUT1JFX0ZJTEUpO1xufVxuXG4vKiogUGVyc2lzdCB0aGUgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgLCByZXBsYWNpbmcgYW55IHByZXZpb3VzIG9uZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYXZlU2Vzc2lvbihiYXNlVXJsOiBzdHJpbmcsIHNlc3Npb246IE9taXQ8U3RvcmVkU2Vzc2lvbiwgJ3NhdmVkQXQnPik6IHZvaWQge1xuICBjb25zdCBzdG9yZSA9IHJlYWRTdG9yZSgpO1xuICBzdG9yZS5zZXNzaW9uc1tzdG9yZUtleShiYXNlVXJsKV0gPSB7IC4uLnNlc3Npb24sIHNhdmVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICB3cml0ZVN0b3JlKHN0b3JlKTtcbiAgcHJpbnREZWJ1ZygnU2Vzc2lvbiBzdG9yZWQnLCB7IHBhdGg6IFNUT1JFX0ZJTEUsIHBsYXRmb3JtOiBzdG9yZUtleShiYXNlVXJsKSB9KTtcbn1cblxuLyoqIFRoZSBzdG9yZWQgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgLCBvciB1bmRlZmluZWQuIEV4cGlyeSBpcyBOT1QgY2hlY2tlZCBoZXJlIOKAlFxuICogIGNhbGxlcnMgZGVjaWRlIHdoZXRoZXIgdG8gdXNlLCByZWZyZXNoIG9yIGlnbm9yZSBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkU2Vzc2lvbihiYXNlVXJsOiBzdHJpbmcpOiBTdG9yZWRTZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlYWRTdG9yZSgpLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXTtcbn1cblxuLyoqIEZvcmdldCB0aGUgc2Vzc2lvbiBmb3IgYGJhc2VVcmxgIChzaWduLW91dCwgb3IgYSByZWZyZXNoIHRoZSBwbGF0Zm9ybSByZWplY3RlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJTZXNzaW9uKGJhc2VVcmw6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBzdG9yZSA9IHJlYWRTdG9yZSgpO1xuICBpZiAoIShzdG9yZUtleShiYXNlVXJsKSBpbiBzdG9yZS5zZXNzaW9ucykpIHJldHVybjtcbiAgZGVsZXRlIHN0b3JlLnNlc3Npb25zW3N0b3JlS2V5KGJhc2VVcmwpXTtcbiAgdHJ5IHtcbiAgICB3cml0ZVN0b3JlKHN0b3JlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBMb3NpbmcgdGhlIGFiaWxpdHkgdG8gY2xlYXIgYSBkZWFkIHNlc3Npb24gaXMgYSBudWlzYW5jZSwgbm90IGEgZmFpbHVyZS5cbiAgICBwcmludFdhcm5pbmcoJ0NvdWxkIG5vdCB1cGRhdGUgdGhlIHN0b3JlZCBjcmVkZW50aWFscycsIHtcbiAgICAgIHBhdGg6IFNUT1JFX0ZJTEUsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVycm9yKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogVHJ1ZSB3aGVuIHRoZSBzdG9yZWQgYWNjZXNzIHRva2VuIGlzIHN0aWxsIHVzYWJsZSAod2l0aCBhIGxpdHRsZSBzbGFjaykuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXNzaW9uVXNhYmxlKHNlc3Npb246IFN0b3JlZFNlc3Npb24gfCB1bmRlZmluZWQpOiBzZXNzaW9uIGlzIFN0b3JlZFNlc3Npb24ge1xuICByZXR1cm4gISFzZXNzaW9uPy5hY2Nlc3NUb2tlbiAmJiBzZXNzaW9uLmV4cGlyZXNBdCAtIEVYUElSWV9TS0VXX01TID4gRGF0ZS5ub3coKTtcbn1cblxuLyoqXG4gKiBSdW4gYGZuYCBob2xkaW5nIHRoZSBtYWNoaW5lLXdpZGUgUkVGUkVTSCBMT0NLIChgfi8ucGlwZWxpbmUtbWFuYWdlci9yZWZyZXNoLmxvY2tgLFxuICogY3JlYXRlZCBleGNsdXNpdmVseSkuXG4gKlxuICogQSByZWZyZXNoIHRva2VuIGlzIHNpbmdsZS11c2U6IHR3byBDTEkgcHJvY2Vzc2VzIHJlbmV3aW5nIHRoZSBzYW1lIHN0b3JlZFxuICogc2Vzc2lvbiBhdCBvbmNlIChhIHNjcmlwdCBmYW5uaW5nIG91dCBjb21tYW5kcywgdHdvIHRlcm1pbmFscykgd291bGQgcHJlc2VudFxuICogdGhlIHNhbWUgdG9rZW4gdHdpY2UsIGFuZCBvdXRzaWRlIHRoZSBwbGF0Zm9ybSdzIHNob3J0IHJvdGF0aW9uIGdyYWNlIHRoZVxuICogc2Vjb25kIHVzZSByZWFkcyBhcyBSRVVTRSDigJQgd2hpY2ggcmV2b2tlcyB0aGUgc2Vzc2lvbi4gU2VyaWFsaXppbmcgdGhlIHJlZnJlc2hcbiAqIG1lYW5zIHRoZSBzZWNvbmQgcHJvY2VzcyB3YWl0cywgdGhlbiAocmUtcmVhZGluZyB0aGUgc3RvcmUpIGZpbmRzIHRoZSBwYWlyIHRoZVxuICogZmlyc3Qgb25lIGFscmVhZHkgc2F2ZWQgaW5zdGVhZCBvZiBzcGVuZGluZyB0aGUgb2xkIHRva2VuIGFnYWluLlxuICpcbiAqIEEgbG9jayBsZWZ0IGJlaGluZCBieSBhIGNyYXNoZWQgcHJvY2VzcyBpcyBicm9rZW4gYWZ0ZXJcbiAqIHtAbGluayBSRUZSRVNIX0xPQ0tfU1RBTEVfTVN9OyB3YWl0aW5nIGdpdmVzIHVwIGFmdGVyIHtAbGluayBSRUZSRVNIX0xPQ0tfV0FJVF9NU31cbiAqIGFuZCBydW5zIGBmbmAgYW55d2F5ICh0aGUgcGxhdGZvcm0gZ3JhY2Ugc3RpbGwgY292ZXJzIGEgbmVhci1zaW11bHRhbmVvdXMgdXNlKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhSZWZyZXNoTG9jazxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICBmcy5ta2RpclN5bmMoU1RPUkVfRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgbW9kZTogMG83MDAgfSk7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIFJFRlJFU0hfTE9DS19XQUlUX01TO1xuICBsZXQgaGVsZCA9IGZhbHNlO1xuICB3aGlsZSAoIWhlbGQpIHtcbiAgICB0cnkge1xuICAgICAgZnMuY2xvc2VTeW5jKGZzLm9wZW5TeW5jKFJFRlJFU0hfTE9DS19GSUxFLCAnd3gnLCAwbzYwMCkpO1xuICAgICAgaGVsZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlICE9PSAnRUVYSVNUJykgYnJlYWs7IC8vIGNhbid0IGxvY2sgYXQgYWxsIOKAlCBwcm9jZWVkIHVubG9ja2VkXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIGZzLnN0YXRTeW5jKFJFRlJFU0hfTE9DS19GSUxFKS5tdGltZU1zID4gUkVGUkVTSF9MT0NLX1NUQUxFX01TKSB7XG4gICAgICAgICAgZnMucm1TeW5jKFJFRlJFU0hfTE9DS19GSUxFLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29udGludWU7IC8vIHZhbmlzaGVkIGJldHdlZW4gb3BlbiBhbmQgc3RhdCDigJQgdHJ5IGFnYWluXG4gICAgICB9XG4gICAgICBpZiAoRGF0ZS5ub3coKSA+PSBkZWFkbGluZSkgYnJlYWs7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBSRUZSRVNIX0xPQ0tfUE9MTF9NUykpO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9IGZpbmFsbHkge1xuICAgIGlmIChoZWxkKSBmcy5ybVN5bmMoUkVGUkVTSF9MT0NLX0ZJTEUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-runner.d.ts","sourceRoot":"","sources":["../../src/utils/deploy-runner.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AASlD,uEAAuE;AACvE,UAAU,cAAc;IACtB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC,CAAC;IACvF,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8FpE"}
1
+ {"version":3,"file":"deploy-runner.d.ts","sourceRoot":"","sources":["../../src/utils/deploy-runner.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AASlD,uEAAuE;AACvE,UAAU,cAAc;IACtB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxD;AAED,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC,CAAC;IACvF,sFAAsF;IACtF,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGpE"}