@pipeline-builder/pipeline-manager 3.4.125 → 3.4.127

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 (54) hide show
  1. package/dist/agent/health.js +5 -4
  2. package/dist/agent/post-steps.d.ts.map +1 -1
  3. package/dist/agent/post-steps.js +7 -2
  4. package/dist/agent/targets.d.ts.map +1 -1
  5. package/dist/agent/targets.js +17 -2
  6. package/dist/boilerplate.js +3 -2
  7. package/dist/cli.js +3 -3
  8. package/dist/commands/create-pipeline.d.ts.map +1 -1
  9. package/dist/commands/create-pipeline.js +2 -1
  10. package/dist/commands/deploy.d.ts.map +1 -1
  11. package/dist/commands/deploy.js +11 -49
  12. package/dist/commands/get-plugin.d.ts.map +1 -1
  13. package/dist/commands/get-plugin.js +3 -2
  14. package/dist/commands/login.d.ts.map +1 -1
  15. package/dist/commands/login.js +18 -11
  16. package/dist/commands/status.d.ts.map +1 -1
  17. package/dist/commands/status.js +4 -4
  18. package/dist/commands/store-token.d.ts.map +1 -1
  19. package/dist/commands/store-token.js +103 -4
  20. package/dist/commands/synth.d.ts.map +1 -1
  21. package/dist/commands/synth.js +9 -53
  22. package/dist/commands/upload-plugin.d.ts.map +1 -1
  23. package/dist/commands/upload-plugin.js +2 -1
  24. package/dist/config/cli.constants.d.ts +0 -4
  25. package/dist/config/cli.constants.d.ts.map +1 -1
  26. package/dist/config/cli.constants.js +9 -4
  27. package/dist/lambda/token-renew-handler.d.ts +2 -0
  28. package/dist/lambda/token-renew-handler.d.ts.map +1 -0
  29. package/dist/lambda/token-renew-handler.js +75 -0
  30. package/dist/templates/token-renew-stack.json +116 -0
  31. package/dist/utils/api-client.d.ts.map +1 -1
  32. package/dist/utils/api-client.js +8 -15
  33. package/dist/utils/audit-log.d.ts.map +1 -1
  34. package/dist/utils/audit-log.js +22 -12
  35. package/dist/utils/aws-secrets.d.ts.map +1 -1
  36. package/dist/utils/aws-secrets.js +8 -2
  37. package/dist/utils/config-loader.d.ts +0 -4
  38. package/dist/utils/config-loader.d.ts.map +1 -1
  39. package/dist/utils/config-loader.js +4 -3
  40. package/dist/utils/cron.d.ts +28 -0
  41. package/dist/utils/cron.d.ts.map +1 -0
  42. package/dist/utils/cron.js +115 -0
  43. package/dist/utils/pipeline-config.d.ts +33 -0
  44. package/dist/utils/pipeline-config.d.ts.map +1 -0
  45. package/dist/utils/pipeline-config.js +54 -0
  46. package/dist/utils/platform-secret.d.ts.map +1 -1
  47. package/dist/utils/platform-secret.js +5 -2
  48. package/dist/utils/rate-limiter.d.ts +7 -6
  49. package/dist/utils/rate-limiter.d.ts.map +1 -1
  50. package/dist/utils/rate-limiter.js +49 -19
  51. package/dist/utils/tls.d.ts +16 -0
  52. package/dist/utils/tls.d.ts.map +1 -0
  53. package/dist/utils/tls.js +35 -0
  54. package/package.json +3 -3
@@ -8,9 +8,8 @@ import { auditLog } from '../utils/audit-log.js';
8
8
  import { ensureCdkAvailable, executeCdkShellCommand, resolveBoilerplatePath } from '../utils/cdk-utils.js';
9
9
  import { createAuthenticatedClientAsync, printCommandHeader, printSslWarning } from '../utils/command-utils.js';
10
10
  import { ERROR_CODES, handleError } from '../utils/error-handler.js';
11
- import { extractSingleResponse, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
12
- import { resolvePluginsForProps } from '../utils/plugin-resolver.js';
13
- import { bakePlatformRegistry } from '../utils/registry.js';
11
+ import { printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
12
+ import { fetchPipelineProps, printResolvedOrExit } from '../utils/pipeline-config.js';
14
13
  // ESM has no __dirname; derive it from this module's URL.
15
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
16
15
  /**
@@ -19,41 +18,15 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
19
18
  */
20
19
  async function fetchPipelineConfig(pipelineId, options) {
21
20
  const client = await createAuthenticatedClientAsync(options);
22
- const config = client.getConfig();
23
- const response = await client.get(`${config.api.pipelineUrl}/${pipelineId}`);
24
- const pipeline = extractSingleResponse(response, 'pipeline', 'props');
25
- if (!pipeline?.props) {
26
- printError('Pipeline has no props', { id: pipelineId });
27
- throw new Error(`Failed to retrieve pipeline props for ID: ${pipelineId}`);
28
- }
29
- const propsWithIds = {
30
- ...pipeline.props,
31
- pipelineId: pipeline.id || pipelineId,
32
- };
33
- if (pipeline.orgId)
34
- propsWithIds.orgId = pipeline.orgId;
35
- // Pre-resolve plugins from the platform API so the synthesized template
36
- // ships with real CodeBuild image URIs baked in. Without this, CDK falls
37
- // back to standard:7.0 because the deploy-time custom resource attribute
38
- // is unresolvable at synth time.
39
- const resolvedPlugins = await resolvePluginsForProps(client, propsWithIds);
40
- if (Object.keys(resolvedPlugins).length > 0) {
41
- propsWithIds.resolvedPlugins = resolvedPlugins;
42
- printInfo('Pre-resolved plugins', { count: Object.keys(resolvedPlugins).length });
43
- }
44
- // Bake the registry pull target from the platform URL we synth against (the
45
- // host serving the registry /v2/ data path) so CodeBuild image URIs use a host
46
- // AWS CodeBuild can resolve, not the in-cluster `registry:5000` default. No-op
47
- // when IMAGE_REGISTRY_PULL_HOST is set (explicit env wins).
48
- bakePlatformRegistry(propsWithIds, config.api.baseUrl);
21
+ const { propsWithIds, baseUrl } = await fetchPipelineProps(client, pipelineId);
49
22
  process.env.PIPELINE_PROPS = Buffer.from(JSON.stringify(propsWithIds)).toString('base64');
50
23
  // Propagate the resolved platform base URL into the boilerplate synth (which
51
24
  // inherits process.env). The synth uses it for serverConfig.platformUrl (the
52
25
  // PluginLookup Lambda endpoint) and as the loadRegistryConfig pull-host
53
26
  // fallback. Without this, a URL configured via ~/.pipeline-manager/config.yml
54
27
  // is invisible to the synth subprocess (it reads only the env).
55
- if (config.api.baseUrl) {
56
- process.env.PLATFORM_BASE_URL = config.api.baseUrl;
28
+ if (baseUrl) {
29
+ process.env.PLATFORM_BASE_URL = baseUrl;
57
30
  }
58
31
  printSuccess('Pipeline configuration loaded');
59
32
  }
@@ -181,25 +154,8 @@ async function showResolvedPipeline(pipelineId, options) {
181
154
  if (!pipelineId) {
182
155
  throw new Error('--show-resolved requires --id or PIPELINE_ID env var');
183
156
  }
184
- await fetchPipelineConfig(pipelineId, options);
185
- // fetchPipelineConfig writes PIPELINE_PROPS base64-encoded on success
186
- const encoded = process.env.PIPELINE_PROPS;
187
- if (!encoded)
188
- throw new Error('Failed to fetch pipeline configuration');
189
- const decoded = JSON.parse(Buffer.from(encoded, 'base64').toString('utf-8'));
190
- // Lazy import to avoid pulling pipeline-core into every CLI invocation
191
- const { resolveSelfReferencing } = await import('@pipeline-builder/pipeline-core');
192
- const scope = { metadata: decoded.metadata ?? {}, vars: decoded.vars ?? {} };
193
- const isTemplatable = (f) => f === 'projectName' || f.startsWith('metadata.') || f.startsWith('vars.');
194
- const fieldToScope = (f) => isTemplatable(f) ? f : null;
195
- const result = resolveSelfReferencing(decoded, scope, isTemplatable, fieldToScope, 'pipeline');
196
- if (result.errors.length) {
197
- console.error('Resolution errors:');
198
- for (const e of result.errors) {
199
- console.error(` [${e.field ?? '?'}] ${e.message}`);
200
- }
201
- process.exit(1);
202
- }
203
- console.log(JSON.stringify(decoded, null, 2));
157
+ const client = await createAuthenticatedClientAsync(options);
158
+ const { propsWithIds } = await fetchPipelineProps(client, pipelineId);
159
+ await printResolvedOrExit(propsWithIds);
204
160
  }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc3ludGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2pKLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTVELDBEQUEwRDtBQUMxRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUxRDs7O0dBR0c7QUFDSCxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLFVBQWtCLEVBQ2xCLE9BQTBGO0lBRTFGLE1BQU0sTUFBTSxH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QUM3RSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQ2xDLENBQUMsS0FBSyxhQUFhLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVFLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2hFLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BDLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IGRpcm5hbWUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgYXNzZXJ0U2hlbGxTYWZlIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHR5cGUgeyBQaXBlbGluZSB9IGZyb20gJy4uL3R5cGVzL3BpcGVsaW5lLmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IGVuc3VyZUNka0F2YWlsYWJsZSwgZXhlY3V0ZUNka1NoZWxsQ29tbWFuZCwgcmVzb2x2ZUJvaWxlcnBsYXRlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2Nkay11dGlscy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSwgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcbmltcG9ydCB7IHJlc29sdmVQbHVnaW5zRm9yUHJvcHMgfSBmcm9tICcuLi91dGlscy9wbHVnaW4tcmVzb2x2ZXIuanMnO1xuaW1wb3J0IHsgYmFrZVBsYXRmb3JtUmVnaXN0cnkgfSBmcm9tICcuLi91dGlscy9yZWdpc3RyeS5qcyc7XG5cbi8vIEVTTSBoYXMgbm8gX19kaXJuYW1lOyBkZXJpdmUgaXQgZnJvbSB0aGlzIG1vZHVsZSdzIFVSTC5cbmNvbnN0IF9fZGlybmFtZSA9IGRpcm5hbWUoZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpKTtcblxuLyoqXG4gKiBGZXRjaCBwaXBlbGluZSBjb25maWcgYW5kIHNldCBQSVBFTElORV9QUk9QUyBlbnYgdmFyIGZvciB0aGUgYm9pbGVycGxhdGUgYXBwLlxuICogVXNlcyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMgd2hpY2ggc3VwcG9ydHMgYWxsIHRocmVlIGF1dGggbWV0aG9kcy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hQaXBlbGluZUNvbmZpZyhcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBvcHRpb25zOiB7IHN0b3JlVG9rZW5zPzogYm9vbGVhbjsgdmVyaWZ5U3NsPzogYm9vbGVhbjsgcmVnaW9uPzogc3RyaW5nOyBwcm9maWxlPzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBgJHtjb25maWcuYXBpLnBpcGVsaW5lVXJsfS8ke3BpcGVsaW5lSWR9YCxcbiAgKTtcblxuICBjb25zdCBwaXBlbGluZSA9IGV4dHJhY3RTaW5nbGVSZXNwb25zZTxQaXBlbGluZT4ocmVzcG9uc2UsICdwaXBlbGluZScsICdwcm9wcycpO1xuXG4gIGlmICghcGlwZWxpbmU/LnByb3BzKSB7XG4gICAgcHJpbnRFcnJvcignUGlwZWxpbmUgaGFzIG5vIHByb3BzJywgeyBpZDogcGlwZWxpbmVJZCB9KTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBwaXBlbGluZSBwcm9wcyBmb3IgSUQ6ICR7cGlwZWxpbmVJZH1gKTtcbiAgfVxuXG4gIGNvbnN0IHByb3BzV2l0aElkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLi4ucGlwZWxpbmUucHJvcHMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgcGlwZWxpbmVJZDogcGlwZWxpbmUuaWQgfHwgcGlwZWxpbmVJZCxcbiAgfTtcbiAgaWYgKHBpcGVsaW5lLm9yZ0lkKSBwcm9wc1dpdGhJZHMub3JnSWQgPSBwaXBlbGluZS5vcmdJZDtcblxuICAvLyBQcmUtcmVzb2x2ZSBwbHVnaW5zIGZyb20gdGhlIHBsYXRmb3JtIEFQSSBzbyB0aGUgc3ludGhlc2l6ZWQgdGVtcGxhdGVcbiAgLy8gc2hpcHMgd2l0aCByZWFsIENvZGVCdWlsZCBpbWFnZSBVUklzIGJha2VkIGluLiBXaXRob3V0IHRoaXMsIENESyBmYWxsc1xuICAvLyBiYWNrIHRvIHN0YW5kYXJkOjcuMCBiZWNhdXNlIHRoZSBkZXBsb3ktdGltZSBjdXN0b20gcmVzb3VyY2UgYXR0cmlidXRlXG4gIC8vIGlzIHVucmVzb2x2YWJsZSBhdCBzeW50aCB0aW1lLlxuICBjb25zdCByZXNvbHZlZFBsdWdpbnMgPSBhd2FpdCByZXNvbHZlUGx1Z2luc0ZvclByb3BzKGNsaWVudCwgcHJvcHNXaXRoSWRzKTtcbiAgaWYgKE9iamVjdC5rZXlzKHJlc29sdmVkUGx1Z2lucykubGVuZ3RoID4gMCkge1xuICAgIHByb3BzV2l0aElkcy5yZXNvbHZlZFBsdWdpbnMgPSByZXNvbHZlZFBsdWdpbnM7XG4gICAgcHJpbnRJbmZvKCdQcmUtcmVzb2x2ZWQgcGx1Z2lucycsIHsgY291bnQ6IE9iamVjdC5rZXlzKHJlc29sdmVkUGx1Z2lucykubGVuZ3RoIH0pO1xuICB9XG5cbiAgLy8gQmFrZSB0aGUgcmVnaXN0cnkgcHVsbCB0YXJnZXQgZnJvbSB0aGUgcGxhdGZvcm0gVVJMIHdlIHN5bnRoIGFnYWluc3QgKHRoZVxuICAvLyBob3N0IHNlcnZpbmcgdGhlIHJlZ2lzdHJ5IC92Mi8gZGF0YSBwYXRoKSBzbyBDb2RlQnVpbGQgaW1hZ2UgVVJJcyB1c2UgYSBob3N0XG4gIC8vIEFXUyBDb2RlQnVpbGQgY2FuIHJlc29sdmUsIG5vdCB0aGUgaW4tY2x1c3RlciBgcmVnaXN0cnk6NTAwMGAgZGVmYXVsdC4gTm8tb3BcbiAgLy8gd2hlbiBJTUFHRV9SRUdJU1RSWV9QVUxMX0hPU1QgaXMgc2V0IChleHBsaWNpdCBlbnYgd2lucykuXG4gIGJha2VQbGF0Zm9ybVJlZ2lzdHJ5KHByb3BzV2l0aElkcywgY29uZmlnLmFwaS5iYXNlVXJsKTtcblxuICBwcm9jZXNzLmVudi5QSVBFTElORV9QUk9QUyA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KHByb3BzV2l0aElkcykpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAvLyBQcm9wYWdhdGUgdGhlIHJlc29sdmVkIHBsYXRmb3JtIGJhc2UgVVJMIGludG8gdGhlIGJvaWxlcnBsYXRlIHN5bnRoICh3aGljaFxuICAvLyBpbmhlcml0cyBwcm9jZXNzLmVudikuIFRoZSBzeW50aCB1c2VzIGl0IGZvciBzZXJ2ZXJDb25maWcucGxhdGZvcm1VcmwgKHRoZVxuICAvLyBQbHVnaW5Mb29rdXAgTGFtYmRhIGVuZHBvaW50KSBhbmQgYXMgdGhlIGxvYWRSZWdpc3RyeUNvbmZpZyBwdWxsLWhvc3RcbiAgLy8gZmFsbGJhY2suIFdpdGhvdXQgdGhpcywgYSBVUkwgY29uZmlndXJlZCB2aWEgfi8ucGlwZWxpbmUtbWFuYWdlci9jb25maWcueW1sXG4gIC8vIGlzIGludmlzaWJsZSB0byB0aGUgc3ludGggc3VicHJvY2VzcyAoaXQgcmVhZHMgb25seSB0aGUgZW52KS5cbiAgaWYgKGNvbmZpZy5hcGkuYmFzZVVybCkge1xuICAgIHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMID0gY29uZmlnLmFwaS5iYXNlVXJsO1xuICB9XG5cbiAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBjb25maWd1cmF0aW9uIGxvYWRlZCcpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHN5bnRoYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFJ1bnMgQ0RLIHN5bnRoZXNpcyB1c2luZyB0aGUgYm9pbGVycGxhdGUgYXBwLiBQaXBlbGluZSBjb25maWcgaXMgcmVzb2x2ZWQgZnJvbTpcbiAqIDEuIC0taWQgZmxhZyBvciBQSVBFTElORV9JRCBlbnYgdmFyIOKGkiBmZXRjaGVzIGNvbmZpZyBmcm9tIHBsYXRmb3JtIEFQSVxuICogMi4gUElQRUxJTkVfUFJPUFMgZW52IHZhciAocHJlLWVuY29kZWQsIGZyb20gZGVwbG95IGNvbW1hbmQpXG4gKlxuICogQXV0aGVudGljYXRpb24gbWV0aG9kcyAoaW4gcHJpb3JpdHkgb3JkZXIpOlxuICogLSBQTEFURk9STV9UT0tFTiBlbnYgdmFyXG4gKiAtIC0tc3RvcmUtdG9rZW5zIOKGkiBmZXRjaCBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogcGlwZWxpbmUtbWFuYWdlciBzeW50aCAtLWlkIDxwaXBlbGluZS1pZD4gLS1uby12ZXJpZnktc3NsXG4gKiBwaXBlbGluZS1tYW5hZ2VyIHN5bnRoIC0taWQgPHBpcGVsaW5lLWlkPiAtLXN0b3JlLXRva2Vuc1xuICogcGlwZWxpbmUtbWFuYWdlciBzeW50aCAtLXF1aWV0IC0tbm8tbm90aWNlcyAgICAgICAgICAjIENvZGVQaXBlbGluZSAodXNlcyBlbnYgdmFycylcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGgocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3N5bnRoJylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biBDREsgc3ludGhlc2lzIHVzaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nKVxuICAgIC5vcHRpb24oJy1pLCAtLWlkIDxpZD4nLCAnUGlwZWxpbmUgSUQgKG9yIHNldCBQSVBFTElORV9JRCBlbnYgdmFyKScpXG4gICAgLm9wdGlvbignLS1zdG9yZS10b2tlbnMnLCAnQXV0aGVudGljYXRlIHVzaW5nIHRva2VuIGZyb20gQVdTIFNlY3JldHMgTWFuYWdlciAocmVxdWlyZXMgUExBVEZPUk1fU0VDUkVUX05BTUUgZW52IHZhciknLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLW91dHB1dCA8ZGlyPicsICdDREsgb3V0cHV0IGRpcmVjdG9yeScsICdjZGsub3V0JylcbiAgICAub3B0aW9uKCctLXByb2ZpbGUgPHByb2ZpbGU+JywgJ0FXUyBwcm9maWxlJylcbiAgICAub3B0aW9uKCctLXJlZ2lvbiA8cmVnaW9uPicsICdBV1MgcmVnaW9uIChmb3IgLS1zdG9yZS10b2tlbnMpJylcbiAgICAub3B0aW9uKCctLXF1aWV0JywgJ1N1cHByZXNzIENESyBvdXRwdXQnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLW5vLW5vdGljZXMnLCAnU3VwcHJlc3MgQ0RLIG5vdGljZXMnKVxuICAgIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IHZlcmJvc2UgQ0RLIG91dHB1dCcsIGZhbHNlKVxuICAgIC5vcHRpb24oJy0tanNvbicsICdPdXRwdXQgcmVzdWx0IGFzIEpTT04nLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLXZlcmlmeS1zc2wnLCAnRW5hYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5vcHRpb24oJy0tbm8tdmVyaWZ5LXNzbCcsICdEaXNhYmxlIFNTTCBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24nKVxuICAgIC5vcHRpb24oJy0tc2hvdy1yZXNvbHZlZCcsICdQcmludCB0aGUgcmVzb2x2ZWQgcGlwZWxpbmUgY29uZmlnICh3aXRoIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgZXhwYW5kZWQpIGFuZCBleGl0IHdpdGhvdXQgcnVubmluZyBDREsnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignQ0RLIFN5bnRoZXNpcycpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwaXBlbGluZUlkID0gb3B0aW9ucy5pZCB8fCBwcm9jZXNzLmVudi5QSVBFTElORV9JRDtcblxuICAgICAgICAvLyAtLXNob3ctcmVzb2x2ZWQ6IHByZXZpZXcgdGVtcGxhdGVzIGFuZCBleGl0XG4gICAgICAgIGlmIChvcHRpb25zLnNob3dSZXNvbHZlZCkge1xuICAgICAgICAgIGF3YWl0IHNob3dSZXNvbHZlZFBpcGVsaW5lKHBpcGVsaW5lSWQsIG9wdGlvbnMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGF1ZGl0TG9nKCdzeW50aCcsIHsgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQsIG91dHB1dDogb3B0aW9ucy5vdXRwdXQsIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSB9KTtcbiAgICAgICAgcHJpbnRTc2xXYXJuaW5nKG9wdGlvbnMudmVyaWZ5U3NsKTtcblxuICAgICAgICAvLyBQcm9wYWdhdGUgdG8gcHJvY2Vzcy5lbnYgc28gQ0RLIGNvbnN0cnVjdHMgKExhbWJkYSwgQ29kZUJ1aWxkKSBpbmhlcml0IGl0XG4gICAgICAgIGlmIChvcHRpb25zLnZlcmlmeVNzbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEID0gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmV0Y2ggcGlwZWxpbmUgY29uZmlnIGlmIElEIGlzIGF2YWlsYWJsZSBhbmQgUElQRUxJTkVfUFJPUFMgbm90IGFscmVhZHkgc2V0XG4gICAgICAgIGlmIChwaXBlbGluZUlkICYmICFwcm9jZXNzLmVudi5QSVBFTElORV9QUk9QUykge1xuICAgICAgICAgIHByaW50SW5mbygnRmV0Y2hpbmcgcGlwZWxpbmUgY29uZmlndXJhdGlvbicsIHsgaWQ6IHBpcGVsaW5lSWQgfSk7XG4gICAgICAgICAgYXdhaXQgZmV0Y2hQaXBlbGluZUNvbmZpZyhwaXBlbGluZUlkLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmICghcGlwZWxpbmVJZCAmJiAhcHJvY2Vzcy5lbnYuUElQRUxJTkVfUFJPUFMpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ05vIHBpcGVsaW5lIElEIG9yIFBJUEVMSU5FX1BST1BTIHNldCcpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgSUQgaXMgcmVxdWlyZWQuIFVzZSAtLWlkIDxpZD4gb3Igc2V0IFBJUEVMSU5FX0lEIGVudiB2YXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBlbnN1cmVDZGtBdmFpbGFibGUoKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdBV1MgQ0RLIGlzIGF2YWlsYWJsZScpO1xuXG4gICAgICAgIC8vIEJ1aWxkIGNkayBzeW50aCBjb21tYW5kXG4gICAgICAgIGlmIChvcHRpb25zLm91dHB1dCkgYXNzZXJ0U2hlbGxTYWZlKG9wdGlvbnMub3V0cHV0LCAnb3V0cHV0Jyk7XG4gICAgICAgIGlmIChvcHRpb25zLnByb2ZpbGUpIGFzc2VydFNoZWxsU2FmZShvcHRpb25zLnByb2ZpbGUsICdwcm9maWxlJyk7XG5cbiAgICAgICAgY29uc3QgYm9pbGVycGxhdGVQYXRoID0gcmVzb2x2ZUJvaWxlcnBsYXRlUGF0aChfX2Rpcm5hbWUpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgICAnY2RrIHN5bnRoJyxcbiAgICAgICAgICBgLS1hcHA9XCJub2RlICR7Ym9pbGVycGxhdGVQYXRofVwiYCxcbiAgICAgICAgICBgLS1vdXRwdXQ9JHtvcHRpb25zLm91dHB1dH1gLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnByb2ZpbGUpIHBhcnRzLnB1c2goYC0tcHJvZmlsZT0ke29wdGlvbnMucHJvZmlsZX1gKTtcbiAgICAgICAgaWYgKG9wdGlvbnMucXVpZXQpIHBhcnRzLnB1c2goJy0tcXVpZXQnKTtcbiAgICAgICAgaWYgKG9wdGlvbnMubm90aWNlcyA9PT0gZmFsc2UpIHBhcnRzLnB1c2goJy0tbm8tbm90aWNlcycpO1xuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSBwYXJ0cy5wdXNoKCctLXZlcmJvc2UnKTtcblxuICAgICAgICBjb25zdCBjb21tYW5kID0gcGFydHMuam9pbignICcpO1xuXG4gICAgICAgIHByaW50SW5mbygnRXhlY3V0aW5nJywgeyBjb21tYW5kOiAoY29tbWFuZC5zcGxpdCgnLS1hcHAnKVswXSA/PyAnJykudHJpbSgpICsgJyAuLi4nIH0pO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXhlY3V0ZUNka1NoZWxsQ29tbWFuZChjb21tYW5kLCB7XG4gICAgICAgICAgc2hvd091dHB1dDogIW9wdGlvbnMucXVpZXQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdTeW50aGVzaXMgQ29tcGxldGUnKTtcblxuICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgICBkdXJhdGlvbjogcmVzdWx0LmR1cmF0aW9uLFxuICAgICAgICAgICAgICBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgICAgfSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgICAnRHVyYXRpb24nOiBgJHtyZXN1bHQuZHVyYXRpb259bXNgLFxuICAgICAgICAgICAgICAnT3V0cHV0Jzogb3B0aW9ucy5vdXRwdXQsXG4gICAgICAgICAgICAgICdTdGF0dXMnOiAn4pyTIFN1Y2Nlc3MnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHsgY29tbWFuZDogJ3N5bnRoJywgZXhlY3V0aW9uSWQsIHBpcGVsaW5lSWQ6IG9wdGlvbnMuaWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogRmV0Y2ggdGhlIHBpcGVsaW5lIGJ5IElELCBhcHBseSBwYXNzLTEgc2VsZi1yZWZlcmVuY2luZyB0ZW1wbGF0ZVxuICogcmVzb2x1dGlvbiwgYW5kIHByaW50IGl0IHRvIHN0ZG91dC4gVXNlZCBieSBgc3ludGggLS1zaG93LXJlc29sdmVkYFxuICogYW5kIGBkZXBsb3kgLS1zaG93LXJlc29sdmVkYCB0byBwcmV2aWV3IHN1YnN0aXR1dGlvbiBiZWZvcmUgcnVubmluZyBDREsuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNob3dSZXNvbHZlZFBpcGVsaW5lKFxuICBwaXBlbGluZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IHsgcHJvZmlsZT86IHN0cmluZzsgcmVnaW9uPzogc3RyaW5nOyBzdG9yZVRva2Vucz86IGJvb2xlYW47IHZlcmlmeVNzbD86IGJvb2xlYW4gfSxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXBpcGVsaW5lSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJy0tc2hvdy1yZXNvbHZlZCByZXF1aXJlcyAtLWlkIG9yIFBJUEVMSU5FX0lEIGVudiB2YXInKTtcbiAgfVxuICBhd2FpdCBmZXRjaFBpcGVsaW5lQ29uZmlnKHBpcGVsaW5lSWQsIG9wdGlvbnMpO1xuICAvLyBmZXRjaFBpcGVsaW5lQ29uZmlnIHdyaXRlcyBQSVBFTElORV9QUk9QUyBiYXNlNjQtZW5jb2RlZCBvbiBzdWNjZXNzXG4gIGNvbnN0IGVuY29kZWQgPSBwcm9jZXNzLmVudi5QSVBFTElORV9QUk9QUztcbiAgaWYgKCFlbmNvZGVkKSB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwaXBlbGluZSBjb25maWd1cmF0aW9uJyk7XG4gIGNvbnN0IGRlY29kZWQgPSBKU09OLnBhcnNlKEJ1ZmZlci5mcm9tKGVuY29kZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKSk7XG5cbiAgLy8gTGF6eSBpbXBvcnQgdG8gYXZvaWQgcHVsbGluZyBwaXBlbGluZS1jb3JlIGludG8gZXZlcnkgQ0xJIGludm9jYXRpb25cbiAgY29uc3QgeyByZXNvbHZlU2VsZlJlZmVyZW5jaW5nIH0gPSBhd2FpdCBpbXBvcnQoJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnKTtcbiAgY29uc3Qgc2NvcGUgPSB7IG1ldGFkYXRhOiBkZWNvZGVkLm1ldGFkYXRhID8/IHt9LCB2YXJzOiBkZWNvZGVkLnZhcnMgPz8ge30gfTtcbiAgY29uc3QgaXNUZW1wbGF0YWJsZSA9IChmOiBzdHJpbmcpID0+XG4gICAgZiA9PT0gJ3Byb2plY3ROYW1lJyB8fCBmLnN0YXJ0c1dpdGgoJ21ldGFkYXRhLicpIHx8IGYuc3RhcnRzV2l0aCgndmFycy4nKTtcbiAgY29uc3QgZmllbGRUb1Njb3BlID0gKGY6IHN0cmluZykgPT4gaXNUZW1wbGF0YWJsZShmKSA/IGYgOiBudWxsO1xuICBjb25zdCByZXN1bHQgPSByZXNvbHZlU2VsZlJlZmVyZW5jaW5nKGRlY29kZWQsIHNjb3BlLCBpc1RlbXBsYXRhYmxlLCBmaWVsZFRvU2NvcGUsICdwaXBlbGluZScpO1xuXG4gIGlmIChyZXN1bHQuZXJyb3JzLmxlbmd0aCkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1Jlc29sdXRpb24gZXJyb3JzOicpO1xuICAgIGZvciAoY29uc3QgZSBvZiByZXN1bHQuZXJyb3JzKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAgIFske2UuZmllbGQgPz8gJz8nfV0gJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShkZWNvZGVkLCBudWxsLCAyKSk7XG59XG4iXX0=
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc3ludGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFdEYsMERBQTBEO0FBQzFELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTFEOzs7R0FHRztBQUNILEtBQUssVUFBVSxtQkFBbUIsQ0FDaEMsVUFBa0IsRUFDbEIsT0FBMEY7SUFFMUYsTUFBTSxNQUFNLEdBQUcsTUFBTSw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxNQUFNLEVBQUUsWUFB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S0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7YUFDbkUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLFVBQThCLEVBQzlCLE9BQTBGO0lBRTFGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sOEJBQThCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0QsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IGFzc2VydFNoZWxsU2FmZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGF1ZGl0TG9nIH0gZnJvbSAnLi4vdXRpbHMvYXVkaXQtbG9nLmpzJztcbmltcG9ydCB7IGVuc3VyZUNka0F2YWlsYWJsZSwgZXhlY3V0ZUNka1NoZWxsQ29tbWFuZCwgcmVzb2x2ZUJvaWxlcnBsYXRlUGF0aCB9IGZyb20gJy4uL3V0aWxzL2Nkay11dGlscy5qcyc7XG5pbXBvcnQgeyBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMsIHByaW50Q29tbWFuZEhlYWRlciwgcHJpbnRTc2xXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMsIHByaW50UmVzb2x2ZWRPckV4aXQgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuXG4vLyBFU00gaGFzIG5vIF9fZGlybmFtZTsgZGVyaXZlIGl0IGZyb20gdGhpcyBtb2R1bGUncyBVUkwuXG5jb25zdCBfX2Rpcm5hbWUgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cbi8qKlxuICogRmV0Y2ggcGlwZWxpbmUgY29uZmlnIGFuZCBzZXQgUElQRUxJTkVfUFJPUFMgZW52IHZhciBmb3IgdGhlIGJvaWxlcnBsYXRlIGFwcC5cbiAqIFVzZXMgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIHdoaWNoIHN1cHBvcnRzIGFsbCB0aHJlZSBhdXRoIG1ldGhvZHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUGlwZWxpbmVDb25maWcoXG4gIHBpcGVsaW5lSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogeyBzdG9yZVRva2Vucz86IGJvb2xlYW47IHZlcmlmeVNzbD86IGJvb2xlYW47IHJlZ2lvbj86IHN0cmluZzsgcHJvZmlsZT86IHN0cmluZyB9LFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgY29uc3QgeyBwcm9wc1dpdGhJZHMsIGJhc2VVcmwgfSA9IGF3YWl0IGZldGNoUGlwZWxpbmVQcm9wcyhjbGllbnQsIHBpcGVsaW5lSWQpO1xuXG4gIHByb2Nlc3MuZW52LlBJUEVMSU5FX1BST1BTID0gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkocHJvcHNXaXRoSWRzKSkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gIC8vIFByb3BhZ2F0ZSB0aGUgcmVzb2x2ZWQgcGxhdGZvcm0gYmFzZSBVUkwgaW50byB0aGUgYm9pbGVycGxhdGUgc3ludGggKHdoaWNoXG4gIC8vIGluaGVyaXRzIHByb2Nlc3MuZW52KS4gVGhlIHN5bnRoIHVzZXMgaXQgZm9yIHNlcnZlckNvbmZpZy5wbGF0Zm9ybVVybCAodGhlXG4gIC8vIFBsdWdpbkxvb2t1cCBMYW1iZGEgZW5kcG9pbnQpIGFuZCBhcyB0aGUgbG9hZFJlZ2lzdHJ5Q29uZmlnIHB1bGwtaG9zdFxuICAvLyBmYWxsYmFjay4gV2l0aG91dCB0aGlzLCBhIFVSTCBjb25maWd1cmVkIHZpYSB+Ly5waXBlbGluZS1tYW5hZ2VyL2NvbmZpZy55bWxcbiAgLy8gaXMgaW52aXNpYmxlIHRvIHRoZSBzeW50aCBzdWJwcm9jZXNzIChpdCByZWFkcyBvbmx5IHRoZSBlbnYpLlxuICBpZiAoYmFzZVVybCkge1xuICAgIHByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMID0gYmFzZVVybDtcbiAgfVxuXG4gIHByaW50U3VjY2VzcygnUGlwZWxpbmUgY29uZmlndXJhdGlvbiBsb2FkZWQnKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBzeW50aGAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBSdW5zIENESyBzeW50aGVzaXMgdXNpbmcgdGhlIGJvaWxlcnBsYXRlIGFwcC4gUGlwZWxpbmUgY29uZmlnIGlzIHJlc29sdmVkIGZyb206XG4gKiAxLiAtLWlkIGZsYWcgb3IgUElQRUxJTkVfSUQgZW52IHZhciDihpIgZmV0Y2hlcyBjb25maWcgZnJvbSBwbGF0Zm9ybSBBUElcbiAqIDIuIFBJUEVMSU5FX1BST1BTIGVudiB2YXIgKHByZS1lbmNvZGVkLCBmcm9tIGRlcGxveSBjb21tYW5kKVxuICpcbiAqIEF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgKGluIHByaW9yaXR5IG9yZGVyKTpcbiAqIC0gUExBVEZPUk1fVE9LRU4gZW52IHZhclxuICogLSAtLXN0b3JlLXRva2VucyDihpIgZmV0Y2ggZnJvbSBBV1MgU2VjcmV0cyBNYW5hZ2VyXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIHBpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1pZCA8cGlwZWxpbmUtaWQ+IC0tbm8tdmVyaWZ5LXNzbFxuICogcGlwZWxpbmUtbWFuYWdlciBzeW50aCAtLWlkIDxwaXBlbGluZS1pZD4gLS1zdG9yZS10b2tlbnNcbiAqIHBpcGVsaW5lLW1hbmFnZXIgc3ludGggLS1xdWlldCAtLW5vLW5vdGljZXMgICAgICAgICAgIyBDb2RlUGlwZWxpbmUgKHVzZXMgZW52IHZhcnMpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bnRoKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCdzeW50aCcpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gQ0RLIHN5bnRoZXNpcyB1c2luZyBwaXBlbGluZSBjb25maWd1cmF0aW9uJylcbiAgICAub3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ1BpcGVsaW5lIElEIChvciBzZXQgUElQRUxJTkVfSUQgZW52IHZhciknKVxuICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0F1dGhlbnRpY2F0ZSB1c2luZyB0b2tlbiBmcm9tIEFXUyBTZWNyZXRzIE1hbmFnZXIgKHJlcXVpcmVzIFBMQVRGT1JNX1NFQ1JFVF9OQU1FIGVudiB2YXIpJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1vdXRwdXQgPGRpcj4nLCAnQ0RLIG91dHB1dCBkaXJlY3RvcnknLCAnY2RrLm91dCcpXG4gICAgLm9wdGlvbignLS1wcm9maWxlIDxwcm9maWxlPicsICdBV1MgcHJvZmlsZScpXG4gICAgLm9wdGlvbignLS1yZWdpb24gPHJlZ2lvbj4nLCAnQVdTIHJlZ2lvbiAoZm9yIC0tc3RvcmUtdG9rZW5zKScpXG4gICAgLm9wdGlvbignLS1xdWlldCcsICdTdXBwcmVzcyBDREsgb3V0cHV0JywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1uby1ub3RpY2VzJywgJ1N1cHByZXNzIENESyBub3RpY2VzJylcbiAgICAub3B0aW9uKCctLXZlcmJvc2UnLCAnU2hvdyB2ZXJib3NlIENESyBvdXRwdXQnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IHJlc3VsdCBhcyBKU09OJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLXNob3ctcmVzb2x2ZWQnLCAnUHJpbnQgdGhlIHJlc29sdmVkIHBpcGVsaW5lIGNvbmZpZyAod2l0aCB7eyAuLi4gfX0gdGVtcGxhdGVzIGV4cGFuZGVkKSBhbmQgZXhpdCB3aXRob3V0IHJ1bm5pbmcgQ0RLJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBwcmludENvbW1hbmRIZWFkZXIoJ0NESyBTeW50aGVzaXMnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGlwZWxpbmVJZCA9IG9wdGlvbnMuaWQgfHwgcHJvY2Vzcy5lbnYuUElQRUxJTkVfSUQ7XG5cbiAgICAgICAgLy8gLS1zaG93LXJlc29sdmVkOiBwcmV2aWV3IHRlbXBsYXRlcyBhbmQgZXhpdFxuICAgICAgICBpZiAob3B0aW9ucy5zaG93UmVzb2x2ZWQpIHtcbiAgICAgICAgICBhd2FpdCBzaG93UmVzb2x2ZWRQaXBlbGluZShwaXBlbGluZUlkLCBvcHRpb25zKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBhdWRpdExvZygnc3ludGgnLCB7IGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkLCBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0LCBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfSk7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gUHJvcGFnYXRlIHRvIHByb2Nlc3MuZW52IHNvIENESyBjb25zdHJ1Y3RzIChMYW1iZGEsIENvZGVCdWlsZCkgaW5oZXJpdCBpdFxuICAgICAgICBpZiAob3B0aW9ucy52ZXJpZnlTc2wgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9UTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCA9ICcwJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZldGNoIHBpcGVsaW5lIGNvbmZpZyBpZiBJRCBpcyBhdmFpbGFibGUgYW5kIFBJUEVMSU5FX1BST1BTIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICBpZiAocGlwZWxpbmVJZCAmJiAhcHJvY2Vzcy5lbnYuUElQRUxJTkVfUFJPUFMpIHtcbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBpcGVsaW5lIGNvbmZpZ3VyYXRpb24nLCB7IGlkOiBwaXBlbGluZUlkIH0pO1xuICAgICAgICAgIGF3YWl0IGZldGNoUGlwZWxpbmVDb25maWcocGlwZWxpbmVJZCwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXBpcGVsaW5lSWQgJiYgIXByb2Nlc3MuZW52LlBJUEVMSU5FX1BST1BTKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdObyBwaXBlbGluZSBJRCBvciBQSVBFTElORV9QUk9QUyBzZXQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BpcGVsaW5lIElEIGlzIHJlcXVpcmVkLiBVc2UgLS1pZCA8aWQ+IG9yIHNldCBQSVBFTElORV9JRCBlbnYgdmFyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5zdXJlQ2RrQXZhaWxhYmxlKCk7XG4gICAgICAgIHByaW50U3VjY2VzcygnQVdTIENESyBpcyBhdmFpbGFibGUnKTtcblxuICAgICAgICAvLyBCdWlsZCBjZGsgc3ludGggY29tbWFuZFxuICAgICAgICBpZiAob3B0aW9ucy5vdXRwdXQpIGFzc2VydFNoZWxsU2FmZShvcHRpb25zLm91dHB1dCwgJ291dHB1dCcpO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9maWxlKSBhc3NlcnRTaGVsbFNhZmUob3B0aW9ucy5wcm9maWxlLCAncHJvZmlsZScpO1xuXG4gICAgICAgIGNvbnN0IGJvaWxlcnBsYXRlUGF0aCA9IHJlc29sdmVCb2lsZXJwbGF0ZVBhdGgoX19kaXJuYW1lKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgICAgJ2NkayBzeW50aCcsXG4gICAgICAgICAgYC0tYXBwPVwibm9kZSAke2JvaWxlcnBsYXRlUGF0aH1cImAsXG4gICAgICAgICAgYC0tb3V0cHV0PSR7b3B0aW9ucy5vdXRwdXR9YCxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5wcm9maWxlKSBwYXJ0cy5wdXNoKGAtLXByb2ZpbGU9JHtvcHRpb25zLnByb2ZpbGV9YCk7XG4gICAgICAgIGlmIChvcHRpb25zLnF1aWV0KSBwYXJ0cy5wdXNoKCctLXF1aWV0Jyk7XG4gICAgICAgIGlmIChvcHRpb25zLm5vdGljZXMgPT09IGZhbHNlKSBwYXJ0cy5wdXNoKCctLW5vLW5vdGljZXMnKTtcbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkgcGFydHMucHVzaCgnLS12ZXJib3NlJyk7XG5cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHBhcnRzLmpvaW4oJyAnKTtcblxuICAgICAgICBwcmludEluZm8oJ0V4ZWN1dGluZycsIHsgY29tbWFuZDogKGNvbW1hbmQuc3BsaXQoJy0tYXBwJylbMF0gPz8gJycpLnRyaW0oKSArICcgLi4uJyB9KTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4ZWN1dGVDZGtTaGVsbENvbW1hbmQoY29tbWFuZCwge1xuICAgICAgICAgIHNob3dPdXRwdXQ6ICFvcHRpb25zLnF1aWV0LFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignU3ludGhlc2lzIENvbXBsZXRlJyk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgICAgZHVyYXRpb246IHJlc3VsdC5kdXJhdGlvbixcbiAgICAgICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICAgIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAgICAgJ0R1cmF0aW9uJzogYCR7cmVzdWx0LmR1cmF0aW9ufW1zYCxcbiAgICAgICAgICAgICAgJ091dHB1dCc6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgICAgICAgICAnU3RhdHVzJzogJ+KckyBTdWNjZXNzJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICdzeW50aCcsIGV4ZWN1dGlvbklkLCBwaXBlbGluZUlkOiBvcHRpb25zLmlkIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIEZldGNoIHRoZSBwaXBlbGluZSBieSBJRCwgYXBwbHkgcGFzcy0xIHNlbGYtcmVmZXJlbmNpbmcgdGVtcGxhdGVcbiAqIHJlc29sdXRpb24sIGFuZCBwcmludCBpdCB0byBzdGRvdXQuIFVzZWQgYnkgYHN5bnRoIC0tc2hvdy1yZXNvbHZlZGBcbiAqIGFuZCBgZGVwbG95IC0tc2hvdy1yZXNvbHZlZGAgdG8gcHJldmlldyBzdWJzdGl0dXRpb24gYmVmb3JlIHJ1bm5pbmcgQ0RLLlxuICovXG5hc3luYyBmdW5jdGlvbiBzaG93UmVzb2x2ZWRQaXBlbGluZShcbiAgcGlwZWxpbmVJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiB7IHByb2ZpbGU/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZzsgc3RvcmVUb2tlbnM/OiBib29sZWFuOyB2ZXJpZnlTc2w/OiBib29sZWFuIH0sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFwaXBlbGluZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCctLXNob3ctcmVzb2x2ZWQgcmVxdWlyZXMgLS1pZCBvciBQSVBFTElORV9JRCBlbnYgdmFyJyk7XG4gIH1cbiAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICBjb25zdCB7IHByb3BzV2l0aElkcyB9ID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKGNsaWVudCwgcGlwZWxpbmVJZCk7XG4gIGF3YWl0IHByaW50UmVzb2x2ZWRPckV4aXQocHJvcHNXaXRoSWRzKTtcbn1cbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"upload-plugin.d.ts","sourceRoot":"","sources":["../../src/commands/upload-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoRnD"}
1
+ {"version":3,"file":"upload-plugin.d.ts","sourceRoot":"","sources":["../../src/commands/upload-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqRnD"}
@@ -40,6 +40,7 @@ export function uploadPlugin(program) {
40
40
  .option('-v, --version <version>', 'Plugin version (optional, extracted from package if not provided)')
41
41
  .option('--public', 'Make plugin publicly accessible', false)
42
42
  .option('--active', 'Set plugin as active', true)
43
+ .option('--no-active', 'Upload the plugin as inactive')
43
44
  .option('--verify-ssl', 'Enable SSL certificate verification')
44
45
  .option('--no-verify-ssl', 'Disable SSL certificate verification')
45
46
  .option('--dry-run', 'Validate file without uploading', false)
@@ -271,4 +272,4 @@ export function uploadPlugin(program) {
271
272
  }
272
273
  });
273
274
  }
274
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFvQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0osTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQjtJQUMzQyxPQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixXQUFXLENBQUMsb0NBQW9DLENBQUM7U0FDakQsY0FBYyxDQUFDLG1CQUFtQixFQUFFLHlCQUF5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QUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFDM0IsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsT0FBTyxFQUFFO29CQUNQLE9BQU8sRUFBRSxlQUFlO29CQUN4QixXQUFXO29CQUNYLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDeEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO29CQUN0QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0I7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBGSUxFX1NJWkVfTElNSVRTLCBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHR5cGUgUGx1Z2luLCB0eXBlIFBsdWdpblJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBleHRyYWN0U2luZ2xlUmVzcG9uc2UsIGZpbGVFeGlzdHMsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgdXBsb2FkLXBsdWdpbmAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBWYWxpZGF0ZXMgYSBsb2NhbCBwbHVnaW4gWklQIGZpbGUgKHNpemUsIGV4dGVuc2lvbiwgcmVhZGFiaWxpdHkpLFxuICogYnVpbGRzIGEgbXVsdGlwYXJ0IGZvcm0sIGFuZCB1cGxvYWRzIGl0IHRvIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKiBQbHVnaW4gbmFtZSBhbmQgdmVyc2lvbiBjYW4gYmUgYXV0by1kZXRlY3RlZCBmcm9tIHRoZSBwYWNrYWdlXG4gKiBvciBvdmVycmlkZGVuIHZpYSBDTEkgZmxhZ3MuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIGNsaSB1cGxvYWQtcGx1Z2luIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWVcbiAqIGNsaSB1cGxvYWQtcGx1Z2luIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWUgLS1wdWJsaWNcbiAqIGNsaSB1cGxvYWQtcGx1Z2luIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWUgLS1uYW1lIG15LXBsdWdpbiAtLXZlcnNpb24gMS4wLjBcbiAqIGNsaSB1cGxvYWQtcGx1Z2luIC0tZmlsZSBwbHVnaW4uemlwIC0tb3JnYW5pemF0aW9uIGFjbWUgLS1uby12ZXJpZnktc3NsXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZFBsdWdpbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgndXBsb2FkLXBsdWdpbicpXG4gICAgLmRlc2NyaXB0aW9uKCdVcGxvYWQgYW5kIGRlcGxveSBhIHBsdWdpbiBwYWNrYWdlJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1mLCAtLWZpbGUgPGZpbGU+JywgJ1BhdGggdG8gcGx1Z2luIFpJUCBmaWxlJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1vLCAtLW9yZ2FuaXphdGlvbiA8b3JnYW5pemF0aW9uPicsICdPcmdhbml6YXRpb24gbmFtZScpXG4gICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGx1Z2luIG5hbWUgKG9wdGlvbmFsLCBleHRyYWN0ZWQgZnJvbSBwYWNrYWdlIGlmIG5vdCBwcm92aWRlZCknKVxuICAgIC5vcHRpb24oJy12LCAtLXZlcnNpb24gPHZlcnNpb24+JywgJ1BsdWdpbiB2ZXJzaW9uIChvcHRpb25hbCwgZXh0cmFjdGVkIGZyb20gcGFja2FnZSBpZiBub3QgcHJvdmlkZWQpJylcbiAgICAub3B0aW9uKCctLXB1YmxpYycsICdNYWtlIHBsdWdpbiBwdWJsaWNseSBhY2Nlc3NpYmxlJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1hY3RpdmUnLCAnU2V0IHBsdWdpbiBhcyBhY3RpdmUnLCB0cnVlKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGZpbGUgd2l0aG91dCB1cGxvYWRpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVXBsb2FkIFBsdWdpbicpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSB8fCAnKGF1dG8tZGV0ZWN0KScsXG4gICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcoYXV0by1kZXRlY3QpJyxcbiAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIGFjdGl2ZTogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgb3JnYW5pemF0aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgdHlwZW9mIG9wdGlvbnMub3JnYW5pemF0aW9uICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLm9yZ2FuaXphdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBvcmdhbml6YXRpb24gbmFtZScsIHsgcHJvdmlkZWQ6IG9wdGlvbnMub3JnYW5pemF0aW9uIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09yZ2FuaXphdGlvbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICdvcmdhbml6YXRpb24nLCBvcHRpb25zLm9yZ2FuaXphdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbGUgfHwgdHlwZW9mIG9wdGlvbnMuZmlsZSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5maWxlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcsIHsgcHJvdmlkZWQ6IG9wdGlvbnMuZmlsZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaWxlIHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLCAnZmlsZScsIG9wdGlvbnMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIHByaW50SW5mbygnVmFsaWRhdGluZyBwbHVnaW4gZmlsZScsIHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUGx1Z2luIGZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsICdmaWxlJywgZmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpbGVFeHQgIT09ICcuemlwJykge1xuICAgICAgICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC56aXAnLCB7XG4gICAgICAgICAgICBwcm92aWRlZDogZmlsZUV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnLnppcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgbXVzdCBiZSBhIFpJUCBhcmNoaXZlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgZmlsZSBzdGF0c1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3Qgc2l6ZUJ5dGVzID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgY29uc3Qgc2l6ZUZvcm1hdHRlZCA9IGZvcm1hdEZpbGVTaXplKHNpemVCeXRlcyk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQbHVnaW4gZmlsZSBmb3VuZCcsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICAgIG1vZGlmaWVkOiBuZXcgRGF0ZShzdGF0cy5tdGltZSkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChzaXplQnl0ZXMgPiBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIHRvbyBsYXJnZScsIHtcbiAgICAgICAgICAgIHNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBtYXhpbXVtOiBmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgICBleGNlZWRlZEJ5OiBmb3JtYXRGaWxlU2l6ZShzaXplQnl0ZXMgLSBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGBQbHVnaW4gZmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke2Zvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUExVR0lOKX0gKGFjdHVhbDogJHtzaXplRm9ybWF0dGVkfSlgLFxuICAgICAgICAgICAgJ2ZpbGUuc2l6ZScsXG4gICAgICAgICAgICBzaXplQnl0ZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGZpbGUgaXMgcmVhZGFibGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5hY2Nlc3NTeW5jKGZpbGVQYXRoLCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ2Fubm90IHJlYWQgcGx1Z2luIGZpbGUnLCB7XG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgaXMgbm90IHJlYWRhYmxlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBmaWxlIHZhbGlkYXRlZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uUmVnZXggPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyQvO1xuICAgICAgICAgIGlmICghdmVyc2lvblJlZ2V4LnRlc3Qob3B0aW9ucy52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdWZXJzaW9uIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdzZW1hbnRpYyB2ZXJzaW9uIChlLmcuLCAxLjAuMCwgMS4yLjMtYmV0YS4xKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lIGZvcm1hdCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZVJlZ2V4ID0gL15bYS16MC05LV0rJC87XG4gICAgICAgICAgaWYgKCFuYW1lUmVnZXgudGVzdChvcHRpb25zLm5hbWUpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BsdWdpbiBuYW1lIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggZGFzaGVzIChlLmcuLCBteS1wbHVnaW4tbmFtZSknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJ5IHJ1biBtb2RlXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBWYWxpZGF0aW9uIENvbXBsZXRlJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkIC0gbm8gdXBsb2FkIHBlcmZvcm1lZCcpO1xuXG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBGaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIFNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgTmFtZTogb3B0aW9ucy5uYW1lIHx8ICcod2lsbCBiZSBhdXRvLWRldGVjdGVkKScsXG4gICAgICAgICAgICBWZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gfHwgJyh3aWxsIGJlIGF1dG8tZGV0ZWN0ZWQpJyxcbiAgICAgICAgICAgIFB1YmxpYzogb3B0aW9ucy5wdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgICBBY3RpdmU6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGZvcm0gZGF0YVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignVXBsb2FkaW5nIFBsdWdpbicpO1xuICAgICAgICBwcmludEluZm8oJ1ByZXBhcmluZyB1cGxvYWQnLCB7XG4gICAgICAgICAgZmlsZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICAgICAgc2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSwge1xuICAgICAgICAgIGZpbGVuYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ2FuaXphdGlvbicsIG9wdGlvbnMub3JnYW5pemF0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSBmb3JtRGF0YS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSBmb3JtRGF0YS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRpb25zLnZlcnNpb24pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzUHVibGljJywgb3B0aW9ucy5wdWJsaWMgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc0FjdGl2ZScsIG9wdGlvbnMuYWN0aXZlID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG5cbiAgICAgICAgLy8gTWFrZSBBUEkgcmVxdWVzdFxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGNvbmZpZy5hcGkucGx1Z2luVXBsb2FkVXJsO1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyB0byBBUEknLCB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGxvYWRpbmcgcGx1Z2luLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJhd1Jlc3BvbnNlOiBQbHVnaW5SZXNwb25zZTtcbiAgICAgICAgbGV0IGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICByYXdSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0Rm9ybTxQbHVnaW5SZXNwb25zZT4oZW5kcG9pbnQsIGZvcm1EYXRhKTtcbiAgICAgICAgICBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQbHVnaW4gdXBsb2FkZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1VwbG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBsdWdpbj4ocmF3UmVzcG9uc2UsICdwbHVnaW4nLCAnbmFtZScpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdObyB2YWxpZCBwbHVnaW4gZGF0YSBpbiByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQgLSBubyB2YWxpZCBwbHVnaW4gZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1BsdWdpbiBVcGxvYWRlZCBTdWNjZXNzZnVsbHknKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHBsdWdpbiBpbmZvcm1hdGlvblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGx1Z2luIElEJzogZ3JlZW4oYm9sZChyZXNwb25zZS5pZCkpLFxuICAgICAgICAgICdOYW1lJzogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAnVmVyc2lvbic6IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnRGVzY3JpcHRpb24nOiByZXNwb25zZS5kZXNjcmlwdGlvbiB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRmlsZSBVUkwnOiByZXNwb25zZS5maWxlVXJsIHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdGaWxlIFNpemUnOiByZXNwb25zZS5maWxlU2l6ZSA/IGAkeyhyZXNwb25zZS5maWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdDaGVja3N1bSc6IHJlc3BvbnNlLmNoZWNrc3VtID8gYCR7cmVzcG9uc2UuY2hlY2tzdW0uc3Vic3RyaW5nKDAsIDE2KX0uLi5gIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1B1YmxpYyc6IHJlc3BvbnNlLmlzUHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiByZXNwb25zZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHJlc3BvbnNlLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgICAnVXBsb2FkZWQgQnknOiByZXNwb25zZS51cGxvYWRlZEJ5IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVXBsb2FkIER1cmF0aW9uJzogYCR7KGR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgyKX1zYCxcbiAgICAgICAgICAnU3RhdHVzJzogZ3JlZW4oJ+KckyBTdWNjZXNzJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFByaW50IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXRhZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1BsdWdpbiBtZXRhZGF0YSBhdmFpbGFibGUnLCB7XG4gICAgICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YSkubGVuZ3RoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgZGVwbG95bWVudCBsb2dzIFVSTCBpZiBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BbJ1gtUmVxdWVzdC1JZCddIHx8IHJlc3AucmVxdWVzdElkO1xuICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBsb2dzIGF2YWlsYWJsZScsIHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHVybDogYCR7Y29uZmlnLmFwaS5iYXNlVXJsfS9sb2dzLyR7cmVxdWVzdElkfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdOZXh0IHN0ZXBzJywge1xuICAgICAgICAgIHZpZXc6IGBVc2UgXCJnZXQtcGx1Z2luIC0taWQgJHtyZXNwb25zZS5pZH1cIiB0byB2aWV3IHBsdWdpbiBkZXRhaWxzYCxcbiAgICAgICAgICBsaXN0OiAnVXNlIFwibGlzdC1wbHVnaW5zXCIgdG8gc2VlIGFsbCBwbHVnaW5zJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICd1cGxvYWQtcGx1Z2luJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHB1YmxpYzogb3B0aW9ucy5wdWJsaWMsXG4gICAgICAgICAgICBhY3RpdmU6IG9wdGlvbnMuYWN0aXZlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy91cGxvYWQtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFvQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0osTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFN0I7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQjtJQUMzQyxPQUFPO1NBQ0osT0FBTyxDQUFDLGVBQWUsQ0FBQztTQUN4QixXQUFXLENBQUMsb0NBQW9DLENBQUM7U0FDakQsY0FBYyxDQUFDLG1CQUFtQixFQUFFLHlCQUF5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TyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFdBQVc7b0JBQ1gsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtvQkFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO29CQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtvQkFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO2lCQUM3QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgb3JhIGZyb20gJ29yYSc7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEZJTEVfU0laRV9MSU1JVFMsIGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vY29uZmlnL2NsaS5jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgdHlwZSBQbHVnaW4sIHR5cGUgUGx1Z2luUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcy9pbmRleC5qcyc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudCB9IGZyb20gJy4uL3V0aWxzL2NvbW1hbmQtdXRpbHMuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IGV4dHJhY3RTaW5nbGVSZXNwb25zZSwgZmlsZUV4aXN0cywgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzLmpzJztcblxuY29uc3QgeyBib2xkLCBncmVlbiB9ID0gcGljbztcblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGB1cGxvYWQtcGx1Z2luYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIFZhbGlkYXRlcyBhIGxvY2FsIHBsdWdpbiBaSVAgZmlsZSAoc2l6ZSwgZXh0ZW5zaW9uLCByZWFkYWJpbGl0eSksXG4gKiBidWlsZHMgYSBtdWx0aXBhcnQgZm9ybSwgYW5kIHVwbG9hZHMgaXQgdG8gdGhlIHBsYXRmb3JtIEFQSS5cbiAqIFBsdWdpbiBuYW1lIGFuZCB2ZXJzaW9uIGNhbiBiZSBhdXRvLWRldGVjdGVkIGZyb20gdGhlIHBhY2thZ2VcbiAqIG9yIG92ZXJyaWRkZW4gdmlhIENMSSBmbGFncy5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgYmFzaFxuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZVxuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLXB1YmxpY1xuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLW5hbWUgbXktcGx1Z2luIC0tdmVyc2lvbiAxLjAuMFxuICogY2xpIHVwbG9hZC1wbHVnaW4gLS1maWxlIHBsdWdpbi56aXAgLS1vcmdhbml6YXRpb24gYWNtZSAtLW5vLXZlcmlmeS1zc2xcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkUGx1Z2luKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCd1cGxvYWQtcGx1Z2luJylcbiAgICAuZGVzY3JpcHRpb24oJ1VwbG9hZCBhbmQgZGVwbG95IGEgcGx1Z2luIHBhY2thZ2UnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWYsIC0tZmlsZSA8ZmlsZT4nLCAnUGF0aCB0byBwbHVnaW4gWklQIGZpbGUnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lJylcbiAgICAub3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdQbHVnaW4gbmFtZSAob3B0aW9uYWwsIGV4dHJhY3RlZCBmcm9tIHBhY2thZ2UgaWYgbm90IHByb3ZpZGVkKScpXG4gICAgLm9wdGlvbignLXYsIC0tdmVyc2lvbiA8dmVyc2lvbj4nLCAnUGx1Z2luIHZlcnNpb24gKG9wdGlvbmFsLCBleHRyYWN0ZWQgZnJvbSBwYWNrYWdlIGlmIG5vdCBwcm92aWRlZCknKVxuICAgIC5vcHRpb24oJy0tcHVibGljJywgJ01ha2UgcGx1Z2luIHB1YmxpY2x5IGFjY2Vzc2libGUnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWFjdGl2ZScsICdTZXQgcGx1Z2luIGFzIGFjdGl2ZScsIHRydWUpXG4gICAgLm9wdGlvbignLS1uby1hY3RpdmUnLCAnVXBsb2FkIHRoZSBwbHVnaW4gYXMgaW5hY3RpdmUnKVxuICAgIC5vcHRpb24oJy0tdmVyaWZ5LXNzbCcsICdFbmFibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1uby12ZXJpZnktc3NsJywgJ0Rpc2FibGUgU1NMIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbicpXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGZpbGUgd2l0aG91dCB1cGxvYWRpbmcnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignVXBsb2FkIFBsdWdpbicpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZCBwYXJhbWV0ZXJzJywge1xuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSB8fCAnKGF1dG8tZGV0ZWN0KScsXG4gICAgICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uIHx8ICcoYXV0by1kZXRlY3QpJyxcbiAgICAgICAgICBwdWJsaWM6IG9wdGlvbnMucHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIGFjdGl2ZTogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTZWN1cml0eSB3YXJuaW5nIGZvciBTU0wgdmVyaWZpY2F0aW9uIGRpc2FibGVkXG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgb3JnYW5pemF0aW9uXG4gICAgICAgIGlmICghb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgdHlwZW9mIG9wdGlvbnMub3JnYW5pemF0aW9uICE9PSAnc3RyaW5nJyB8fCBvcHRpb25zLm9yZ2FuaXphdGlvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBvcmdhbml6YXRpb24gbmFtZScsIHsgcHJvdmlkZWQ6IG9wdGlvbnMub3JnYW5pemF0aW9uIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ09yZ2FuaXphdGlvbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycsICdvcmdhbml6YXRpb24nLCBvcHRpb25zLm9yZ2FuaXphdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICAgICAgaWYgKCFvcHRpb25zLmZpbGUgfHwgdHlwZW9mIG9wdGlvbnMuZmlsZSAhPT0gJ3N0cmluZycgfHwgb3B0aW9ucy5maWxlLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcsIHsgcHJvdmlkZWQ6IG9wdGlvbnMuZmlsZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdGaWxlIHBhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnLCAnZmlsZScsIG9wdGlvbnMuZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIGZpbGUgZXhpc3RzXG4gICAgICAgIHByaW50SW5mbygnVmFsaWRhdGluZyBwbHVnaW4gZmlsZScsIHsgcGF0aDogZmlsZVBhdGggfSk7XG5cbiAgICAgICAgaWYgKCFmaWxlRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIG5vdCBmb3VuZCcsIHsgcGF0aDogZmlsZVBhdGggfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgUGx1Z2luIGZpbGUgbm90IGZvdW5kOiAke2ZpbGVQYXRofWAsICdmaWxlJywgZmlsZVBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleHRlbnNpb25cbiAgICAgICAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlUGF0aCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGZpbGVFeHQgIT09ICcuemlwJykge1xuICAgICAgICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC56aXAnLCB7XG4gICAgICAgICAgICBwcm92aWRlZDogZmlsZUV4dCxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnLnppcCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgbXVzdCBiZSBhIFpJUCBhcmNoaXZlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZXQgZmlsZSBzdGF0c1xuICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKGZpbGVQYXRoKTtcbiAgICAgICAgY29uc3Qgc2l6ZUJ5dGVzID0gc3RhdHMuc2l6ZTtcbiAgICAgICAgY29uc3Qgc2l6ZUZvcm1hdHRlZCA9IGZvcm1hdEZpbGVTaXplKHNpemVCeXRlcyk7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQbHVnaW4gZmlsZSBmb3VuZCcsIHtcbiAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICBzaXplOiBzaXplRm9ybWF0dGVkLFxuICAgICAgICAgIG1vZGlmaWVkOiBuZXcgRGF0ZShzdGF0cy5tdGltZSkudG9Mb2NhbGVTdHJpbmcoKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZmlsZSBzaXplXG4gICAgICAgIGlmIChzaXplQnl0ZXMgPiBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1BsdWdpbiBmaWxlIHRvbyBsYXJnZScsIHtcbiAgICAgICAgICAgIHNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBtYXhpbXVtOiBmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgICBleGNlZWRlZEJ5OiBmb3JtYXRGaWxlU2l6ZShzaXplQnl0ZXMgLSBGSUxFX1NJWkVfTElNSVRTLlBMVUdJTiksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGBQbHVnaW4gZmlsZSBleGNlZWRzIG1heGltdW0gc2l6ZSBvZiAke2Zvcm1hdEZpbGVTaXplKEZJTEVfU0laRV9MSU1JVFMuUExVR0lOKX0gKGFjdHVhbDogJHtzaXplRm9ybWF0dGVkfSlgLFxuICAgICAgICAgICAgJ2ZpbGUuc2l6ZScsXG4gICAgICAgICAgICBzaXplQnl0ZXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGZpbGUgaXMgcmVhZGFibGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmcy5hY2Nlc3NTeW5jKGZpbGVQYXRoLCBmcy5jb25zdGFudHMuUl9PSyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignQ2Fubm90IHJlYWQgcGx1Z2luIGZpbGUnLCB7XG4gICAgICAgICAgICBwYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGx1Z2luIGZpbGUgaXMgbm90IHJlYWRhYmxlJywgJ2ZpbGUnLCBmaWxlUGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFN1Y2Nlc3MoJ1BsdWdpbiBmaWxlIHZhbGlkYXRlZCcpO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHZlcnNpb24gZm9ybWF0IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uUmVnZXggPSAvXlxcZCtcXC5cXGQrXFwuXFxkKygtW2EtekEtWjAtOS4tXSspPyQvO1xuICAgICAgICAgIGlmICghdmVyc2lvblJlZ2V4LnRlc3Qob3B0aW9ucy52ZXJzaW9uKSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdWZXJzaW9uIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdzZW1hbnRpYyB2ZXJzaW9uIChlLmcuLCAxLjAuMCwgMS4yLjMtYmV0YS4xKScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lIGZvcm1hdCBpZiBwcm92aWRlZFxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSB7XG4gICAgICAgICAgY29uc3QgbmFtZVJlZ2V4ID0gL15bYS16MC05LV0rJC87XG4gICAgICAgICAgaWYgKCFuYW1lUmVnZXgudGVzdChvcHRpb25zLm5hbWUpKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoJ1BsdWdpbiBuYW1lIGZvcm1hdCBtYXkgYmUgaW52YWxpZCcsIHtcbiAgICAgICAgICAgICAgcHJvdmlkZWQ6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICdsb3dlcmNhc2UgYWxwaGFudW1lcmljIHdpdGggZGFzaGVzIChlLmcuLCBteS1wbHVnaW4tbmFtZSknLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRHJ5IHJ1biBtb2RlXG4gICAgICAgIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0RyeSBSdW4gLSBWYWxpZGF0aW9uIENvbXBsZXRlJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdGaWxlIHZhbGlkYXRpb24gcGFzc2VkIC0gbm8gdXBsb2FkIHBlcmZvcm1lZCcpO1xuXG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICBGaWxlOiBmaWxlUGF0aCxcbiAgICAgICAgICAgIFNpemU6IHNpemVGb3JtYXR0ZWQsXG4gICAgICAgICAgICBPcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgTmFtZTogb3B0aW9ucy5uYW1lIHx8ICcod2lsbCBiZSBhdXRvLWRldGVjdGVkKScsXG4gICAgICAgICAgICBWZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gfHwgJyh3aWxsIGJlIGF1dG8tZGV0ZWN0ZWQpJyxcbiAgICAgICAgICAgIFB1YmxpYzogb3B0aW9ucy5wdWJsaWMgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgICBBY3RpdmU6IG9wdGlvbnMuYWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGF1dGhlbnRpY2F0ZWQgQVBJIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50KG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBjb25maWcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG5cbiAgICAgICAgLy8gQ3JlYXRlIGZvcm0gZGF0YVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignVXBsb2FkaW5nIFBsdWdpbicpO1xuICAgICAgICBwcmludEluZm8oJ1ByZXBhcmluZyB1cGxvYWQnLCB7XG4gICAgICAgICAgZmlsZTogcGF0aC5iYXNlbmFtZShmaWxlUGF0aCksXG4gICAgICAgICAgc2l6ZTogc2l6ZUZvcm1hdHRlZCxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBmcy5jcmVhdGVSZWFkU3RyZWFtKGZpbGVQYXRoKSwge1xuICAgICAgICAgIGZpbGVuYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL3ppcCcsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yZ2FuaXphdGlvbicsIG9wdGlvbnMub3JnYW5pemF0aW9uKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5uYW1lKSBmb3JtRGF0YS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICBpZiAob3B0aW9ucy52ZXJzaW9uKSBmb3JtRGF0YS5hcHBlbmQoJ3ZlcnNpb24nLCBvcHRpb25zLnZlcnNpb24pO1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ2lzUHVibGljJywgb3B0aW9ucy5wdWJsaWMgPyAndHJ1ZScgOiAnZmFsc2UnKTtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdpc0FjdGl2ZScsIG9wdGlvbnMuYWN0aXZlID8gJ3RydWUnIDogJ2ZhbHNlJyk7XG5cbiAgICAgICAgLy8gTWFrZSBBUEkgcmVxdWVzdFxuICAgICAgICBjb25zdCBlbmRwb2ludCA9IGNvbmZpZy5hcGkucGx1Z2luVXBsb2FkVXJsO1xuICAgICAgICBwcmludEluZm8oJ1VwbG9hZGluZyB0byBBUEknLCB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2VuZHBvaW50fWAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBjb25zdCBzcGlubmVyID0gb3JhKCdVcGxvYWRpbmcgcGx1Z2luLi4uJykuc3RhcnQoKTtcbiAgICAgICAgbGV0IHJhd1Jlc3BvbnNlOiBQbHVnaW5SZXNwb25zZTtcbiAgICAgICAgbGV0IGR1cmF0aW9uOiBudW1iZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICByYXdSZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0Rm9ybTxQbHVnaW5SZXNwb25zZT4oZW5kcG9pbnQsIGZvcm1EYXRhKTtcbiAgICAgICAgICBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQbHVnaW4gdXBsb2FkZWQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBzcGlubmVyLmZhaWwoJ1VwbG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBsdWdpbj4ocmF3UmVzcG9uc2UsICdwbHVnaW4nLCAnbmFtZScpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdObyB2YWxpZCBwbHVnaW4gZGF0YSBpbiByZXNwb25zZScsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlS2V5czogcmF3UmVzcG9uc2UgPyBPYmplY3Qua2V5cyhyYXdSZXNwb25zZSkgOiAnKG51bGwpJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQgLSBubyB2YWxpZCBwbHVnaW4gZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ1BsdWdpbiBVcGxvYWRlZCBTdWNjZXNzZnVsbHknKTtcblxuICAgICAgICAvLyBEaXNwbGF5IHBsdWdpbiBpbmZvcm1hdGlvblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnUGx1Z2luIElEJzogZ3JlZW4oYm9sZChyZXNwb25zZS5pZCkpLFxuICAgICAgICAgICdOYW1lJzogcmVzcG9uc2UubmFtZSxcbiAgICAgICAgICAnVmVyc2lvbic6IHJlc3BvbnNlLnZlcnNpb24sXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHJlc3BvbnNlLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnRGVzY3JpcHRpb24nOiByZXNwb25zZS5kZXNjcmlwdGlvbiB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRmlsZSBVUkwnOiByZXNwb25zZS5maWxlVXJsIHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdGaWxlIFNpemUnOiByZXNwb25zZS5maWxlU2l6ZSA/IGAkeyhyZXNwb25zZS5maWxlU2l6ZSAvIDEwMjQpLnRvRml4ZWQoMil9IEtCYCA6ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICAgICdDaGVja3N1bSc6IHJlc3BvbnNlLmNoZWNrc3VtID8gYCR7cmVzcG9uc2UuY2hlY2tzdW0uc3Vic3RyaW5nKDAsIDE2KX0uLi5gIDogJyhub3QgYXZhaWxhYmxlKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1B1YmxpYyc6IHJlc3BvbnNlLmlzUHVibGljID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdBY3RpdmUnOiByZXNwb25zZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHJlc3BvbnNlLmNyZWF0ZWRBdCB8fCAnKG5vdCBhdmFpbGFibGUpJyxcbiAgICAgICAgICAnVXBsb2FkZWQgQnknOiByZXNwb25zZS51cGxvYWRlZEJ5IHx8ICcobm90IGF2YWlsYWJsZSknLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdFeGVjdXRpb24gSUQnOiBleGVjdXRpb25JZCxcbiAgICAgICAgICAnVXBsb2FkIER1cmF0aW9uJzogYCR7KGR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgyKX1zYCxcbiAgICAgICAgICAnU3RhdHVzJzogZ3JlZW4oJ+KckyBTdWNjZXNzJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFByaW50IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXRhZGF0YSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ1BsdWdpbiBtZXRhZGF0YSBhdmFpbGFibGUnLCB7XG4gICAgICAgICAgICBrZXlzOiBPYmplY3Qua2V5cyhyZXNwb25zZS5tZXRhZGF0YSkubGVuZ3RoLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJpbnQgZGVwbG95bWVudCBsb2dzIFVSTCBpZiBhdmFpbGFibGVcbiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BbJ1gtUmVxdWVzdC1JZCddIHx8IHJlc3AucmVxdWVzdElkO1xuICAgICAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50SW5mbygnRGVwbG95bWVudCBsb2dzIGF2YWlsYWJsZScsIHtcbiAgICAgICAgICAgIHJlcXVlc3RJZCxcbiAgICAgICAgICAgIHVybDogYCR7Y29uZmlnLmFwaS5iYXNlVXJsfS9sb2dzLyR7cmVxdWVzdElkfWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBOZXh0IHN0ZXBzXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRJbmZvKCdOZXh0IHN0ZXBzJywge1xuICAgICAgICAgIHZpZXc6IGBVc2UgXCJnZXQtcGx1Z2luIC0taWQgJHtyZXNwb25zZS5pZH1cIiB0byB2aWV3IHBsdWdpbiBkZXRhaWxzYCxcbiAgICAgICAgICBsaXN0OiAnVXNlIFwibGlzdC1wbHVnaW5zXCIgdG8gc2VlIGFsbCBwbHVnaW5zJyxcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICd1cGxvYWQtcGx1Z2luJyxcbiAgICAgICAgICAgIGV4ZWN1dGlvbklkLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiBvcHRpb25zLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgICAgICAgIHB1YmxpYzogb3B0aW9ucy5wdWJsaWMsXG4gICAgICAgICAgICBhY3RpdmU6IG9wdGlvbnMuYWN0aXZlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
@@ -16,10 +16,6 @@ export declare const BANNER_OPTIONS: {
16
16
  * Output format types
17
17
  */
18
18
  export type OutputFormat = 'table' | 'json' | 'yaml' | 'csv';
19
- /**
20
- * Valid CDK commands
21
- */
22
- export type CdkCommand = 'synth' | 'deploy' | 'bootstrap';
23
19
  /**
24
20
  * Default timeouts (in milliseconds)
25
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"cli.constants.d.ts","sourceRoot":"","sources":["../../src/config/cli.constants.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAU,CAAC;AACnC,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;CAkBhB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5G;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAQD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,IAAI,CAON"}
1
+ {"version":3,"file":"cli.constants.d.ts","sourceRoot":"","sources":["../../src/config/cli.constants.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAU,CAAC;AACnC,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;CAkBhB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB5G;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAQD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,GACnC,IAAI,CAON"}
@@ -120,9 +120,14 @@ export function validateBoolean(value, fieldName) {
120
120
  * Validate and parse a numeric CLI parameter within optional bounds.
121
121
  */
122
122
  export function validateNumber(value, fieldName, min, max) {
123
- const num = typeof value === 'number' ? value : parseInt(value, 10);
124
- if (isNaN(num)) {
125
- throw new Error(`Invalid ${fieldName}: must be a number`);
123
+ // Reject partial parses ("12abc" -> 12) and non-integers ("5.9" -> 5) that
124
+ // `parseInt` would otherwise accept silently.
125
+ if (typeof value === 'string' && !/^-?\d+$/.test(value.trim())) {
126
+ throw new Error(`Invalid ${fieldName}: must be a whole number`);
127
+ }
128
+ const num = typeof value === 'number' ? value : parseInt(value.trim(), 10);
129
+ if (!Number.isInteger(num)) {
130
+ throw new Error(`Invalid ${fieldName}: must be a whole number`);
126
131
  }
127
132
  if (min !== undefined && num < min) {
128
133
  throw new Error(`Invalid ${fieldName}: must be >= ${min}`);
@@ -158,4 +163,4 @@ export function assertShellSafe(value, fieldName, opts = {}) {
158
163
  throw new Error(`${fieldName} contains unsafe characters${detail}`);
159
164
  }
160
165
  }
161
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvY2xpLmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV2QyxnRkFBZ0Y7QUFDaEYsaUZBQWlGO0FBQ2pGLDJFQUEyRTtBQUMzRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQy9DLENBQUM7QUFFekI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7QUFFNUU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLE1BQWU7SUFDckIsZ0JBQWdCLEVBQUUsUUFBaUI7SUFDbkMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUU7Q0FDcEMsQ0FBQztBQVlYOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFdBQVcsRUFBRSxDQUFDO0lBQ2QsWUFBWSxFQUFFLElBQUk7SUFDbEIsTUFBTSxFQUFFLE1BQU07Q0FDTixDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5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SSxLQUFLLENBQUMsV0FBVyxTQUFTLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFlBQVksR0FBRyxxQ0FBcUMsQ0FBQztBQUUzRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQXlCO0lBQ3BELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixLQUFLLDBDQUEwQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sWUFBWSxHQUFHLDZCQUE2QixDQUFDO0FBRW5ELE1BQU0sVUFBVSxlQUFlLENBQzdCLEtBQWEsRUFDYixTQUFpQixFQUNqQixPQUFrQyxFQUFFO0lBRXBDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLDhFQUE4RTtRQUM5RSw0REFBNEQ7UUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxTQUFTLDhCQUE4QixNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG4vLyBFU00gaGFzIG5vIHN5bmNocm9ub3VzIG5hbWVkIEpTT04gaW1wb3J0IChOb2RlIG9ubHkgZXhwb3NlcyBhIGRlZmF1bHQgZXhwb3J0LFxuLy8gYW5kIGltcG9ydGluZyBgLi4vLi4vcGFja2FnZS5qc29uYCB3b3VsZCBhbHNvIGZhbGwgb3V0c2lkZSBgcm9vdERpcjogc3JjYCksIHNvXG4vLyByZWFkIHRoZSB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uIGF0IGxvYWQgdGltZSByZWxhdGl2ZSB0byB0aGlzIG1vZHVsZS5cbmNvbnN0IHsgdmVyc2lvbiB9ID0gSlNPTi5wYXJzZShcbiAgcmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uLy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpLFxuKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuXG4vKipcbiAqIEFwcGxpY2F0aW9uIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfTkFNRSA9ICdwaXBlbGluZS1tYW5hZ2VyJztcbmV4cG9ydCBjb25zdCBBUFBfVkVSU0lPTiA9IHZlcnNpb247XG5leHBvcnQgY29uc3QgQVBQX0RFU0NSSVBUSU9OID0gJ0EgQ0xJIHRvb2wgdG8gbWFuYWdlIHBpcGVsaW5lcyBhbmQgcGx1Z2lucyc7XG5cbi8qKlxuICogQmFubmVyIGNvbmZpZ3VyYXRpb24gZm9yIENMSSBzdGFydHVwXG4gKi9cbmV4cG9ydCBjb25zdCBCQU5ORVJfT1BUSU9OUyA9IHtcbiAgZm9udDogJ0Rvb20nIGFzIGNvbnN0LFxuICBob3Jpem9udGFsTGF5b3V0OiAnZml0dGVkJyBhcyBjb25zdCxcbiAgZ2V0V2lkdGg6ICgpID0+IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgPz8gODAsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIE91dHB1dCBmb3JtYXQgdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgT3V0cHV0Rm9ybWF0ID0gJ3RhYmxlJyB8ICdqc29uJyB8ICd5YW1sJyB8ICdjc3YnO1xuXG4vKipcbiAqIFZhbGlkIENESyBjb21tYW5kc1xuICovXG5leHBvcnQgdHlwZSBDZGtDb21tYW5kID0gJ3N5bnRoJyB8ICdkZXBsb3knIHwgJ2Jvb3RzdHJhcCc7XG5cbi8qKlxuICogRGVmYXVsdCB0aW1lb3V0cyAoaW4gbWlsbGlzZWNvbmRzKVxuICovXG5leHBvcnQgY29uc3QgVElNRU9VVFMgPSB7XG4gIEhUVFBfUkVRVUVTVDogMzAwMDAsXG4gIENES19DT01NQU5EOiAwLFxuICBIRUFMVEhfQ0hFQ0s6IDUwMDAsXG4gIFVQTE9BRDogMzAwMDAwLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBGaWxlIHNpemUgbGltaXRzIChpbiBieXRlcylcbiAqL1xuZXhwb3J0IGNvbnN0IEZJTEVfU0laRV9MSU1JVFMgPSB7XG4gIFBMVUdJTjogNCAqIDEwMjQgKiAxMDI0ICogMTAyNCwgLy8gNEdCXG4gIFBJUEVMSU5FX1BST1BTOiAxMCAqIDEwMjQgKiAxMDI0LCAvLyAxME1CXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzXG4gKi9cbmV4cG9ydCBjb25zdCBFTlZfVkFSUyA9IHtcbiAgUExBVEZPUk1fVE9LRU46ICdQTEFURk9STV9UT0tFTicsXG4gIFBMQVRGT1JNX0JBU0VfVVJMOiAnUExBVEZPUk1fQkFTRV9VUkwnLFxuICBDTElfQ09ORklHX1BBVEg6ICdDTElfQ09ORklHX1BBVEgnLFxuICBUTFNfUkVKRUNUX1VOQVVUSE9SSVpFRDogJ1RMU19SRUpFQ1RfVU5BVVRIT1JJWkVEJyxcbiAgQVdTX1BST0ZJTEU6ICdBV1NfUFJPRklMRScsXG4gIEFXU19SRUdJT046ICdBV1NfUkVHSU9OJyxcbiAgREVCVUc6ICdERUJVRycsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIENoZWNrIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZWJ1Z01vZGUob3B0aW9ucz86IHsgZGVidWc/OiBib29sZWFuIH0pOiBib29sZWFuIHtcbiAgcmV0dXJuIG9wdGlvbnM/LmRlYnVnID8/IHByb2Nlc3MuZW52LkRFQlVHID09PSAndHJ1ZSc7XG59XG5cbi8qKlxuICogRm9ybWF0IGZpbGUgc2l6ZSBmb3IgZGlzcGxheVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gIGlmIChieXRlcyA9PT0gMCkgcmV0dXJuICcwIEInO1xuICBjb25zdCB1bml0cyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xuICBjb25zdCBrID0gMTAyNDtcbiAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuICByZXR1cm4gYCR7KGJ5dGVzIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMil9ICR7dW5pdHNbaV19YDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgZHVyYXRpb24gZm9yIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKG1zOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobXMgPCAxMDAwKSByZXR1cm4gYCR7bXN9bXNgO1xuICBpZiAobXMgPCA2MDAwMCkgcmV0dXJuIGAkeyhtcyAvIDEwMDApLnRvRml4ZWQoMil9c2A7XG4gIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKG1zIC8gNjAwMDApO1xuICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gKChtcyAlIDYwMDAwKSAvIDEwMDApLnRvRml4ZWQoMCk7XG4gIHJldHVybiBgJHttaW51dGVzfW0gJHtyZW1haW5pbmdTZWNvbmRzfXNgO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGNyeXB0b2dyYXBoaWNhbGx5IHJhbmRvbSBleGVjdXRpb24gSUQgZm9yIHJlcXVlc3QgdHJhY2luZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRXhlY3V0aW9uSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKDQpLnRvU3RyaW5nKCdoZXgnKS50b1VwcGVyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFRhYmxlIGRpc3BsYXkgb3B0aW9ucyAoYm94LWRyYXdpbmcgY2hhcmFjdGVycylcbiAqL1xuZXhwb3J0IGNvbnN0IFRBQkxFX09QVElPTlMgPSB7XG4gIGJvcmRlcjoge1xuICAgIHRvcEJvZHk6ICfilIAnLFxuICAgIHRvcEpvaW46ICfilKwnLFxuICAgIHRvcExlZnQ6ICfilIwnLFxuICAgIHRvcFJpZ2h0OiAn4pSQJyxcbiAgICBib3R0b21Cb2R5OiAn4pSAJyxcbiAgICBib3R0b21Kb2luOiAn4pS0JyxcbiAgICBib3R0b21MZWZ0OiAn4pSUJyxcbiAgICBib3R0b21SaWdodDogJ+KUmCcsXG4gICAgYm9keUxlZnQ6ICfilIInLFxuICAgIGJvZHlSaWdodDogJ+KUgicsXG4gICAgYm9keUpvaW46ICfilIInLFxuICAgIGpvaW5Cb2R5OiAn4pSAJyxcbiAgICBqb2luTGVmdDogJ+KUnCcsXG4gICAgam9pblJpZ2h0OiAn4pSkJyxcbiAgICBqb2luSm9pbjogJ+KUvCcsXG4gIH0sXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFZhbGlkYXRlIGJvb2xlYW4gc3RyaW5nIGZyb20gQ0xJIGlucHV0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBpZiAoWyd0cnVlJywgJzEnLCAneWVzJywgJ3knXS5pbmNsdWRlcyhub3JtYWxpemVkKSkgcmV0dXJuIHRydWU7XG4gIGlmIChbJ2ZhbHNlJywgJzAnLCAnbm8nLCAnbiddLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSByZXR1cm4gZmFsc2U7XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBib29sZWFuIHZhbHVlIGZvciAke2ZpZWxkTmFtZX06IFwiJHt2YWx1ZX1cIi4gVXNlIHRydWUvZmFsc2UsIHllcy9ubywgb3IgMS8wLmApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGFuZCBwYXJzZSBhIG51bWVyaWMgQ0xJIHBhcmFtZXRlciB3aXRoaW4gb3B0aW9uYWwgYm91bmRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlciwgZmllbGROYW1lOiBzdHJpbmcsIG1pbj86IG51bWJlciwgbWF4PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgbnVtID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgaWYgKGlzTmFOKG51bSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZE5hbWV9OiBtdXN0IGJlIGEgbnVtYmVyYCk7XG4gIH1cbiAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIG51bSA8IG1pbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke2ZpZWxkTmFtZX06IG11c3QgYmUgPj0gJHttaW59YCk7XG4gIH1cbiAgaWYgKG1heCAhPT0gdW5kZWZpbmVkICYmIG51bSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCAke2ZpZWxkTmFtZX06IG11c3QgYmUgPD0gJHttYXh9YCk7XG4gIH1cbiAgcmV0dXJuIG51bTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBzb3J0IHBhcmFtZXRlciBmb3JtYXQgKGUuZy4sIFwiY3JlYXRlZEF0OmRlc2NcIikuXG4gKiBSZXR1cm5zIHRoZSB2YWxpZGF0ZWQgc29ydCBzdHJpbmcsIG9yIHRoZSBkZWZhdWx0IGlmIGludmFsaWQuXG4gKi9cbmNvbnN0IFNPUlRfUEFUVEVSTiA9IC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKjooYXNjfGRlc2MpJC87XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNvcnQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICghU09SVF9QQVRURVJOLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHNvcnQgZm9ybWF0OiBcIiR7dmFsdWV9XCIuIEV4cGVjdGVkIFwiZmllbGQ6YXNjXCIgb3IgXCJmaWVsZDpkZXNjXCIuYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFJlamVjdCBzdHJpbmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMuXG4gKiBVc2VkIHRvIHNhbml0aXplIENMSSBpbnB1dHMgYmVmb3JlIHBhc3NpbmcgdG8gc2hlbGwgY29tbWFuZHMuXG4gKi9cbmNvbnN0IFNIRUxMX1VOU0FGRSA9IC9bOyZ8YCQoKXt9W1xcXTw+ISN+Kj9cXFxcXFxuXFxyXS87XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTaGVsbFNhZmUoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGZpZWxkTmFtZTogc3RyaW5nLFxuICBvcHRzOiB7IHJlZGFjdFZhbHVlPzogYm9vbGVhbiB9ID0ge30sXG4pOiB2b2lkIHtcbiAgaWYgKFNIRUxMX1VOU0FGRS50ZXN0KHZhbHVlKSkge1xuICAgIC8vIGByZWRhY3RWYWx1ZWAgaXMgZm9yIHNlY3JldHMgKHRva2VucywgcGFzc3dvcmRzKSDigJQgbmV2ZXIgZWNobyB0aGUgb2ZmZW5kaW5nXG4gICAgLy8gdmFsdWUgaW50byBhbiBlcnJvci9sb2cgbGluZSB3aGVuIHRoZSBmaWVsZCBpcyBzZW5zaXRpdmUuXG4gICAgY29uc3QgZGV0YWlsID0gb3B0cy5yZWRhY3RWYWx1ZSA/ICcnIDogYDogXCIke3ZhbHVlfVwiYDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZmllbGROYW1lfSBjb250YWlucyB1bnNhZmUgY2hhcmFjdGVycyR7ZGV0YWlsfWApO1xuICB9XG59XG4iXX0=
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvY2xpLmNvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV2QyxnRkFBZ0Y7QUFDaEYsaUZBQWlGO0FBQ2pGLDJFQUEyRTtBQUMzRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsWUFBWSxDQUFDLElBQUksR0FBRyxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQy9DLENBQUM7QUFFekI7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUNuQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsNENBQTRDLENBQUM7QUFFNUU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDNUIsSUFBSSxFQUFFLE1BQWU7SUFDckIsZ0JBQWdCLEVBQUUsUUFBaUI7SUFDbkMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUU7Q0FDcEMsQ0FBQztBQU9YOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLFlBQVksRUFBRSxLQUFLO0lBQ25CLFdBQVcsRUFBRSxDQUFDO0lBQ2QsWUFBWSxFQUFFLElBQUk7SUFDbEIsTUFBTSxFQUFFLE1BQU07Q0FDTixDQUFDO0FBRVg7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRztJQUM5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Q0FBQyxDQUFDO0lBQ3RFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuXG4vLyBFU00gaGFzIG5vIHN5bmNocm9ub3VzIG5hbWVkIEpTT04gaW1wb3J0IChOb2RlIG9ubHkgZXhwb3NlcyBhIGRlZmF1bHQgZXhwb3J0LFxuLy8gYW5kIGltcG9ydGluZyBgLi4vLi4vcGFja2FnZS5qc29uYCB3b3VsZCBhbHNvIGZhbGwgb3V0c2lkZSBgcm9vdERpcjogc3JjYCksIHNvXG4vLyByZWFkIHRoZSB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uIGF0IGxvYWQgdGltZSByZWxhdGl2ZSB0byB0aGlzIG1vZHVsZS5cbmNvbnN0IHsgdmVyc2lvbiB9ID0gSlNPTi5wYXJzZShcbiAgcmVhZEZpbGVTeW5jKG5ldyBVUkwoJy4uLy4uL3BhY2thZ2UuanNvbicsIGltcG9ydC5tZXRhLnVybCksICd1dGYtOCcpLFxuKSBhcyB7IHZlcnNpb246IHN0cmluZyB9O1xuXG4vKipcbiAqIEFwcGxpY2F0aW9uIG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfTkFNRSA9ICdwaXBlbGluZS1tYW5hZ2VyJztcbmV4cG9ydCBjb25zdCBBUFBfVkVSU0lPTiA9IHZlcnNpb247XG5leHBvcnQgY29uc3QgQVBQX0RFU0NSSVBUSU9OID0gJ0EgQ0xJIHRvb2wgdG8gbWFuYWdlIHBpcGVsaW5lcyBhbmQgcGx1Z2lucyc7XG5cbi8qKlxuICogQmFubmVyIGNvbmZpZ3VyYXRpb24gZm9yIENMSSBzdGFydHVwXG4gKi9cbmV4cG9ydCBjb25zdCBCQU5ORVJfT1BUSU9OUyA9IHtcbiAgZm9udDogJ0Rvb20nIGFzIGNvbnN0LFxuICBob3Jpem9udGFsTGF5b3V0OiAnZml0dGVkJyBhcyBjb25zdCxcbiAgZ2V0V2lkdGg6ICgpID0+IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgPz8gODAsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIE91dHB1dCBmb3JtYXQgdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgT3V0cHV0Rm9ybWF0ID0gJ3RhYmxlJyB8ICdqc29uJyB8ICd5YW1sJyB8ICdjc3YnO1xuXG4vKipcbiAqIERlZmF1bHQgdGltZW91dHMgKGluIG1pbGxpc2Vjb25kcylcbiAqL1xuZXhwb3J0IGNvbnN0IFRJTUVPVVRTID0ge1xuICBIVFRQX1JFUVVFU1Q6IDMwMDAwLFxuICBDREtfQ09NTUFORDogMCxcbiAgSEVBTFRIX0NIRUNLOiA1MDAwLFxuICBVUExPQUQ6IDMwMDAwMCxcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRmlsZSBzaXplIGxpbWl0cyAoaW4gYnl0ZXMpXG4gKi9cbmV4cG9ydCBjb25zdCBGSUxFX1NJWkVfTElNSVRTID0ge1xuICBQTFVHSU46IDQgKiAxMDI0ICogMTAyNCAqIDEwMjQsIC8vIDRHQlxuICBQSVBFTElORV9QUk9QUzogMTAgKiAxMDI0ICogMTAyNCwgLy8gMTBNQlxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lc1xuICovXG5leHBvcnQgY29uc3QgRU5WX1ZBUlMgPSB7XG4gIFBMQVRGT1JNX1RPS0VOOiAnUExBVEZPUk1fVE9LRU4nLFxuICBQTEFURk9STV9CQVNFX1VSTDogJ1BMQVRGT1JNX0JBU0VfVVJMJyxcbiAgQ0xJX0NPTkZJR19QQVRIOiAnQ0xJX0NPTkZJR19QQVRIJyxcbiAgVExTX1JFSkVDVF9VTkFVVEhPUklaRUQ6ICdUTFNfUkVKRUNUX1VOQVVUSE9SSVpFRCcsXG4gIEFXU19QUk9GSUxFOiAnQVdTX1BST0ZJTEUnLFxuICBBV1NfUkVHSU9OOiAnQVdTX1JFR0lPTicsXG4gIERFQlVHOiAnREVCVUcnLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDaGVjayBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVidWdNb2RlKG9wdGlvbnM/OiB7IGRlYnVnPzogYm9vbGVhbiB9KTogYm9vbGVhbiB7XG4gIHJldHVybiBvcHRpb25zPy5kZWJ1ZyA/PyBwcm9jZXNzLmVudi5ERUJVRyA9PT0gJ3RydWUnO1xufVxuXG4vKipcbiAqIEZvcm1hdCBmaWxlIHNpemUgZm9yIGRpc3BsYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAnMCBCJztcbiAgY29uc3QgdW5pdHMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcbiAgY29uc3QgayA9IDEwMjQ7XG4gIGNvbnN0IGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGspKTtcbiAgcmV0dXJuIGAkeyhieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKDIpfSAke3VuaXRzW2ldfWA7XG59XG5cbi8qKlxuICogRm9ybWF0IGR1cmF0aW9uIGZvciBkaXNwbGF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREdXJhdGlvbihtczogbnVtYmVyKTogc3RyaW5nIHtcbiAgaWYgKG1zIDwgMTAwMCkgcmV0dXJuIGAke21zfW1zYDtcbiAgaWYgKG1zIDwgNjAwMDApIHJldHVybiBgJHsobXMgLyAxMDAwKS50b0ZpeGVkKDIpfXNgO1xuICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihtcyAvIDYwMDAwKTtcbiAgY29uc3QgcmVtYWluaW5nU2Vjb25kcyA9ICgobXMgJSA2MDAwMCkgLyAxMDAwKS50b0ZpeGVkKDApO1xuICByZXR1cm4gYCR7bWludXRlc31tICR7cmVtYWluaW5nU2Vjb25kc31zYDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBjcnlwdG9ncmFwaGljYWxseSByYW5kb20gZXhlY3V0aW9uIElEIGZvciByZXF1ZXN0IHRyYWNpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk6IHN0cmluZyB7XG4gIHJldHVybiByYW5kb21CeXRlcyg0KS50b1N0cmluZygnaGV4JykudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBUYWJsZSBkaXNwbGF5IG9wdGlvbnMgKGJveC1kcmF3aW5nIGNoYXJhY3RlcnMpXG4gKi9cbmV4cG9ydCBjb25zdCBUQUJMRV9PUFRJT05TID0ge1xuICBib3JkZXI6IHtcbiAgICB0b3BCb2R5OiAn4pSAJyxcbiAgICB0b3BKb2luOiAn4pSsJyxcbiAgICB0b3BMZWZ0OiAn4pSMJyxcbiAgICB0b3BSaWdodDogJ+KUkCcsXG4gICAgYm90dG9tQm9keTogJ+KUgCcsXG4gICAgYm90dG9tSm9pbjogJ+KUtCcsXG4gICAgYm90dG9tTGVmdDogJ+KUlCcsXG4gICAgYm90dG9tUmlnaHQ6ICfilJgnLFxuICAgIGJvZHlMZWZ0OiAn4pSCJyxcbiAgICBib2R5UmlnaHQ6ICfilIInLFxuICAgIGJvZHlKb2luOiAn4pSCJyxcbiAgICBqb2luQm9keTogJ+KUgCcsXG4gICAgam9pbkxlZnQ6ICfilJwnLFxuICAgIGpvaW5SaWdodDogJ+KUpCcsXG4gICAgam9pbkpvaW46ICfilLwnLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBWYWxpZGF0ZSBib29sZWFuIHN0cmluZyBmcm9tIENMSSBpbnB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCb29sZWFuKHZhbHVlOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgaWYgKFsndHJ1ZScsICcxJywgJ3llcycsICd5J10uaW5jbHVkZXMobm9ybWFsaXplZCkpIHJldHVybiB0cnVlO1xuICBpZiAoWydmYWxzZScsICcwJywgJ25vJywgJ24nXS5pbmNsdWRlcyhub3JtYWxpemVkKSkgcmV0dXJuIGZhbHNlO1xuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYm9vbGVhbiB2YWx1ZSBmb3IgJHtmaWVsZE5hbWV9OiBcIiR7dmFsdWV9XCIuIFVzZSB0cnVlL2ZhbHNlLCB5ZXMvbm8sIG9yIDEvMC5gKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgcGFyc2UgYSBudW1lcmljIENMSSBwYXJhbWV0ZXIgd2l0aGluIG9wdGlvbmFsIGJvdW5kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIGZpZWxkTmFtZTogc3RyaW5nLCBtaW4/OiBudW1iZXIsIG1heD86IG51bWJlcik6IG51bWJlciB7XG4gIC8vIFJlamVjdCBwYXJ0aWFsIHBhcnNlcyAoXCIxMmFiY1wiIC0+IDEyKSBhbmQgbm9uLWludGVnZXJzIChcIjUuOVwiIC0+IDUpIHRoYXRcbiAgLy8gYHBhcnNlSW50YCB3b3VsZCBvdGhlcndpc2UgYWNjZXB0IHNpbGVudGx5LlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhL14tP1xcZCskLy50ZXN0KHZhbHVlLnRyaW0oKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZE5hbWV9OiBtdXN0IGJlIGEgd2hvbGUgbnVtYmVyYCk7XG4gIH1cbiAgY29uc3QgbnVtID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IHZhbHVlIDogcGFyc2VJbnQodmFsdWUudHJpbSgpLCAxMCk7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkICR7ZmllbGROYW1lfTogbXVzdCBiZSBhIHdob2xlIG51bWJlcmApO1xuICB9XG4gIGlmIChtaW4gIT09IHVuZGVmaW5lZCAmJiBudW0gPCBtaW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZE5hbWV9OiBtdXN0IGJlID49ICR7bWlufWApO1xuICB9XG4gIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBudW0gPiBtYXgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtmaWVsZE5hbWV9OiBtdXN0IGJlIDw9ICR7bWF4fWApO1xuICB9XG4gIHJldHVybiBudW07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc29ydCBwYXJhbWV0ZXIgZm9ybWF0IChlLmcuLCBcImNyZWF0ZWRBdDpkZXNjXCIpLlxuICogUmV0dXJucyB0aGUgdmFsaWRhdGVkIHNvcnQgc3RyaW5nLCBvciB0aGUgZGVmYXVsdCBpZiBpbnZhbGlkLlxuICovXG5jb25zdCBTT1JUX1BBVFRFUk4gPSAvXlthLXpBLVpfXVthLXpBLVowLTlfXSo6KGFzY3xkZXNjKSQvO1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTb3J0KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoIVNPUlRfUEFUVEVSTi50ZXN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzb3J0IGZvcm1hdDogXCIke3ZhbHVlfVwiLiBFeHBlY3RlZCBcImZpZWxkOmFzY1wiIG9yIFwiZmllbGQ6ZGVzY1wiLmApO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBSZWplY3Qgc3RyaW5ncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLlxuICogVXNlZCB0byBzYW5pdGl6ZSBDTEkgaW5wdXRzIGJlZm9yZSBwYXNzaW5nIHRvIHNoZWxsIGNvbW1hbmRzLlxuICovXG5jb25zdCBTSEVMTF9VTlNBRkUgPSAvWzsmfGAkKCl7fVtcXF08PiEjfio/XFxcXFxcblxccl0vO1xuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2hlbGxTYWZlKFxuICB2YWx1ZTogc3RyaW5nLFxuICBmaWVsZE5hbWU6IHN0cmluZyxcbiAgb3B0czogeyByZWRhY3RWYWx1ZT86IGJvb2xlYW4gfSA9IHt9LFxuKTogdm9pZCB7XG4gIGlmIChTSEVMTF9VTlNBRkUudGVzdCh2YWx1ZSkpIHtcbiAgICAvLyBgcmVkYWN0VmFsdWVgIGlzIGZvciBzZWNyZXRzICh0b2tlbnMsIHBhc3N3b3Jkcykg4oCUIG5ldmVyIGVjaG8gdGhlIG9mZmVuZGluZ1xuICAgIC8vIHZhbHVlIGludG8gYW4gZXJyb3IvbG9nIGxpbmUgd2hlbiB0aGUgZmllbGQgaXMgc2Vuc2l0aXZlLlxuICAgIGNvbnN0IGRldGFpbCA9IG9wdHMucmVkYWN0VmFsdWUgPyAnJyA6IGA6IFwiJHt2YWx1ZX1cImA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2ZpZWxkTmFtZX0gY29udGFpbnMgdW5zYWZlIGNoYXJhY3RlcnMke2RldGFpbH1gKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export declare const handler: () => Promise<void>;
2
+ //# sourceMappingURL=token-renew-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-renew-handler.d.ts","sourceRoot":"","sources":["../../src/lambda/token-renew-handler.ts"],"names":[],"mappings":"AAwCA,eAAO,MAAM,OAAO,QAAa,OAAO,CAAC,IAAI,CA4C5C,CAAC"}
@@ -0,0 +1,75 @@
1
+ // Copyright 2026 Pipeline Builder Contributors
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /**
4
+ * Lambda handler that re-mints the platform JWT in Secrets Manager so it never
5
+ * lapses. Deployed + scheduled by `pipeline-manager store-token` (default once a
6
+ * day). Rather than re-implementing the token flow, it is a thin orchestrator
7
+ * that reuses the tested CLI — each run:
8
+ *
9
+ * 1. Point the `@pipeline-builder` npm scope at public npm.
10
+ * 2. Download `@pipeline-builder/pipeline-manager` from npm into /tmp.
11
+ * 3. Read the current platform JWT from the secret.
12
+ * 4. Run `pipeline-manager store-token`, which mints a fresh long-lived token
13
+ * via /api/user/generate-token and writes it back to the same secret.
14
+ *
15
+ * `/tmp` is the only writable path in Lambda, so npm's HOME/cache/prefix all live
16
+ * there. `--no-schedule` is passed so store-token does NOT redeploy this stack
17
+ * (which would recurse).
18
+ *
19
+ * Env: PLATFORM_SECRET_NAME, PLATFORM_BASE_URL, RENEW_DAYS (default 30),
20
+ * PIPELINE_MANAGER_VERSION (default "latest"), PLATFORM_VERIFY_SSL ("false"
21
+ * to disable TLS verification).
22
+ */
23
+ import { execFileSync } from 'node:child_process';
24
+ import { mkdirSync, writeFileSync } from 'node:fs';
25
+ import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
26
+ const PM_PACKAGE = '@pipeline-builder/pipeline-manager';
27
+ const TMP = '/tmp';
28
+ const PM_PREFIX = `${TMP}/pm`;
29
+ const NPM_CACHE = `${TMP}/.npm`;
30
+ const NPMRC = `${TMP}/.npmrc`;
31
+ const CLI = `${PM_PREFIX}/node_modules/${PM_PACKAGE}/dist/cli.js`;
32
+ function required(name) {
33
+ const v = process.env[name];
34
+ if (!v)
35
+ throw new Error(`${name} environment variable is required`);
36
+ return v;
37
+ }
38
+ export const handler = async () => {
39
+ const secretName = required('PLATFORM_SECRET_NAME');
40
+ const platformUrl = required('PLATFORM_BASE_URL').replace(/\/$/, '');
41
+ const days = process.env.RENEW_DAYS || '30';
42
+ const version = process.env.PIPELINE_MANAGER_VERSION || 'latest';
43
+ const region = process.env.AWS_REGION || 'us-east-1';
44
+ // npm in Lambda can only write under /tmp; HOME/cache/userconfig point there.
45
+ const npmEnv = { ...process.env, HOME: TMP, npm_config_cache: NPM_CACHE };
46
+ // 1. Scope config: resolve @pipeline-builder from public npm regardless of any
47
+ // inherited registry. Written as a userconfig file (env mapping of scoped
48
+ // keys is unreliable).
49
+ writeFileSync(NPMRC, '@pipeline-builder:registry=https://registry.npmjs.org/\n');
50
+ // 2. Download pipeline-manager into /tmp.
51
+ mkdirSync(PM_PREFIX, { recursive: true });
52
+ // eslint-disable-next-line no-console
53
+ console.log(JSON.stringify({ level: 'INFO', msg: 'installing pipeline-manager', package: `${PM_PACKAGE}@${version}` }));
54
+ execFileSync('npm', ['install', '--prefix', PM_PREFIX, '--no-audit', '--no-fund', '--userconfig', NPMRC, `${PM_PACKAGE}@${version}`], { env: npmEnv, stdio: 'inherit' });
55
+ // 3. Read the current platform JWT — it authenticates the renewal request.
56
+ const sm = new SecretsManagerClient({ region });
57
+ const current = await sm.send(new GetSecretValueCommand({ SecretId: secretName }));
58
+ if (!current.SecretString)
59
+ throw new Error(`Secret "${secretName}" is empty`);
60
+ const jwt = JSON.parse(current.SecretString).password;
61
+ if (!jwt)
62
+ throw new Error(`Secret "${secretName}" missing password (JWT)`);
63
+ // 4. Run store-token. --no-schedule: do NOT redeploy this stack (avoids
64
+ // recursion). It writes the renewed secret via the Lambda role's creds.
65
+ const args = ['store-token', '--no-schedule', '--secret-name', secretName, '--region', region, '--days', days];
66
+ if (process.env.PLATFORM_VERIFY_SSL === 'false')
67
+ args.push('--no-verify-ssl');
68
+ execFileSync('node', [CLI, ...args], {
69
+ env: { ...npmEnv, PLATFORM_TOKEN: jwt, PLATFORM_BASE_URL: platformUrl },
70
+ stdio: 'inherit',
71
+ });
72
+ // eslint-disable-next-line no-console
73
+ console.log(JSON.stringify({ level: 'INFO', msg: 'platform token renewed', secretName }));
74
+ };
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tcmVuZXctaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvdG9rZW4tcmVuZXctaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlGLE1BQU0sVUFBVSxHQUFHLG9DQUFvQyxDQUFDO0FBQ3hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNuQixNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzlCLE1BQU0sU0FBUyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFDaEMsTUFBTSxLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztBQUM5QixNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsaUJBQWlCLFVBQVUsY0FBYyxDQUFDO0FBRWxFLFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDNUIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixJQUFJLENBQUMsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7SUFDcEUsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEtBQUssSUFBbUIsRUFBRTtJQUMvQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQztJQUM1QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFFBQVEsQ0FBQztJQUNqRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUM7SUFFckQsOEVBQThFO0lBQzlFLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFFMUUsK0VBQStFO0lBQy9FLDZFQUE2RTtJQUM3RSwwQkFBMEI7SUFDMUIsYUFBYSxDQUFDLEtBQUssRUFBRSwwREFBMEQsQ0FBQyxDQUFDO0lBRWpGLDBDQUEwQztJQUMxQyxTQUFTLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsc0NBQXNDO0lBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLDZCQUE2QixFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsSUFBSSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4SCxZQUFZLENBQ1YsS0FBSyxFQUNMLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsVUFBVSxJQUFJLE9BQU8sRUFBRSxDQUFDLEVBQ2hILEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQ2xDLENBQUM7SUFFRiwyRUFBMkU7SUFDM0UsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUkscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ25GLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxVQUFVLFlBQVksQ0FBQyxDQUFDO0lBQzlFLE1BQU0sR0FBRyxHQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBMkIsQ0FBQyxRQUFRLENBQUM7SUFDakYsSUFBSSxDQUFDLEdBQUc7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsVUFBVSwwQkFBMEIsQ0FBQyxDQUFDO0lBRTNFLHdFQUF3RTtJQUN4RSwyRUFBMkU7SUFDM0UsTUFBTSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0csSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixLQUFLLE9BQU87UUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFOUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFO1FBQ25DLEdBQUcsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFO1FBQ3ZFLEtBQUssRUFBRSxTQUFTO0tBQ2pCLENBQUMsQ0FBQztJQUVILHNDQUFzQztJQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogTGFtYmRhIGhhbmRsZXIgdGhhdCByZS1taW50cyB0aGUgcGxhdGZvcm0gSldUIGluIFNlY3JldHMgTWFuYWdlciBzbyBpdCBuZXZlclxuICogbGFwc2VzLiBEZXBsb3llZCArIHNjaGVkdWxlZCBieSBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmAgKGRlZmF1bHQgb25jZSBhXG4gKiBkYXkpLiBSYXRoZXIgdGhhbiByZS1pbXBsZW1lbnRpbmcgdGhlIHRva2VuIGZsb3csIGl0IGlzIGEgdGhpbiBvcmNoZXN0cmF0b3JcbiAqIHRoYXQgcmV1c2VzIHRoZSB0ZXN0ZWQgQ0xJIOKAlCBlYWNoIHJ1bjpcbiAqXG4gKiAgIDEuIFBvaW50IHRoZSBgQHBpcGVsaW5lLWJ1aWxkZXJgIG5wbSBzY29wZSBhdCBwdWJsaWMgbnBtLlxuICogICAyLiBEb3dubG9hZCBgQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtbWFuYWdlcmAgZnJvbSBucG0gaW50byAvdG1wLlxuICogICAzLiBSZWFkIHRoZSBjdXJyZW50IHBsYXRmb3JtIEpXVCBmcm9tIHRoZSBzZWNyZXQuXG4gKiAgIDQuIFJ1biBgcGlwZWxpbmUtbWFuYWdlciBzdG9yZS10b2tlbmAsIHdoaWNoIG1pbnRzIGEgZnJlc2ggbG9uZy1saXZlZCB0b2tlblxuICogICAgICB2aWEgL2FwaS91c2VyL2dlbmVyYXRlLXRva2VuIGFuZCB3cml0ZXMgaXQgYmFjayB0byB0aGUgc2FtZSBzZWNyZXQuXG4gKlxuICogYC90bXBgIGlzIHRoZSBvbmx5IHdyaXRhYmxlIHBhdGggaW4gTGFtYmRhLCBzbyBucG0ncyBIT01FL2NhY2hlL3ByZWZpeCBhbGwgbGl2ZVxuICogdGhlcmUuIGAtLW5vLXNjaGVkdWxlYCBpcyBwYXNzZWQgc28gc3RvcmUtdG9rZW4gZG9lcyBOT1QgcmVkZXBsb3kgdGhpcyBzdGFja1xuICogKHdoaWNoIHdvdWxkIHJlY3Vyc2UpLlxuICpcbiAqIEVudjogUExBVEZPUk1fU0VDUkVUX05BTUUsIFBMQVRGT1JNX0JBU0VfVVJMLCBSRU5FV19EQVlTIChkZWZhdWx0IDMwKSxcbiAqICAgICAgUElQRUxJTkVfTUFOQUdFUl9WRVJTSU9OIChkZWZhdWx0IFwibGF0ZXN0XCIpLCBQTEFURk9STV9WRVJJRllfU1NMIChcImZhbHNlXCJcbiAqICAgICAgdG8gZGlzYWJsZSBUTFMgdmVyaWZpY2F0aW9uKS5cbiAqL1xuaW1wb3J0IHsgZXhlY0ZpbGVTeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgU2VjcmV0c01hbmFnZXJDbGllbnQsIEdldFNlY3JldFZhbHVlQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXInO1xuXG5jb25zdCBQTV9QQUNLQUdFID0gJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLW1hbmFnZXInO1xuY29uc3QgVE1QID0gJy90bXAnO1xuY29uc3QgUE1fUFJFRklYID0gYCR7VE1QfS9wbWA7XG5jb25zdCBOUE1fQ0FDSEUgPSBgJHtUTVB9Ly5ucG1gO1xuY29uc3QgTlBNUkMgPSBgJHtUTVB9Ly5ucG1yY2A7XG5jb25zdCBDTEkgPSBgJHtQTV9QUkVGSVh9L25vZGVfbW9kdWxlcy8ke1BNX1BBQ0tBR0V9L2Rpc3QvY2xpLmpzYDtcblxuZnVuY3Rpb24gcmVxdWlyZWQobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgdiA9IHByb2Nlc3MuZW52W25hbWVdO1xuICBpZiAoIXYpIHRocm93IG5ldyBFcnJvcihgJHtuYW1lfSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZGApO1xuICByZXR1cm4gdjtcbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHNlY3JldE5hbWUgPSByZXF1aXJlZCgnUExBVEZPUk1fU0VDUkVUX05BTUUnKTtcbiAgY29uc3QgcGxhdGZvcm1VcmwgPSByZXF1aXJlZCgnUExBVEZPUk1fQkFTRV9VUkwnKS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICBjb25zdCBkYXlzID0gcHJvY2Vzcy5lbnYuUkVORVdfREFZUyB8fCAnMzAnO1xuICBjb25zdCB2ZXJzaW9uID0gcHJvY2Vzcy5lbnYuUElQRUxJTkVfTUFOQUdFUl9WRVJTSU9OIHx8ICdsYXRlc3QnO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OIHx8ICd1cy1lYXN0LTEnO1xuXG4gIC8vIG5wbSBpbiBMYW1iZGEgY2FuIG9ubHkgd3JpdGUgdW5kZXIgL3RtcDsgSE9NRS9jYWNoZS91c2VyY29uZmlnIHBvaW50IHRoZXJlLlxuICBjb25zdCBucG1FbnYgPSB7IC4uLnByb2Nlc3MuZW52LCBIT01FOiBUTVAsIG5wbV9jb25maWdfY2FjaGU6IE5QTV9DQUNIRSB9O1xuXG4gIC8vIDEuIFNjb3BlIGNvbmZpZzogcmVzb2x2ZSBAcGlwZWxpbmUtYnVpbGRlciBmcm9tIHB1YmxpYyBucG0gcmVnYXJkbGVzcyBvZiBhbnlcbiAgLy8gICAgaW5oZXJpdGVkIHJlZ2lzdHJ5LiBXcml0dGVuIGFzIGEgdXNlcmNvbmZpZyBmaWxlIChlbnYgbWFwcGluZyBvZiBzY29wZWRcbiAgLy8gICAga2V5cyBpcyB1bnJlbGlhYmxlKS5cbiAgd3JpdGVGaWxlU3luYyhOUE1SQywgJ0BwaXBlbGluZS1idWlsZGVyOnJlZ2lzdHJ5PWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL1xcbicpO1xuXG4gIC8vIDIuIERvd25sb2FkIHBpcGVsaW5lLW1hbmFnZXIgaW50byAvdG1wLlxuICBta2RpclN5bmMoUE1fUFJFRklYLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBsZXZlbDogJ0lORk8nLCBtc2c6ICdpbnN0YWxsaW5nIHBpcGVsaW5lLW1hbmFnZXInLCBwYWNrYWdlOiBgJHtQTV9QQUNLQUdFfUAke3ZlcnNpb259YCB9KSk7XG4gIGV4ZWNGaWxlU3luYyhcbiAgICAnbnBtJyxcbiAgICBbJ2luc3RhbGwnLCAnLS1wcmVmaXgnLCBQTV9QUkVGSVgsICctLW5vLWF1ZGl0JywgJy0tbm8tZnVuZCcsICctLXVzZXJjb25maWcnLCBOUE1SQywgYCR7UE1fUEFDS0FHRX1AJHt2ZXJzaW9ufWBdLFxuICAgIHsgZW52OiBucG1FbnYsIHN0ZGlvOiAnaW5oZXJpdCcgfSxcbiAgKTtcblxuICAvLyAzLiBSZWFkIHRoZSBjdXJyZW50IHBsYXRmb3JtIEpXVCDigJQgaXQgYXV0aGVudGljYXRlcyB0aGUgcmVuZXdhbCByZXF1ZXN0LlxuICBjb25zdCBzbSA9IG5ldyBTZWNyZXRzTWFuYWdlckNsaWVudCh7IHJlZ2lvbiB9KTtcbiAgY29uc3QgY3VycmVudCA9IGF3YWl0IHNtLnNlbmQobmV3IEdldFNlY3JldFZhbHVlQ29tbWFuZCh7IFNlY3JldElkOiBzZWNyZXROYW1lIH0pKTtcbiAgaWYgKCFjdXJyZW50LlNlY3JldFN0cmluZykgdGhyb3cgbmV3IEVycm9yKGBTZWNyZXQgXCIke3NlY3JldE5hbWV9XCIgaXMgZW1wdHlgKTtcbiAgY29uc3Qgand0ID0gKEpTT04ucGFyc2UoY3VycmVudC5TZWNyZXRTdHJpbmcpIGFzIHsgcGFzc3dvcmQ/OiBzdHJpbmcgfSkucGFzc3dvcmQ7XG4gIGlmICghand0KSB0aHJvdyBuZXcgRXJyb3IoYFNlY3JldCBcIiR7c2VjcmV0TmFtZX1cIiBtaXNzaW5nIHBhc3N3b3JkIChKV1QpYCk7XG5cbiAgLy8gNC4gUnVuIHN0b3JlLXRva2VuLiAtLW5vLXNjaGVkdWxlOiBkbyBOT1QgcmVkZXBsb3kgdGhpcyBzdGFjayAoYXZvaWRzXG4gIC8vICAgIHJlY3Vyc2lvbikuIEl0IHdyaXRlcyB0aGUgcmVuZXdlZCBzZWNyZXQgdmlhIHRoZSBMYW1iZGEgcm9sZSdzIGNyZWRzLlxuICBjb25zdCBhcmdzID0gWydzdG9yZS10b2tlbicsICctLW5vLXNjaGVkdWxlJywgJy0tc2VjcmV0LW5hbWUnLCBzZWNyZXROYW1lLCAnLS1yZWdpb24nLCByZWdpb24sICctLWRheXMnLCBkYXlzXTtcbiAgaWYgKHByb2Nlc3MuZW52LlBMQVRGT1JNX1ZFUklGWV9TU0wgPT09ICdmYWxzZScpIGFyZ3MucHVzaCgnLS1uby12ZXJpZnktc3NsJyk7XG5cbiAgZXhlY0ZpbGVTeW5jKCdub2RlJywgW0NMSSwgLi4uYXJnc10sIHtcbiAgICBlbnY6IHsgLi4ubnBtRW52LCBQTEFURk9STV9UT0tFTjogand0LCBQTEFURk9STV9CQVNFX1VSTDogcGxhdGZvcm1VcmwgfSxcbiAgICBzdGRpbzogJ2luaGVyaXQnLFxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGxldmVsOiAnSU5GTycsIG1zZzogJ3BsYXRmb3JtIHRva2VuIHJlbmV3ZWQnLCBzZWNyZXROYW1lIH0pKTtcbn07XG4iXX0=