ec2-instance-running-scheduler 0.3.6 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,54 +1,56 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseResourceWaitLimitsFromEnv = void 0;
3
+ exports.parseMaxConcurrencyFromEnv = exports.parseResourceWaitLimitsFromEnv = void 0;
4
4
  /**
5
- * Lambda-only environment parsing for per-instance wait limits.
5
+ * Lambda-only environment parsing for running scheduler handler configuration.
6
6
  *
7
7
  * Bundled into the running scheduler function; not imported from CDK constructs.
8
8
  */
9
9
  const strict_env_resolver_1 = require("strict-env-resolver");
10
10
  const running_scheduler_predicates_1 = require("./running-scheduler-predicates");
11
11
  const running_scheduler_wait_config_1 = require("./running-scheduler-wait-config");
12
- /**
13
- * Ensures a parsed env integer is strictly positive.
14
- *
15
- * `StrictEnvType.Number` accepts any finite number (including zero and negatives);
16
- * wait limits require values greater than zero.
17
- *
18
- * @param key - Environment variable name used in error messages.
19
- * @param value - Parsed number from {@link StrictEnvResolver.resolveAll}.
20
- * @returns `value` when it is greater than zero.
21
- * @throws {Error} When `value` is zero or negative.
22
- */
23
- const assertPositiveEnvInt = (key, value) => {
24
- if (value <= 0) {
25
- const raw = process.env[key];
26
- throw new Error(`Invalid ${key}: must be a positive integer (got "${raw ?? ''}")`);
27
- }
28
- return value;
29
- };
30
12
  /**
31
13
  * Reads per-instance wait limits from Lambda environment variables set by the CDK construct.
32
14
  *
33
15
  * @returns Parsed limits, using {@link DEFAULT_RESOURCE_WAIT_LIMITS} when variables are unset.
34
- * @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a finite number.
35
- * @throws {Error} When a set variable is zero or negative.
16
+ * @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a positive integer.
36
17
  */
37
18
  const parseResourceWaitLimitsFromEnv = () => {
38
19
  const parsed = strict_env_resolver_1.StrictEnvResolver.resolveAll({
39
20
  [running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]: [
40
- strict_env_resolver_1.StrictEnvType.Number,
21
+ strict_env_resolver_1.StrictEnvType.PositiveInt,
41
22
  { default: running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxLoopCount },
42
23
  ],
43
24
  [running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]: [
44
- strict_env_resolver_1.StrictEnvType.Number,
25
+ strict_env_resolver_1.StrictEnvType.PositiveInt,
45
26
  { default: running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.maxElapsedSeconds },
46
27
  ],
28
+ [running_scheduler_wait_config_1.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV]: [
29
+ strict_env_resolver_1.StrictEnvType.PositiveInt,
30
+ { default: running_scheduler_predicates_1.DEFAULT_RESOURCE_WAIT_LIMITS.statusChangeWaitSeconds },
31
+ ],
47
32
  });
48
33
  return {
49
- maxLoopCount: assertPositiveEnvInt(running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV, parsed[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV]),
50
- maxElapsedSeconds: assertPositiveEnvInt(running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV, parsed[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV]),
34
+ maxLoopCount: parsed[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_LOOP_COUNT_ENV],
35
+ maxElapsedSeconds: parsed[running_scheduler_wait_config_1.PROCESS_RESOURCE_MAX_ELAPSED_SECONDS_ENV],
36
+ statusChangeWaitSeconds: parsed[running_scheduler_wait_config_1.PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS_ENV],
51
37
  };
52
38
  };
53
39
  exports.parseResourceWaitLimitsFromEnv = parseResourceWaitLimitsFromEnv;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItd2FpdC1lbnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItd2FpdC1lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILDZEQUF1RTtBQUN2RSxpRkFHd0M7QUFDeEMsbUZBR3lDO0FBRXpDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBVyxFQUFFLEtBQWEsRUFBVSxFQUFFO0lBQ2xFLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsR0FBRyxzQ0FBc0MsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0ksTUFBTSw4QkFBOEIsR0FBRyxHQUF1QixFQUFFO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLHVDQUFpQixDQUFDLFVBQVUsQ0FBQztRQUMxQyxDQUFDLG1FQUFtQyxDQUFDLEVBQUU7WUFDckMsbUNBQWEsQ0FBQyxNQUFNO1lBQ3BCLEVBQUUsT0FBTyxFQUFFLDJEQUE0QixDQUFDLFlBQVksRUFBRTtTQUN2RDtRQUNELENBQUMsd0VBQXdDLENBQUMsRUFBRTtZQUMxQyxtQ0FBYSxDQUFDLE1BQU07WUFDcEIsRUFBRSxPQUFPLEVBQUUsMkRBQTRCLENBQUMsaUJBQWlCLEVBQUU7U0FDNUQ7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsWUFBWSxFQUFFLG9CQUFvQixDQUNoQyxtRUFBbUMsRUFDbkMsTUFBTSxDQUFDLG1FQUFtQyxDQUFDLENBQzVDO1FBQ0QsaUJBQWlCLEVBQUUsb0JBQW9CLENBQ3JDLHdFQUF3QyxFQUN4QyxNQUFNLENBQUMsd0VBQXdDLENBQUMsQ0FDakQ7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBdEJXLFFBQUEsOEJBQThCLGtDQXNCekMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExhbWJkYS1vbmx5IGVudmlyb25tZW50IHBhcnNpbmcgZm9yIHBlci1pbnN0YW5jZSB3YWl0IGxpbWl0cy5cbiAqXG4gKiBCdW5kbGVkIGludG8gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uOyBub3QgaW1wb3J0ZWQgZnJvbSBDREsgY29uc3RydWN0cy5cbiAqL1xuaW1wb3J0IHsgU3RyaWN0RW52UmVzb2x2ZXIsIFN0cmljdEVudlR5cGUgfSBmcm9tICdzdHJpY3QtZW52LXJlc29sdmVyJztcbmltcG9ydCB7XG4gIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMsXG4gIHR5cGUgUmVzb3VyY2VXYWl0TGltaXRzLFxufSBmcm9tICcuL3J1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMnO1xuaW1wb3J0IHtcbiAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVF9FTlYsXG59IGZyb20gJy4vcnVubmluZy1zY2hlZHVsZXItd2FpdC1jb25maWcnO1xuXG4vKipcbiAqIEVuc3VyZXMgYSBwYXJzZWQgZW52IGludGVnZXIgaXMgc3RyaWN0bHkgcG9zaXRpdmUuXG4gKlxuICogYFN0cmljdEVudlR5cGUuTnVtYmVyYCBhY2NlcHRzIGFueSBmaW5pdGUgbnVtYmVyIChpbmNsdWRpbmcgemVybyBhbmQgbmVnYXRpdmVzKTtcbiAqIHdhaXQgbGltaXRzIHJlcXVpcmUgdmFsdWVzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBFbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lIHVzZWQgaW4gZXJyb3IgbWVzc2FnZXMuXG4gKiBAcGFyYW0gdmFsdWUgLSBQYXJzZWQgbnVtYmVyIGZyb20ge0BsaW5rIFN0cmljdEVudlJlc29sdmVyLnJlc29sdmVBbGx9LlxuICogQHJldHVybnMgYHZhbHVlYCB3aGVuIGl0IGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gYHZhbHVlYCBpcyB6ZXJvIG9yIG5lZ2F0aXZlLlxuICovXG5jb25zdCBhc3NlcnRQb3NpdGl2ZUVudkludCA9IChrZXk6IHN0cmluZywgdmFsdWU6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZba2V5XTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgJHtrZXl9OiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAoZ290IFwiJHtyYXcgPz8gJyd9XCIpYCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuLyoqXG4gKiBSZWFkcyBwZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZnJvbSBMYW1iZGEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCBieSB0aGUgQ0RLIGNvbnN0cnVjdC5cbiAqXG4gKiBAcmV0dXJucyBQYXJzZWQgbGltaXRzLCB1c2luZyB7QGxpbmsgREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUU30gd2hlbiB2YXJpYWJsZXMgYXJlIHVuc2V0LlxuICogQHRocm93cyB7aW1wb3J0KCdzdHJpY3QtZW52LXJlc29sdmVyJykuU3RyaWN0RW52VmFsaWRhdGlvbkVycm9yfSBXaGVuIGEgc2V0IHZhcmlhYmxlIGlzIG5vdCBhIGZpbml0ZSBudW1iZXIuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiBhIHNldCB2YXJpYWJsZSBpcyB6ZXJvIG9yIG5lZ2F0aXZlLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VSZXNvdXJjZVdhaXRMaW1pdHNGcm9tRW52ID0gKCk6IFJlc291cmNlV2FpdExpbWl0cyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmVBbGwoe1xuICAgIFtQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVl06IFtcbiAgICAgIFN0cmljdEVudlR5cGUuTnVtYmVyLFxuICAgICAgeyBkZWZhdWx0OiBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLm1heExvb3BDb3VudCB9LFxuICAgIF0sXG4gICAgW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdOiBbXG4gICAgICBTdHJpY3RFbnZUeXBlLk51bWJlcixcbiAgICAgIHsgZGVmYXVsdDogREVGQVVMVF9SRVNPVVJDRV9XQUlUX0xJTUlUUy5tYXhFbGFwc2VkU2Vjb25kcyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgbWF4TG9vcENvdW50OiBhc3NlcnRQb3NpdGl2ZUVudkludChcbiAgICAgIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WLFxuICAgICAgcGFyc2VkW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WXSxcbiAgICApLFxuICAgIG1heEVsYXBzZWRTZWNvbmRzOiBhc3NlcnRQb3NpdGl2ZUVudkludChcbiAgICAgIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYsXG4gICAgICBwYXJzZWRbUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVl0sXG4gICAgKSxcbiAgfTtcbn07XG4iXX0=
40
+ /**
41
+ * Reads durable `map` bounded concurrency from the Lambda environment.
42
+ *
43
+ * @returns Parsed concurrency, using {@link DEFAULT_MAX_CONCURRENCY} when unset.
44
+ * @throws {import('strict-env-resolver').StrictEnvValidationError} When a set variable is not a positive integer.
45
+ */
46
+ const parseMaxConcurrencyFromEnv = () => {
47
+ const parsed = strict_env_resolver_1.StrictEnvResolver.resolveAll({
48
+ [running_scheduler_wait_config_1.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV]: [
49
+ strict_env_resolver_1.StrictEnvType.PositiveInt,
50
+ { default: running_scheduler_predicates_1.DEFAULT_MAX_CONCURRENCY },
51
+ ],
52
+ });
53
+ return parsed[running_scheduler_wait_config_1.PROCESS_RESOURCES_MAX_CONCURRENCY_ENV];
54
+ };
55
+ exports.parseMaxConcurrencyFromEnv = parseMaxConcurrencyFromEnv;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXItd2FpdC1lbnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3MvcnVubmluZy1zY2hlZHVsZXItd2FpdC1lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7R0FJRztBQUNILDZEQUF1RTtBQUN2RSxpRkFJd0M7QUFDeEMsbUZBS3lDO0FBRXpDOzs7OztHQUtHO0FBQ0ksTUFBTSw4QkFBOEIsR0FBRyxHQUF1QixFQUFFO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLHVDQUFpQixDQUFDLFVBQVUsQ0FBQztRQUMxQyxDQUFDLG1FQUFtQyxDQUFDLEVBQUU7WUFDckMsbUNBQWEsQ0FBQyxXQUFXO1lBQ3pCLEVBQUUsT0FBTyxFQUFFLDJEQUE0QixDQUFDLFlBQVksRUFBRTtTQUN2RDtRQUNELENBQUMsd0VBQXdDLENBQUMsRUFBRTtZQUMxQyxtQ0FBYSxDQUFDLFdBQVc7WUFDekIsRUFBRSxPQUFPLEVBQUUsMkRBQTRCLENBQUMsaUJBQWlCLEVBQUU7U0FDNUQ7UUFDRCxDQUFDLCtFQUErQyxDQUFDLEVBQUU7WUFDakQsbUNBQWEsQ0FBQyxXQUFXO1lBQ3pCLEVBQUUsT0FBTyxFQUFFLDJEQUE0QixDQUFDLHVCQUF1QixFQUFFO1NBQ2xFO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLFlBQVksRUFBRSxNQUFNLENBQUMsbUVBQW1DLENBQUM7UUFDekQsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLHdFQUF3QyxDQUFDO1FBQ25FLHVCQUF1QixFQUFFLE1BQU0sQ0FBQywrRUFBK0MsQ0FBQztLQUNqRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBckJXLFFBQUEsOEJBQThCLGtDQXFCekM7QUFFRjs7Ozs7R0FLRztBQUNJLE1BQU0sMEJBQTBCLEdBQUcsR0FBVyxFQUFFO0lBQ3JELE1BQU0sTUFBTSxHQUFHLHVDQUFpQixDQUFDLFVBQVUsQ0FBQztRQUMxQyxDQUFDLHFFQUFxQyxDQUFDLEVBQUU7WUFDdkMsbUNBQWEsQ0FBQyxXQUFXO1lBQ3pCLEVBQUUsT0FBTyxFQUFFLHNEQUF1QixFQUFFO1NBQ3JDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUMscUVBQXFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFUVyxRQUFBLDBCQUEwQiw4QkFTckMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExhbWJkYS1vbmx5IGVudmlyb25tZW50IHBhcnNpbmcgZm9yIHJ1bm5pbmcgc2NoZWR1bGVyIGhhbmRsZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBCdW5kbGVkIGludG8gdGhlIHJ1bm5pbmcgc2NoZWR1bGVyIGZ1bmN0aW9uOyBub3QgaW1wb3J0ZWQgZnJvbSBDREsgY29uc3RydWN0cy5cbiAqL1xuaW1wb3J0IHsgU3RyaWN0RW52UmVzb2x2ZXIsIFN0cmljdEVudlR5cGUgfSBmcm9tICdzdHJpY3QtZW52LXJlc29sdmVyJztcbmltcG9ydCB7XG4gIERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZLFxuICBERUZBVUxUX1JFU09VUkNFX1dBSVRfTElNSVRTLFxuICB0eXBlIFJlc291cmNlV2FpdExpbWl0cyxcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci1wcmVkaWNhdGVzJztcbmltcG9ydCB7XG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlYsXG4gIFBST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WLFxuICBQUk9DRVNTX1JFU09VUkNFX1NUQVRVU19DSEFOR0VfV0FJVF9TRUNPTkRTX0VOVixcbiAgUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZX0VOVixcbn0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci13YWl0LWNvbmZpZyc7XG5cbi8qKlxuICogUmVhZHMgcGVyLWluc3RhbmNlIHdhaXQgbGltaXRzIGZyb20gTGFtYmRhIGVudmlyb25tZW50IHZhcmlhYmxlcyBzZXQgYnkgdGhlIENESyBjb25zdHJ1Y3QuXG4gKlxuICogQHJldHVybnMgUGFyc2VkIGxpbWl0cywgdXNpbmcge0BsaW5rIERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFN9IHdoZW4gdmFyaWFibGVzIGFyZSB1bnNldC5cbiAqIEB0aHJvd3Mge2ltcG9ydCgnc3RyaWN0LWVudi1yZXNvbHZlcicpLlN0cmljdEVudlZhbGlkYXRpb25FcnJvcn0gV2hlbiBhIHNldCB2YXJpYWJsZSBpcyBub3QgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VSZXNvdXJjZVdhaXRMaW1pdHNGcm9tRW52ID0gKCk6IFJlc291cmNlV2FpdExpbWl0cyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IFN0cmljdEVudlJlc29sdmVyLnJlc29sdmVBbGwoe1xuICAgIFtQUk9DRVNTX1JFU09VUkNFX01BWF9MT09QX0NPVU5UX0VOVl06IFtcbiAgICAgIFN0cmljdEVudlR5cGUuUG9zaXRpdmVJbnQsXG4gICAgICB7IGRlZmF1bHQ6IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4TG9vcENvdW50IH0sXG4gICAgXSxcbiAgICBbUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTX0VOVl06IFtcbiAgICAgIFN0cmljdEVudlR5cGUuUG9zaXRpdmVJbnQsXG4gICAgICB7IGRlZmF1bHQ6IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMubWF4RWxhcHNlZFNlY29uZHMgfSxcbiAgICBdLFxuICAgIFtQUk9DRVNTX1JFU09VUkNFX1NUQVRVU19DSEFOR0VfV0FJVF9TRUNPTkRTX0VOVl06IFtcbiAgICAgIFN0cmljdEVudlR5cGUuUG9zaXRpdmVJbnQsXG4gICAgICB7IGRlZmF1bHQ6IERFRkFVTFRfUkVTT1VSQ0VfV0FJVF9MSU1JVFMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMgfSxcbiAgICBdLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1heExvb3BDb3VudDogcGFyc2VkW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRfRU5WXSxcbiAgICBtYXhFbGFwc2VkU2Vjb25kczogcGFyc2VkW1BST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU19FTlZdLFxuICAgIHN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzOiBwYXJzZWRbUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU19FTlZdLFxuICB9O1xufTtcblxuLyoqXG4gKiBSZWFkcyBkdXJhYmxlIGBtYXBgIGJvdW5kZWQgY29uY3VycmVuY3kgZnJvbSB0aGUgTGFtYmRhIGVudmlyb25tZW50LlxuICpcbiAqIEByZXR1cm5zIFBhcnNlZCBjb25jdXJyZW5jeSwgdXNpbmcge0BsaW5rIERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZfSB3aGVuIHVuc2V0LlxuICogQHRocm93cyB7aW1wb3J0KCdzdHJpY3QtZW52LXJlc29sdmVyJykuU3RyaWN0RW52VmFsaWRhdGlvbkVycm9yfSBXaGVuIGEgc2V0IHZhcmlhYmxlIGlzIG5vdCBhIHBvc2l0aXZlIGludGVnZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZU1heENvbmN1cnJlbmN5RnJvbUVudiA9ICgpOiBudW1iZXIgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlQWxsKHtcbiAgICBbUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZX0VOVl06IFtcbiAgICAgIFN0cmljdEVudlR5cGUuUG9zaXRpdmVJbnQsXG4gICAgICB7IGRlZmF1bHQ6IERFRkFVTFRfTUFYX0NPTkNVUlJFTkNZIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZFtQUk9DRVNTX1JFU09VUkNFU19NQVhfQ09OQ1VSUkVOQ1lfRU5WXTtcbn07XG4iXX0=
@@ -29,8 +29,10 @@ export interface SchedulerEvent {
29
29
  * in parallel (bounded concurrency), posts a parent Slack message and per-instance thread replies,
30
30
  * and uses durable `step` / `wait` / `map` so the run can resume across suspensions.
31
31
  *
32
- * Reads per-instance wait limits from `PROCESS_RESOURCE_MAX_LOOP_COUNT` and
33
- * `PROCESS_RESOURCE_MAX_ELAPSED_SECONDS` via {@link parseResourceWaitLimitsFromEnv}.
32
+ * Reads per-instance wait limits from `PROCESS_RESOURCE_MAX_LOOP_COUNT`,
33
+ * `PROCESS_RESOURCE_MAX_ELAPSED_SECONDS`, and `PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS`
34
+ * via {@link parseResourceWaitLimitsFromEnv}, and map concurrency from
35
+ * `PROCESS_RESOURCES_MAX_CONCURRENCY` via {@link parseMaxConcurrencyFromEnv}.
34
36
  * Loads the Slack secret via {@link secretFetcher} (Parameters and Secrets Lambda Extension).
35
37
  * Slack API failures are logged as `running-scheduler: Slack post failed` for CloudWatch log filters.
36
38
  *
@@ -39,12 +41,13 @@ export interface SchedulerEvent {
39
41
  * @returns
40
42
  * - `{ status: 'TargetResourcesNotFound' }` when no instances match the tag filter.
41
43
  * - `{ status: 'Completed', processed, results }` when instances were handled (`results` entries match {@link processOneResource} return shape).
42
- * @throws {Error} If `Params` is invalid, wait env vars are not positive integers,
43
- * the Slack secret is incomplete, instance processing fails (including `ResourceWaitFailed:*` errors),
44
+ * @throws {Error} If `Params` is invalid, the Slack secret is incomplete or not JSON with `token` and `channel`,
45
+ * instance processing fails (including `ResourceWaitFailed:*` errors),
44
46
  * or the secret cannot be read from the extension (e.g. outside Lambda or missing `AWS_SESSION_TOKEN`).
45
- * @throws {import('strict-env-resolver').StrictEnvValidationError} When required env vars are missing or not valid numbers.
47
+ * @throws {import('strict-env-resolver').StrictEnvValidationError} When required env vars are missing or not positive integers.
46
48
  * @throws {import('fetch-retrier').FetchRetrierHttpError} When the extension returns a non-retriable HTTP error.
47
49
  * @throws {import('fetch-retrier').FetchRetrierNetworkError} When extension requests fail at the network level.
48
50
  * @throws {import('fetch-retrier').FetchRetrierAbortError} When extension requests time out after all retries.
51
+ * @throws {import('fetch-retrier').FetchRetrierInvalidOptionsError} When secret-fetch retry options are invalid.
49
52
  */
50
53
  export declare const handler: import("@aws/durable-execution-sdk-js").DurableLambdaHandler;
@@ -22,12 +22,6 @@ const STATE_LIST = [
22
22
  { name: 'RUNNING', emoji: '😆', state: 'running' },
23
23
  { name: 'STOPPED', emoji: '😴', state: 'stopped' },
24
24
  ];
25
- /**
26
- * Seconds to wait between describe iterations after start/stop or while transitioning.
27
- *
28
- * Used with {@link processOneResource} durable `wait` calls between describe iterations.
29
- */
30
- const STATUS_CHANGE_WAIT_SECONDS = 20;
31
25
  /**
32
26
  * Options passed to {@link secretFetcher.getSecretValue} when loading the Slack secret.
33
27
  *
@@ -39,6 +33,30 @@ const SLACK_SECRET_FETCH_OPTIONS = {
39
33
  retries: 5,
40
34
  baseBackoffMs: 300,
41
35
  };
36
+ /**
37
+ * Whether a secret payload is a JSON object with non-empty Slack `token` and `channel`.
38
+ *
39
+ * `aws-lambda-secret-fetcher` ^0.7 parses JSON with quiet-json-parser; invalid or empty
40
+ * JSON falls back to the original string instead of throwing.
41
+ *
42
+ * @param value - Value returned by {@link secretFetcher.getSecretValue}.
43
+ * @returns `true` when `value` is a {@link SlackSecret}.
44
+ */
45
+ const isSlackSecret = (value) => {
46
+ if (typeof value !== 'object' || value === null) {
47
+ return false;
48
+ }
49
+ if (!('token' in value) || !('channel' in value)) {
50
+ return false;
51
+ }
52
+ if (typeof value.token !== 'string' || value.token === '') {
53
+ return false;
54
+ }
55
+ if (typeof value.channel !== 'string' || value.channel === '') {
56
+ return false;
57
+ }
58
+ return true;
59
+ };
42
60
  /**
43
61
  * Returns display name and emoji for an EC2 instance state.
44
62
  *
@@ -80,6 +98,7 @@ const processOneResource = async (ctx, targetResource, params, resourceIndex, wa
80
98
  mode: params.Mode,
81
99
  maxLoopCount: waitLimits.maxLoopCount,
82
100
  maxElapsedSeconds: waitLimits.maxElapsedSeconds,
101
+ statusChangeWaitSeconds: waitLimits.statusChangeWaitSeconds,
83
102
  });
84
103
  const startedAtMs = await ctx.step(`${stepPrefix}-wait-started-at`, async () => Date.now());
85
104
  let loopCount = 0;
@@ -124,9 +143,9 @@ const processOneResource = async (ctx, targetResource, params, resourceIndex, wa
124
143
  });
125
144
  ctx.logger.info('processOneResource: wait after start', {
126
145
  identifier,
127
- seconds: STATUS_CHANGE_WAIT_SECONDS,
146
+ seconds: waitLimits.statusChangeWaitSeconds,
128
147
  });
129
- await ctx.wait({ seconds: STATUS_CHANGE_WAIT_SECONDS });
148
+ await ctx.wait({ seconds: waitLimits.statusChangeWaitSeconds });
130
149
  loopCount += 1;
131
150
  continue;
132
151
  }
@@ -138,9 +157,9 @@ const processOneResource = async (ctx, targetResource, params, resourceIndex, wa
138
157
  });
139
158
  ctx.logger.info('processOneResource: wait after stop', {
140
159
  identifier,
141
- seconds: STATUS_CHANGE_WAIT_SECONDS,
160
+ seconds: waitLimits.statusChangeWaitSeconds,
142
161
  });
143
- await ctx.wait({ seconds: STATUS_CHANGE_WAIT_SECONDS });
162
+ await ctx.wait({ seconds: waitLimits.statusChangeWaitSeconds });
144
163
  loopCount += 1;
145
164
  continue;
146
165
  }
@@ -151,9 +170,9 @@ const processOneResource = async (ctx, targetResource, params, resourceIndex, wa
151
170
  loopCount,
152
171
  currentState,
153
172
  mode,
154
- seconds: STATUS_CHANGE_WAIT_SECONDS,
173
+ seconds: waitLimits.statusChangeWaitSeconds,
155
174
  });
156
- await ctx.wait({ seconds: STATUS_CHANGE_WAIT_SECONDS });
175
+ await ctx.wait({ seconds: waitLimits.statusChangeWaitSeconds });
157
176
  loopCount += 1;
158
177
  continue;
159
178
  }
@@ -194,8 +213,10 @@ const processOneResource = async (ctx, targetResource, params, resourceIndex, wa
194
213
  * in parallel (bounded concurrency), posts a parent Slack message and per-instance thread replies,
195
214
  * and uses durable `step` / `wait` / `map` so the run can resume across suspensions.
196
215
  *
197
- * Reads per-instance wait limits from `PROCESS_RESOURCE_MAX_LOOP_COUNT` and
198
- * `PROCESS_RESOURCE_MAX_ELAPSED_SECONDS` via {@link parseResourceWaitLimitsFromEnv}.
216
+ * Reads per-instance wait limits from `PROCESS_RESOURCE_MAX_LOOP_COUNT`,
217
+ * `PROCESS_RESOURCE_MAX_ELAPSED_SECONDS`, and `PROCESS_RESOURCE_STATUS_CHANGE_WAIT_SECONDS`
218
+ * via {@link parseResourceWaitLimitsFromEnv}, and map concurrency from
219
+ * `PROCESS_RESOURCES_MAX_CONCURRENCY` via {@link parseMaxConcurrencyFromEnv}.
199
220
  * Loads the Slack secret via {@link secretFetcher} (Parameters and Secrets Lambda Extension).
200
221
  * Slack API failures are logged as `running-scheduler: Slack post failed` for CloudWatch log filters.
201
222
  *
@@ -204,13 +225,14 @@ const processOneResource = async (ctx, targetResource, params, resourceIndex, wa
204
225
  * @returns
205
226
  * - `{ status: 'TargetResourcesNotFound' }` when no instances match the tag filter.
206
227
  * - `{ status: 'Completed', processed, results }` when instances were handled (`results` entries match {@link processOneResource} return shape).
207
- * @throws {Error} If `Params` is invalid, wait env vars are not positive integers,
208
- * the Slack secret is incomplete, instance processing fails (including `ResourceWaitFailed:*` errors),
228
+ * @throws {Error} If `Params` is invalid, the Slack secret is incomplete or not JSON with `token` and `channel`,
229
+ * instance processing fails (including `ResourceWaitFailed:*` errors),
209
230
  * or the secret cannot be read from the extension (e.g. outside Lambda or missing `AWS_SESSION_TOKEN`).
210
- * @throws {import('strict-env-resolver').StrictEnvValidationError} When required env vars are missing or not valid numbers.
231
+ * @throws {import('strict-env-resolver').StrictEnvValidationError} When required env vars are missing or not positive integers.
211
232
  * @throws {import('fetch-retrier').FetchRetrierHttpError} When the extension returns a non-retriable HTTP error.
212
233
  * @throws {import('fetch-retrier').FetchRetrierNetworkError} When extension requests fail at the network level.
213
234
  * @throws {import('fetch-retrier').FetchRetrierAbortError} When extension requests time out after all retries.
235
+ * @throws {import('fetch-retrier').FetchRetrierInvalidOptionsError} When secret-fetch retry options are invalid.
214
236
  */
215
237
  exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (event, ctx) => {
216
238
  const params = event.Params;
@@ -223,13 +245,14 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (ev
223
245
  throw new Error('Invalid event: Params.TagKey, Params.TagValues, Params.Mode are required.');
224
246
  }
225
247
  const waitLimits = (0, running_scheduler_wait_env_1.parseResourceWaitLimitsFromEnv)();
248
+ const maxConcurrency = (0, running_scheduler_wait_env_1.parseMaxConcurrencyFromEnv)();
226
249
  const slackSecretName = strict_env_resolver_1.StrictEnvResolver.resolve('SLACK_SECRET_NAME', strict_env_resolver_1.StrictEnvType.String);
227
250
  const slackSecretValue = await ctx.step('fetch-slack-secret', async () => {
228
251
  ctx.logger.info('running-scheduler: fetching Slack secret', { secretName: slackSecretName });
229
252
  return aws_lambda_secret_fetcher_1.secretFetcher.getSecretValue(slackSecretName, SLACK_SECRET_FETCH_OPTIONS);
230
253
  });
231
254
  ctx.logger.info('running-scheduler: Slack secret loaded');
232
- if (!slackSecretValue?.token || !slackSecretValue?.channel) {
255
+ if (!isSlackSecret(slackSecretValue)) {
233
256
  throw new Error('Slack secret must contain token and channel.');
234
257
  }
235
258
  const targetResources = await ctx.step('get-target-resources', async () => {
@@ -275,7 +298,7 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (ev
275
298
  });
276
299
  ctx.logger.info('running-scheduler: starting parallel instance processing', {
277
300
  count: targetResources.length,
278
- maxConcurrency: 10,
301
+ maxConcurrency,
279
302
  });
280
303
  const results = await ctx.map(targetResources,
281
304
  // async (ctx: DurableContext, targetResource: string, index: number) =>
@@ -326,7 +349,7 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (ev
326
349
  });
327
350
  return result;
328
351
  });
329
- }, { maxConcurrency: 10 });
352
+ }, { maxConcurrency });
330
353
  const resultList = Array.isArray(results) ? results : [];
331
354
  ctx.logger.info('running-scheduler: completed', {
332
355
  processed: targetResources.length,
@@ -338,4 +361,4 @@ exports.handler = (0, durable_execution_sdk_js_1.withDurableExecution)(async (ev
338
361
  results: resultList,
339
362
  };
340
363
  });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXIubGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7O0FBRUgsNEVBQTBGO0FBQzFGLG9EQUs2QjtBQUM3QixvR0FBa0g7QUFDbEgsNENBQTJDO0FBQzNDLHlFQUFzRjtBQUN0Riw2REFBdUU7QUFDdkUsaUZBTXdDO0FBQ3hDLDZFQUE4RTtBQUU5RSx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLEdBQUc7SUFDakIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQzFDLENBQUM7QUFFWDs7OztHQUlHO0FBQ0gsTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFFdEM7Ozs7O0dBS0c7QUFDSCxNQUFNLDBCQUEwQixHQUEwQjtJQUN4RCxTQUFTLEVBQUUsSUFBSTtJQUNmLE9BQU8sRUFBRSxDQUFDO0lBQ1YsYUFBYSxFQUFFLEdBQUc7Q0FDbkIsQ0FBQztBQTJCRjs7Ozs7R0FLRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBZSxFQUErQyxFQUFFO0lBQ3ZGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDMUQsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3RFLENBQUMs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QUNwQixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVDMiBSdW5uaW5nIFNjaGVkdWxlciDigJMgRHVyYWJsZSBGdW5jdGlvbnMgaW1wbGVtZW50YXRpb24uXG4gKlxuICogSW1wbGVtZW50cyB0aGUgcnVubmluZy1jb250cm9sIGZsb3cgdXNpbmcgQVdTIExhbWJkYSBEdXJhYmxlIEV4ZWN1dGlvbi5cbiAqIFN0ZXAgY2hlY2twb2ludHMsIHdhaXQgKG5vIGNoYXJnZSksIGFuZCBwYXJhbGxlbCBtYXAgcHJvdmlkZSBhIGZsb3cgZXF1aXZhbGVudCB0byBTdGVwIEZ1bmN0aW9ucy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2R1cmFibGUtZXhlY3V0aW9uLXNkay5odG1sXG4gKi9cblxuaW1wb3J0IHsgd2l0aER1cmFibGVFeGVjdXRpb24sIHR5cGUgRHVyYWJsZUNvbnRleHQgfSBmcm9tICdAYXdzL2R1cmFibGUtZXhlY3V0aW9uLXNkay1qcyc7XG5pbXBvcnQge1xuICBFQzJDbGllbnQsXG4gIERlc2NyaWJlSW5zdGFuY2VzQ29tbWFuZCxcbiAgU3RhcnRJbnN0YW5jZXNDb21tYW5kLFxuICBTdG9wSW5zdGFuY2VzQ29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWVjMic7XG5pbXBvcnQgeyBHZXRSZXNvdXJjZXNDb21tYW5kLCBSZXNvdXJjZUdyb3Vwc1RhZ2dpbmdBUElDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtcmVzb3VyY2UtZ3JvdXBzLXRhZ2dpbmctYXBpJztcbmltcG9ydCB7IFdlYkNsaWVudCB9IGZyb20gJ0BzbGFjay93ZWItYXBpJztcbmltcG9ydCB7IHNlY3JldEZldGNoZXIsIHR5cGUgR2V0U2VjcmV0VmFsdWVPcHRpb25zIH0gZnJvbSAnYXdzLWxhbWJkYS1zZWNyZXQtZmV0Y2hlcic7XG5pbXBvcnQgeyBTdHJpY3RFbnZSZXNvbHZlciwgU3RyaWN0RW52VHlwZSB9IGZyb20gJ3N0cmljdC1lbnYtcmVzb2x2ZXInO1xuaW1wb3J0IHtcbiAgZm9ybWF0UmVzb3VyY2VXYWl0RmFpbHVyZSxcbiAgZ2V0V2FpdEFib3J0UmVhc29uLFxuICBpc0Rlc2lyZWRTdGFibGVTdGF0ZSxcbiAgaXNUcmFuc2l0aW9uaW5nU3RhdGUsXG4gIHR5cGUgUmVzb3VyY2VXYWl0TGltaXRzLFxufSBmcm9tICcuL3J1bm5pbmctc2NoZWR1bGVyLXByZWRpY2F0ZXMnO1xuaW1wb3J0IHsgcGFyc2VSZXNvdXJjZVdhaXRMaW1pdHNGcm9tRW52IH0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudic7XG5cbi8qKiBNYXBwaW5nIG9mIEVDMiBpbnN0YW5jZSBzdGF0ZSB0byBkaXNwbGF5IG5hbWUgYW5kIGVtb2ppIGZvciBTbGFjay4gKi9cbmNvbnN0IFNUQVRFX0xJU1QgPSBbXG4gIHsgbmFtZTogJ1JVTk5JTkcnLCBlbW9qaTogJ/CfmIYnLCBzdGF0ZTogJ3J1bm5pbmcnIH0sXG4gIHsgbmFtZTogJ1NUT1BQRUQnLCBlbW9qaTogJ/CfmLQnLCBzdGF0ZTogJ3N0b3BwZWQnIH0sXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIFNlY29uZHMgdG8gd2FpdCBiZXR3ZWVuIGRlc2NyaWJlIGl0ZXJhdGlvbnMgYWZ0ZXIgc3RhcnQvc3RvcCBvciB3aGlsZSB0cmFuc2l0aW9uaW5nLlxuICpcbiAqIFVzZWQgd2l0aCB7QGxpbmsgcHJvY2Vzc09uZVJlc291cmNlfSBkdXJhYmxlIGB3YWl0YCBjYWxscyBiZXR3ZWVuIGRlc2NyaWJlIGl0ZXJhdGlvbnMuXG4gKi9cbmNvbnN0IFNUQVRVU19DSEFOR0VfV0FJVF9TRUNPTkRTID0gMjA7XG5cbi8qKlxuICogT3B0aW9ucyBwYXNzZWQgdG8ge0BsaW5rIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWV9IHdoZW4gbG9hZGluZyB0aGUgU2xhY2sgc2VjcmV0LlxuICpcbiAqIFJldHJpZXMgY292ZXIgdHJhbnNpZW50IGV4dGVuc2lvbiBIVFRQIGVycm9ycyAoNXh4LCA0MjkpIGFuZCB0aGUgZXh0ZW5zaW9uXG4gKiBcIm5vdCByZWFkeSB0byBzZXJ2ZSB0cmFmZmljXCIgcmVzcG9uc2UgZHVyaW5nIGNvbGQgc3RhcnRzLlxuICovXG5jb25zdCBTTEFDS19TRUNSRVRfRkVUQ0hfT1BUSU9OUzogR2V0U2VjcmV0VmFsdWVPcHRpb25zID0ge1xuICB0aW1lb3V0TXM6IDMwMDAsXG4gIHJldHJpZXM6IDUsXG4gIGJhc2VCYWNrb2ZmTXM6IDMwMCxcbn07XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmcm9tIEV2ZW50QnJpZGdlIFNjaGVkdWxlciBpbnZva2luZyB0aGlzIExhbWJkYS5cbiAqXG4gKiBAc2VlIHtAbGluayBoYW5kbGVyfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVkdWxlckV2ZW50IHtcbiAgLyoqIFNjaGVkdWxlciBpbnZvY2F0aW9uIHBhcmFtZXRlcnMgKHRhZyBmaWx0ZXIgYW5kIHN0YXJ0L3N0b3AgbW9kZSkuICovXG4gIFBhcmFtczoge1xuICAgIC8qKiBUYWcga2V5IHVzZWQgdG8gc2VsZWN0IEVDMiBpbnN0YW5jZXMuICovXG4gICAgVGFnS2V5OiBzdHJpbmc7XG4gICAgLyoqIFRhZyB2YWx1ZXMgdG8gbWF0Y2guICovXG4gICAgVGFnVmFsdWVzOiBzdHJpbmdbXTtcbiAgICAvKiogV2hldGhlciB0byBzdGFydCBvciBzdG9wIGluc3RhbmNlcy4gKi9cbiAgICBNb2RlOiAnU3RhcnQnIHwgJ1N0b3AnO1xuICB9O1xufVxuXG4vKiogU2xhY2sgY3JlZGVudGlhbHMgYW5kIGRlZmF1bHQgY2hhbm5lbCBsb2FkZWQgZnJvbSBTZWNyZXRzIE1hbmFnZXIgKGBTTEFDS19TRUNSRVRfTkFNRWApLiAqL1xuaW50ZXJmYWNlIFNsYWNrU2VjcmV0IHtcbiAgLyoqIFNsYWNrIGJvdCB0b2tlbiBmb3IgdGhlIFNsYWNrIGBXZWJDbGllbnRgLiAqL1xuICB0b2tlbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbCBJRCBvciBuYW1lIHBhc3NlZCB0byBgY2hhdC5wb3N0TWVzc2FnZWAuICovXG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGRpc3BsYXkgbmFtZSBhbmQgZW1vamkgZm9yIGFuIEVDMiBpbnN0YW5jZSBzdGF0ZS5cbiAqXG4gKiBAcGFyYW0gY3VycmVudCAtIEN1cnJlbnQgaW5zdGFuY2Ugc3RhdGUgKGUuZy4gJ3J1bm5pbmcnLCAnc3RvcHBlZCcpLlxuICogQHJldHVybnMgRGlzcGxheSBpbmZvIG9yIHVuZGVmaW5lZCBpZiBzdGF0ZSBpcyBub3QgaW4gU1RBVEVfTElTVC5cbiAqL1xuY29uc3QgZ2V0U3RhdGVEaXNwbGF5ID0gKGN1cnJlbnQ6IHN0cmluZyk6IHsgZW1vamk6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBmb3VuZCA9IFNUQVRFX0xJU1QuZmluZCgocykgPT4gcy5zdGF0ZSA9PT0gY3VycmVudCk7XG4gIHJldHVybiBmb3VuZCA/IHsgZW1vamk6IGZvdW5kLmVtb2ppLCBuYW1lOiBmb3VuZC5uYW1lIH0gOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFByb2Nlc3NlcyBvbmUgRUMyIGluc3RhbmNlOiBkZXNjcmliZXMgc3RhdGUsIGlzc3VlcyBzdGFydC9zdG9wIHdoZW4gbmVlZGVkLCB0aGVuIHdhaXRzIHVudGlsXG4gKiB7QGxpbmsgaXNEZXNpcmVkU3RhYmxlU3RhdGV9IGlzIHNhdGlzZmllZCAoZHVyYWJsZSBgc3RlcGAgLyBgd2FpdGAgYmV0d2VlbiBhdHRlbXB0cykuXG4gKlxuICogRWFjaCBsb29wIGl0ZXJhdGlvbiBjaGVja3Mge0BsaW5rIGdldFdhaXRBYm9ydFJlYXNvbn0gYmVmb3JlIGRlc2NyaWJlLiBGYWlsdXJlcyB1c2VcbiAqIHtAbGluayBmb3JtYXRSZXNvdXJjZVdhaXRGYWlsdXJlfSAoYFJlc291cmNlV2FpdEZhaWxlZDoqYCBtZXNzYWdlIHByZWZpeCkuXG4gKlxuICogQHBhcmFtIGN0eCAtIER1cmFibGUgZXhlY3V0aW9uIGNvbnRleHQgKGNoaWxkIGNvbnRleHQgcGVyIGluc3RhbmNlIHJlY29tbWVuZGVkKS5cbiAqIEBwYXJhbSB0YXJnZXRSZXNvdXJjZSAtIEVDMiBpbnN0YW5jZSBBUk4uXG4gKiBAcGFyYW0gcGFyYW1zIC0gU2NoZWR1bGVyIHBhcmFtcyAoYFRhZ0tleWAsIGBUYWdWYWx1ZXNgLCBgTW9kZWApLlxuICogQHBhcmFtIHJlc291cmNlSW5kZXggLSBJbmRleCB1c2VkIGluIGR1cmFibGUgc3RlcCBuYW1lcyBmb3IgdGhpcyByZXNvdXJjZS5cbiAqIEBwYXJhbSB3YWl0TGltaXRzIC0gUGVyLWluc3RhbmNlIGNhcHMgZnJvbSB7QGxpbmsgcGFyc2VSZXNvdXJjZVdhaXRMaW1pdHNGcm9tRW52fSAoc2V0IGJ5IHRoZSBDREsgY29uc3RydWN0KS5cbiAqIEByZXR1cm5zIEZpbmFsIHJlc291cmNlIEFSTiwgRUMyIHN0YXRlIG5hbWUsIHBhcnNlZCBhY2NvdW50LCByZWdpb24sIGFuZCBpbnN0YW5jZSBpZC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBXaGVuIHdhaXQgbGltaXRzIGFyZSBleGNlZWRlZCAoYE1heExvb3BDb3VudEV4Y2VlZGVkYCwgYE1heEVsYXBzZWRUaW1lRXhjZWVkZWRgKSxcbiAqICAgdGhlIGluc3RhbmNlIGlzIGluIGFuIHVuZXhwZWN0ZWQgc3RhdGUgKGBVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZWApLCBvciB0aGUgbG9vcCBleGl0cyB3aXRob3V0IGEgc3RhYmxlIGdvYWwgc3RhdGUuXG4gKi9cbmNvbnN0IHByb2Nlc3NPbmVSZXNvdXJjZSA9IGFzeW5jIChcbiAgY3R4OiBEdXJhYmxlQ29udGV4dCxcbiAgdGFyZ2V0UmVzb3VyY2U6IHN0cmluZyxcbiAgcGFyYW1zOiBTY2hlZHVsZXJFdmVudFsnUGFyYW1zJ10sXG4gIHJlc291cmNlSW5kZXg6IG51bWJlcixcbiAgd2FpdExpbWl0czogUmVzb3VyY2VXYWl0TGltaXRzLFxuKTogUHJvbWlzZTx7IHJlc291cmNlOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyBhY2NvdW50OiBzdHJpbmc7IHJlZ2lvbjogc3RyaW5nOyBpZGVudGlmaWVyOiBzdHJpbmcgfT4gPT4ge1xuICBjb25zdCBwYXJ0cyA9IHRhcmdldFJlc291cmNlLnNwbGl0KCcvJyk7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA/PyAndW5rbm93bic7XG4gIGNvbnN0IGFyblBhcnRzID0gdGFyZ2V0UmVzb3VyY2Uuc3BsaXQoJzonKTtcbiAgY29uc3QgYWNjb3VudCA9IGFyblBhcnRzWzRdID8/ICcnO1xuICBjb25zdCByZWdpb24gPSBhcm5QYXJ0c1szXSA/PyAnJztcbiAgY29uc3Qgc3RlcFByZWZpeCA9IGByZXNvdXJjZS0ke3Jlc291cmNlSW5kZXh9LSR7aWRlbnRpZmllcn1gO1xuXG4gIGN0eC5sb2dnZXIuaW5mbygncHJvY2Vzc09uZVJlc291cmNlOiBzdGFydCcsIHtcbiAgICByZXNvdXJjZUluZGV4LFxuICAgIGlkZW50aWZpZXIsXG4gICAgcmVnaW9uLFxuICAgIGFjY291bnQsXG4gICAgbW9kZTogcGFyYW1zLk1vZGUsXG4gICAgbWF4TG9vcENvdW50OiB3YWl0TGltaXRzLm1heExvb3BDb3VudCxcbiAgICBtYXhFbGFwc2VkU2Vjb25kczogd2FpdExpbWl0cy5tYXhFbGFwc2VkU2Vjb25kcyxcbiAgfSk7XG5cbiAgY29uc3Qgc3RhcnRlZEF0TXMgPSBhd2FpdCBjdHguc3RlcChgJHtzdGVwUHJlZml4fS13YWl0LXN0YXJ0ZWQtYXRgLCBhc3luYyAoKSA9PiBEYXRlLm5vdygpKTtcblxuICBsZXQgbG9vcENvdW50ID0gMDtcbiAgbGV0IGN1cnJlbnRTdGF0ZSA9ICcnO1xuICBkbyB7XG4gICAgY29uc3QgYWJvcnRSZWFzb24gPSBhd2FpdCBjdHguc3RlcChgJHtzdGVwUHJlZml4fS13YWl0LWxpbWl0LWNoZWNrLSR7bG9vcENvdW50fWAsIGFzeW5jICgpID0+XG4gICAgICBnZXRXYWl0QWJvcnRSZWFzb24obG9vcENvdW50LCBzdGFydGVkQXRNcywgRGF0ZS5ub3coKSwgd2FpdExpbWl0cyksXG4gICAgKTtcbiAgICBpZiAoYWJvcnRSZWFzb24pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRSZXNvdXJjZVdhaXRGYWlsdXJlKGFib3J0UmVhc29uLCB7XG4gICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgIG1vZGU6IHBhcmFtcy5Nb2RlLFxuICAgICAgICBjdXJyZW50U3RhdGU6IGN1cnJlbnRTdGF0ZSB8fCAndW5rbm93bicsXG4gICAgICAgIGxvb3BDb3VudCxcbiAgICAgICAgbGltaXRzOiB3YWl0TGltaXRzLFxuICAgICAgfSk7XG4gICAgICBjdHgubG9nZ2VyLmVycm9yKCdwcm9jZXNzT25lUmVzb3VyY2U6IHdhaXQgbGltaXQgZXhjZWVkZWQnLCB7XG4gICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgIGFib3J0UmVhc29uLFxuICAgICAgICBsb29wQ291bnQsXG4gICAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICAgICAgbWF4TG9vcENvdW50OiB3YWl0TGltaXRzLm1heExvb3BDb3VudCxcbiAgICAgICAgbWF4RWxhcHNlZFNlY29uZHM6IHdhaXRMaW1pdHMubWF4RWxhcHNlZFNlY29uZHMsXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50U3RhdGUgPSBhd2FpdCBjdHguc3RlcChgJHtzdGVwUHJlZml4fS1kZXNjcmliZS0ke2xvb3BDb3VudH1gLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBlYzIgPSBuZXcgRUMyQ2xpZW50KHt9KTtcbiAgICAgIGNvbnN0IG91dCA9IGF3YWl0IGVjMi5zZW5kKG5ldyBEZXNjcmliZUluc3RhbmNlc0NvbW1hbmQoeyBJbnN0YW5jZUlkczogW2lkZW50aWZpZXJdIH0pKTtcbiAgICAgIHJldHVybiBvdXQuUmVzZXJ2YXRpb25zPy5bMF0/Lkluc3RhbmNlcz8uWzBdPy5TdGF0ZT8uTmFtZSA/PyAndW5rbm93bic7XG4gICAgfSk7XG5cbiAgICBjdHgubG9nZ2VyLmluZm8oJ3Byb2Nlc3NPbmVSZXNvdXJjZTogZGVzY3JpYmVkJywge1xuICAgICAgaWRlbnRpZmllcixcbiAgICAgIGxvb3BDb3VudCxcbiAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICAgIG1vZGU6IHBhcmFtcy5Nb2RlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbW9kZSA9IHBhcmFtcy5Nb2RlO1xuXG4gICAgaWYgKG1vZGUgPT09ICdTdGFydCcgJiYgY3VycmVudFN0YXRlID09PSAnc3RvcHBlZCcpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygncHJvY2Vzc09uZVJlc291cmNlOiBzdGFydGluZyBpbnN0YW5jZScsIHsgaWRlbnRpZmllciwgbG9vcENvdW50IH0pO1xuICAgICAgYXdhaXQgY3R4LnN0ZXAoYCR7c3RlcFByZWZpeH0tc3RhcnQtJHtsb29wQ291bnR9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBlYzIgPSBuZXcgRUMyQ2xpZW50KHt9KTtcbiAgICAgICAgYXdhaXQgZWMyLnNlbmQobmV3IFN0YXJ0SW5zdGFuY2VzQ29tbWFuZCh7IEluc3RhbmNlSWRzOiBbaWRlbnRpZmllcl0gfSkpO1xuICAgICAgfSk7XG4gICAgICBjdHgubG9nZ2VyLmluZm8oJ3Byb2Nlc3NPbmVSZXNvdXJjZTogd2FpdCBhZnRlciBzdGFydCcsIHtcbiAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgc2Vjb25kczogU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGN0eC53YWl0KHsgc2Vjb25kczogU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMgfSk7XG4gICAgICBsb29wQ291bnQgKz0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChtb2RlID09PSAnU3RvcCcgJiYgY3VycmVudFN0YXRlID09PSAncnVubmluZycpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygncHJvY2Vzc09uZVJlc291cmNlOiBzdG9wcGluZyBpbnN0YW5jZScsIHsgaWRlbnRpZmllciwgbG9vcENvdW50IH0pO1xuICAgICAgYXdhaXQgY3R4LnN0ZXAoYCR7c3RlcFByZWZpeH0tc3RvcC0ke2xvb3BDb3VudH1gLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVjMiA9IG5ldyBFQzJDbGllbnQoe30pO1xuICAgICAgICBhd2FpdCBlYzIuc2VuZChuZXcgU3RvcEluc3RhbmNlc0NvbW1hbmQoeyBJbnN0YW5jZUlkczogW2lkZW50aWZpZXJdIH0pKTtcbiAgICAgIH0pO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdwcm9jZXNzT25lUmVzb3VyY2U6IHdhaXQgYWZ0ZXIgc3RvcCcsIHtcbiAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgc2Vjb25kczogU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGN0eC53YWl0KHsgc2Vjb25kczogU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMgfSk7XG4gICAgICBsb29wQ291bnQgKz0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNEZXNpcmVkU3RhYmxlU3RhdGUobW9kZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgaWYgKGlzVHJhbnNpdGlvbmluZ1N0YXRlKG1vZGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgY3R4LmxvZ2dlci5pbmZvKCdwcm9jZXNzT25lUmVzb3VyY2U6IHdhaXQgd2hpbGUgdHJhbnNpdGlvbmluZycsIHtcbiAgICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICAgIGxvb3BDb3VudCxcbiAgICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgbW9kZSxcbiAgICAgICAgICBzZWNvbmRzOiBTVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EUyxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGN0eC53YWl0KHsgc2Vjb25kczogU1RBVFVTX0NIQU5HRV9XQUlUX1NFQ09ORFMgfSk7XG4gICAgICAgIGxvb3BDb3VudCArPSAxO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IGZvcm1hdFJlc291cmNlV2FpdEZhaWx1cmUoJ1VuZXhwZWN0ZWRJbnN0YW5jZVN0YXRlJywge1xuICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICBtb2RlLFxuICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgIGxvb3BDb3VudCxcbiAgICAgICAgbGltaXRzOiB3YWl0TGltaXRzLFxuICAgICAgfSk7XG4gICAgICBjdHgubG9nZ2VyLmVycm9yKCdwcm9jZXNzT25lUmVzb3VyY2U6IHVuZXhwZWN0ZWQgc3RhdGUnLCB7XG4gICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICAgICAgbG9vcENvdW50LFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICB9IHdoaWxlICghaXNEZXNpcmVkU3RhYmxlU3RhdGUocGFyYW1zLk1vZGUsIGN1cnJlbnRTdGF0ZSkpO1xuXG4gIGN0eC5sb2dnZXIuaW5mbygncHJvY2Vzc09uZVJlc291cmNlOiByZWFjaGVkIGRlc2lyZWQgc3RhYmxlIHN0YXRlJywge1xuICAgIGlkZW50aWZpZXIsXG4gICAgZmluYWxTdGF0ZTogY3VycmVudFN0YXRlLFxuICAgIG1vZGU6IHBhcmFtcy5Nb2RlLFxuICAgIGxvb3BDb3VudCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZGVudGlmaWVyLFxuICAgIGFjY291bnQsXG4gICAgcmVnaW9uLFxuICAgIHJlc291cmNlOiB0YXJnZXRSZXNvdXJjZSxcbiAgICBzdGF0dXM6IGN1cnJlbnRTdGF0ZSxcbiAgfTtcbn07XG5cbi8qKlxuICogRHVyYWJsZSBMYW1iZGEgZW50cnkgcG9pbnQgZm9yIHRoZSBFQzIgcnVubmluZyBzY2hlZHVsZXIuXG4gKlxuICogUmVzb2x2ZXMgaW5zdGFuY2VzIHZpYSBSZXNvdXJjZSBHcm91cHMgVGFnZ2luZyBBUEksIHJ1bnMge0BsaW5rIHByb2Nlc3NPbmVSZXNvdXJjZX0gZm9yIGVhY2ggQVJOXG4gKiBpbiBwYXJhbGxlbCAoYm91bmRlZCBjb25jdXJyZW5jeSksIHBvc3RzIGEgcGFyZW50IFNsYWNrIG1lc3NhZ2UgYW5kIHBlci1pbnN0YW5jZSB0aHJlYWQgcmVwbGllcyxcbiAqIGFuZCB1c2VzIGR1cmFibGUgYHN0ZXBgIC8gYHdhaXRgIC8gYG1hcGAgc28gdGhlIHJ1biBjYW4gcmVzdW1lIGFjcm9zcyBzdXNwZW5zaW9ucy5cbiAqXG4gKiBSZWFkcyBwZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgZnJvbSBgUFJPQ0VTU19SRVNPVVJDRV9NQVhfTE9PUF9DT1VOVGAgYW5kXG4gKiBgUFJPQ0VTU19SRVNPVVJDRV9NQVhfRUxBUFNFRF9TRUNPTkRTYCB2aWEge0BsaW5rIHBhcnNlUmVzb3VyY2VXYWl0TGltaXRzRnJvbUVudn0uXG4gKiBMb2FkcyB0aGUgU2xhY2sgc2VjcmV0IHZpYSB7QGxpbmsgc2VjcmV0RmV0Y2hlcn0gKFBhcmFtZXRlcnMgYW5kIFNlY3JldHMgTGFtYmRhIEV4dGVuc2lvbikuXG4gKiBTbGFjayBBUEkgZmFpbHVyZXMgYXJlIGxvZ2dlZCBhcyBgcnVubmluZy1zY2hlZHVsZXI6IFNsYWNrIHBvc3QgZmFpbGVkYCBmb3IgQ2xvdWRXYXRjaCBsb2cgZmlsdGVycy5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgLSBQYXlsb2FkIGZyb20gRXZlbnRCcmlkZ2UgU2NoZWR1bGVyOyBtdXN0IGluY2x1ZGUgYFBhcmFtcy5UYWdLZXlgLCBgUGFyYW1zLlRhZ1ZhbHVlc2AsIGBQYXJhbXMuTW9kZWAuXG4gKiBAcGFyYW0gY3R4IC0gUm9vdCBkdXJhYmxlIGV4ZWN1dGlvbiBjb250ZXh0LlxuICogQHJldHVybnNcbiAqIC0gYHsgc3RhdHVzOiAnVGFyZ2V0UmVzb3VyY2VzTm90Rm91bmQnIH1gIHdoZW4gbm8gaW5zdGFuY2VzIG1hdGNoIHRoZSB0YWcgZmlsdGVyLlxuICogLSBgeyBzdGF0dXM6ICdDb21wbGV0ZWQnLCBwcm9jZXNzZWQsIHJlc3VsdHMgfWAgd2hlbiBpbnN0YW5jZXMgd2VyZSBoYW5kbGVkIChgcmVzdWx0c2AgZW50cmllcyBtYXRjaCB7QGxpbmsgcHJvY2Vzc09uZVJlc291cmNlfSByZXR1cm4gc2hhcGUpLlxuICogQHRocm93cyB7RXJyb3J9IElmIGBQYXJhbXNgIGlzIGludmFsaWQsIHdhaXQgZW52IHZhcnMgYXJlIG5vdCBwb3NpdGl2ZSBpbnRlZ2VycyxcbiAqICAgdGhlIFNsYWNrIHNlY3JldCBpcyBpbmNvbXBsZXRlLCBpbnN0YW5jZSBwcm9jZXNzaW5nIGZhaWxzIChpbmNsdWRpbmcgYFJlc291cmNlV2FpdEZhaWxlZDoqYCBlcnJvcnMpLFxuICogICBvciB0aGUgc2VjcmV0IGNhbm5vdCBiZSByZWFkIGZyb20gdGhlIGV4dGVuc2lvbiAoZS5nLiBvdXRzaWRlIExhbWJkYSBvciBtaXNzaW5nIGBBV1NfU0VTU0lPTl9UT0tFTmApLlxuICogQHRocm93cyB7aW1wb3J0KCdzdHJpY3QtZW52LXJlc29sdmVyJykuU3RyaWN0RW52VmFsaWRhdGlvbkVycm9yfSBXaGVuIHJlcXVpcmVkIGVudiB2YXJzIGFyZSBtaXNzaW5nIG9yIG5vdCB2YWxpZCBudW1iZXJzLlxuICogQHRocm93cyB7aW1wb3J0KCdmZXRjaC1yZXRyaWVyJykuRmV0Y2hSZXRyaWVySHR0cEVycm9yfSBXaGVuIHRoZSBleHRlbnNpb24gcmV0dXJucyBhIG5vbi1yZXRyaWFibGUgSFRUUCBlcnJvci5cbiAqIEB0aHJvd3Mge2ltcG9ydCgnZmV0Y2gtcmV0cmllcicpLkZldGNoUmV0cmllck5ldHdvcmtFcnJvcn0gV2hlbiBleHRlbnNpb24gcmVxdWVzdHMgZmFpbCBhdCB0aGUgbmV0d29yayBsZXZlbC5cbiAqIEB0aHJvd3Mge2ltcG9ydCgnZmV0Y2gtcmV0cmllcicpLkZldGNoUmV0cmllckFib3J0RXJyb3J9IFdoZW4gZXh0ZW5zaW9uIHJlcXVlc3RzIHRpbWUgb3V0IGFmdGVyIGFsbCByZXRyaWVzLlxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IHdpdGhEdXJhYmxlRXhlY3V0aW9uKGFzeW5jIChldmVudDogU2NoZWR1bGVyRXZlbnQsIGN0eDogRHVyYWJsZUNvbnRleHQpID0+IHtcblxuICBjb25zdCBwYXJhbXMgPSBldmVudC5QYXJhbXM7XG5cbiAgY3R4LmxvZ2dlci5pbmZvKCdydW5uaW5nLXNjaGVkdWxlcjogaW52b2NhdGlvbicsIHtcbiAgICBtb2RlOiBwYXJhbXM/Lk1vZGUsXG4gICAgdGFnS2V5OiBwYXJhbXM/LlRhZ0tleSxcbiAgICB0YWdWYWx1ZUNvdW50OiBwYXJhbXM/LlRhZ1ZhbHVlcz8ubGVuZ3RoID8/IDAsXG4gIH0pO1xuXG4gIGlmICghcGFyYW1zPy5UYWdLZXkgfHwgIXBhcmFtcz8uVGFnVmFsdWVzIHx8ICFwYXJhbXM/Lk1vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZXZlbnQ6IFBhcmFtcy5UYWdLZXksIFBhcmFtcy5UYWdWYWx1ZXMsIFBhcmFtcy5Nb2RlIGFyZSByZXF1aXJlZC4nKTtcbiAgfVxuXG4gIGNvbnN0IHdhaXRMaW1pdHMgPSBwYXJzZVJlc291cmNlV2FpdExpbWl0c0Zyb21FbnYoKTtcblxuICBjb25zdCBzbGFja1NlY3JldE5hbWUgPSBTdHJpY3RFbnZSZXNvbHZlci5yZXNvbHZlKCdTTEFDS19TRUNSRVRfTkFNRScsIFN0cmljdEVudlR5cGUuU3RyaW5nKTtcblxuICBjb25zdCBzbGFja1NlY3JldFZhbHVlID0gYXdhaXQgY3R4LnN0ZXAoJ2ZldGNoLXNsYWNrLXNlY3JldCcsIGFzeW5jICgpID0+IHtcbiAgICBjdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBmZXRjaGluZyBTbGFjayBzZWNyZXQnLCB7IHNlY3JldE5hbWU6IHNsYWNrU2VjcmV0TmFtZSB9KTtcbiAgICByZXR1cm4gc2VjcmV0RmV0Y2hlci5nZXRTZWNyZXRWYWx1ZTxTbGFja1NlY3JldD4oc2xhY2tTZWNyZXROYW1lLCBTTEFDS19TRUNSRVRfRkVUQ0hfT1BUSU9OUyk7XG4gIH0pO1xuXG4gIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IFNsYWNrIHNlY3JldCBsb2FkZWQnKTtcblxuICBpZiAoIXNsYWNrU2VjcmV0VmFsdWU/LnRva2VuIHx8ICFzbGFja1NlY3JldFZhbHVlPy5jaGFubmVsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTbGFjayBzZWNyZXQgbXVzdCBjb250YWluIHRva2VuIGFuZCBjaGFubmVsLicpO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0UmVzb3VyY2VzID0gYXdhaXQgY3R4LnN0ZXAoJ2dldC10YXJnZXQtcmVzb3VyY2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBSZXNvdXJjZUdyb3Vwc1RhZ2dpbmdBUElDbGllbnQoe30pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC5zZW5kKFxuICAgICAgbmV3IEdldFJlc291cmNlc0NvbW1hbmQoe1xuICAgICAgICBSZXNvdXJjZVR5cGVGaWx0ZXJzOiBbJ2VjMjppbnN0YW5jZSddLFxuICAgICAgICBUYWdGaWx0ZXJzOiBbeyBLZXk6IHBhcmFtcy5UYWdLZXksIFZhbHVlczogcGFyYW1zLlRhZ1ZhbHVlcyB9XSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3QgYXJucyA9IChyZXN1bHQuUmVzb3VyY2VUYWdNYXBwaW5nTGlzdCA/PyBbXSlcbiAgICAgIC5tYXAoKG06IHsgUmVzb3VyY2VBUk4/OiBzdHJpbmcgfSkgPT4gbS5SZXNvdXJjZUFSTilcbiAgICAgIC5maWx0ZXIoKGFybjogc3RyaW5nIHwgdW5kZWZpbmVkKTogYXJuIGlzIHN0cmluZyA9PiBhcm4gIT0gbnVsbCk7XG4gICAgY3R4LmxvZ2dlci5pbmZvKCdydW5uaW5nLXNjaGVkdWxlcjogZ2V0LXRhcmdldC1yZXNvdXJjZXMgZG9uZScsIHsgY291bnQ6IGFybnMubGVuZ3RoIH0pO1xuICAgIHJldHVybiBhcm5zO1xuICB9KTtcblxuICBpZiAodGFyZ2V0UmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IG5vIG1hdGNoaW5nIGluc3RhbmNlcycsIHsgdGFnS2V5OiBwYXJhbXMuVGFnS2V5IH0pO1xuICAgIHJldHVybiB7IHN0YXR1czogJ1RhcmdldFJlc291cmNlc05vdEZvdW5kJyBhcyBjb25zdCB9O1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gbmV3IFdlYkNsaWVudChzbGFja1NlY3JldFZhbHVlLnRva2VuKTtcbiAgY29uc3QgY2hhbm5lbCA9IHNsYWNrU2VjcmV0VmFsdWUuY2hhbm5lbDtcblxuICBjdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBwb3N0aW5nIHBhcmVudCBTbGFjayBtZXNzYWdlJywge1xuICAgIGluc3RhbmNlQ291bnQ6IHRhcmdldFJlc291cmNlcy5sZW5ndGgsXG4gIH0pO1xuXG4gIC8vIHNlbmQgc2xhY2sgbWVzc2FnZVxuICBjb25zdCBzbGFja1BhcmVudE1lc3NhZ2VSZXN1bHQgPSBhd2FpdCBjdHguc3RlcCgncG9zdC1zbGFjay1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5jaGF0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgdGV4dDogYCR7cGFyYW1zLk1vZGUgPT09ICdTdGFydCcgPyAn8J+YhiBTdGFydHMnIDogJ/CfpbEgU3RvcHMnfSB0aGUgc2NoZWR1bGVkIEVDMiBJbnN0YW5jZS5gLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGN0eC5sb2dnZXIuZXJyb3IoJ3J1bm5pbmctc2NoZWR1bGVyOiBTbGFjayBwb3N0IGZhaWxlZCcsIHtcbiAgICAgICAgc3RlcDogJ3Bvc3Qtc2xhY2stbWVzc2FnZXMnLFxuICAgICAgICBjaGFubmVsLFxuICAgICAgICBlcnJvck1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9KTtcblxuICBjdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBwYXJlbnQgU2xhY2sgbWVzc2FnZSBwb3N0ZWQnLCB7XG4gICAgdGhyZWFkVHM6IHNsYWNrUGFyZW50TWVzc2FnZVJlc3VsdD8udHMgPz8gbnVsbCxcbiAgfSk7XG5cbiAgY3R4LmxvZ2dlci5pbmZvKCdydW5uaW5nLXNjaGVkdWxlcjogc3RhcnRpbmcgcGFyYWxsZWwgaW5zdGFuY2UgcHJvY2Vzc2luZycsIHtcbiAgICBjb3VudDogdGFyZ2V0UmVzb3VyY2VzLmxlbmd0aCxcbiAgICBtYXhDb25jdXJyZW5jeTogMTAsXG4gIH0pO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjdHgubWFwKFxuICAgIHRhcmdldFJlc291cmNlcyxcbiAgICAvLyBhc3luYyAoY3R4OiBEdXJhYmxlQ29udGV4dCwgdGFyZ2V0UmVzb3VyY2U6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT5cbiAgICAvLyAgIGN0eC5zdGVwKGBwcm9jZXNzLXJlc291cmNlLSR7aW5kZXh9YCwgYXN5bmMgKCkgPT5cbiAgICAvLyAgICAgcHJvY2Vzc09uZVJlc291cmNlKGN0eCwgdGFyZ2V0UmVzb3VyY2UsIHBhcmFtcywgaW5kZXgpLFxuICAgIC8vICAgKSxcbiAgICBhc3luYyAobWFwQ3R4OiBEdXJhYmxlQ29udGV4dCwgdGFyZ2V0UmVzb3VyY2U6IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIG1hcEN0eC5ydW5JbkNoaWxkQ29udGV4dChgcmVzb3VyY2UtJHtpbmRleH1gLCBhc3luYyAoY2hpbGRDdHg6IER1cmFibGVDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb2Nlc3NPbmVSZXNvdXJjZShjaGlsZEN0eCwgdGFyZ2V0UmVzb3VyY2UsIHBhcmFtcywgaW5kZXgsIHdhaXRMaW1pdHMpO1xuICAgICAgICAvLyBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ3NraXBwZWQnKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gfVxuICAgICAgICBjaGlsZEN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IHBvc3RpbmcgdGhyZWFkIFNsYWNrIG1lc3NhZ2UnLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgaWRlbnRpZmllcjogcmVzdWx0LmlkZW50aWZpZXIsXG4gICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gc2VuZCBzbGFjayB0aHJlYWQgbWVzc2FnZVxuICAgICAgICBhd2FpdCBjaGlsZEN0eC5zdGVwKCdwb3N0LXNsYWNrLWNoaWxkLW1lc3NhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXkgPSBnZXRTdGF0ZURpc3BsYXkocmVzdWx0LnN0YXR1cyk7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGNsaWVudC5jaGF0LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICAgICAgdGhyZWFkX3RzOiBzbGFja1BhcmVudE1lc3NhZ2VSZXN1bHQ/LnRzLFxuICAgICAgICAgICAgICBhdHRhY2htZW50czogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzM2YTY0ZicsXG4gICAgICAgICAgICAgICAgICBwcmV0ZXh0OiBgJHtkaXNwbGF5Py5lbW9qaX0gVGhlIHN0YXR1cyBvZiB0aGUgRUMyIEluc3RhbmNlICR7cmVzdWx0LmlkZW50aWZpZXJ9IGNoYW5nZWQgdG8gJHtkaXNwbGF5Py5uYW1lfSBkdWUgdG8gdGhlIHNjaGVkdWxlLmAsXG4gICAgICAgICAgICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyB0aXRsZTogJ0FjY291bnQnLCB2YWx1ZTogcmVzdWx0LmFjY291bnQsIHNob3J0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdSZWdpb24nLCB2YWx1ZTogcmVzdWx0LnJlZ2lvbiwgc2hvcnQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0aXRsZTogJ0lkZW50aWZpZXInLCB2YWx1ZTogcmVzdWx0LmlkZW50aWZpZXIsIHNob3J0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdTdGF0dXMnLCB2YWx1ZTogKGRpc3BsYXk/Lm5hbWUgPz8gJ1Vua25vd24nKSwgc2hvcnQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjaGlsZEN0eC5sb2dnZXIuZXJyb3IoJ3J1bm5pbmctc2NoZWR1bGVyOiBTbGFjayBwb3N0IGZhaWxlZCcsIHtcbiAgICAgICAgICAgICAgc3RlcDogJ3Bvc3Qtc2xhY2stY2hpbGQtbWVzc2FnZXMnLFxuICAgICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiByZXN1bHQuaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHsgbWF4Q29uY3VycmVuY3k6IDEwIH0sXG4gICk7XG5cbiAgY29uc3QgcmVzdWx0TGlzdCA9IEFycmF5LmlzQXJyYXkocmVzdWx0cykgPyByZXN1bHRzIDogW107XG4gIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IGNvbXBsZXRlZCcsIHtcbiAgICBwcm9jZXNzZWQ6IHRhcmdldFJlc291cmNlcy5sZW5ndGgsXG4gICAgcmVzdWx0Q291bnQ6IHJlc3VsdExpc3QubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6ICdDb21wbGV0ZWQnIGFzIGNvbnN0LFxuICAgIHByb2Nlc3NlZDogdGFyZ2V0UmVzb3VyY2VzLmxlbmd0aCxcbiAgICByZXN1bHRzOiByZXN1bHRMaXN0LFxuICB9O1xufSk7XG4iXX0=
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1zY2hlZHVsZXIubGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Z1bmNzL3J1bm5pbmctc2NoZWR1bGVyLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7R0FPRzs7O0FBRUgsNEVBQTBGO0FBQzFGLG9EQUs2QjtBQUM3QixvR0FBa0g7QUFDbEgsNENBQTJDO0FBQzNDLHlFQUFzRjtBQUN0Riw2REFBdUU7QUFDdkUsaUZBTXdDO0FBQ3hDLDZFQUEwRztBQUUxRyx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLEdBQUc7SUFDakIsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtJQUNsRCxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0NBQzFDLENBQUM7QUFFWDs7Ozs7R0FLRztBQUNILE1BQU0sMEJBQTBCLEdBQTBCO0lBQ3hELFNBQVMsRUFBRSxJQUFJO0lBQ2YsT0FBTyxFQUFFLENBQUM7SUFDVixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBMkJGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFjLEVBQXdCLEVBQUU7SUFDN0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDakQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFB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VSxFQUFFLE1BQU0sQ0FBQyxVQUFVO3dCQUM3QixZQUFZLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztxQkFDckUsQ0FBQyxDQUFDO29CQUNILE1BQU0sS0FBSyxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsY0FBYyxFQUFFLENBQ25CLENBQUM7SUFFRixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN6RCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtRQUM5QyxTQUFTLEVBQUUsZUFBZSxDQUFDLE1BQU07UUFDakMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxNQUFNO0tBQy9CLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBb0I7UUFDNUIsU0FBUyxFQUFFLGVBQWUsQ0FBQyxNQUFNO1FBQ2pDLE9BQU8sRUFBRSxVQUFVO0tBQ3BCLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRUMyIFJ1bm5pbmcgU2NoZWR1bGVyIOKAkyBEdXJhYmxlIEZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBJbXBsZW1lbnRzIHRoZSBydW5uaW5nLWNvbnRyb2wgZmxvdyB1c2luZyBBV1MgTGFtYmRhIER1cmFibGUgRXhlY3V0aW9uLlxuICogU3RlcCBjaGVja3BvaW50cywgd2FpdCAobm8gY2hhcmdlKSwgYW5kIHBhcmFsbGVsIG1hcCBwcm92aWRlIGEgZmxvdyBlcXVpdmFsZW50IHRvIFN0ZXAgRnVuY3Rpb25zLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvZHVyYWJsZS1leGVjdXRpb24tc2RrLmh0bWxcbiAqL1xuXG5pbXBvcnQgeyB3aXRoRHVyYWJsZUV4ZWN1dGlvbiwgdHlwZSBEdXJhYmxlQ29udGV4dCB9IGZyb20gJ0Bhd3MvZHVyYWJsZS1leGVjdXRpb24tc2RrLWpzJztcbmltcG9ydCB7XG4gIEVDMkNsaWVudCxcbiAgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kLFxuICBTdGFydEluc3RhbmNlc0NvbW1hbmQsXG4gIFN0b3BJbnN0YW5jZXNDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWMyJztcbmltcG9ydCB7IEdldFJlc291cmNlc0NvbW1hbmQsIFJlc291cmNlR3JvdXBzVGFnZ2luZ0FQSUNsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1yZXNvdXJjZS1ncm91cHMtdGFnZ2luZy1hcGknO1xuaW1wb3J0IHsgV2ViQ2xpZW50IH0gZnJvbSAnQHNsYWNrL3dlYi1hcGknO1xuaW1wb3J0IHsgc2VjcmV0RmV0Y2hlciwgdHlwZSBHZXRTZWNyZXRWYWx1ZU9wdGlvbnMgfSBmcm9tICdhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyJztcbmltcG9ydCB7IFN0cmljdEVudlJlc29sdmVyLCBTdHJpY3RFbnZUeXBlIH0gZnJvbSAnc3RyaWN0LWVudi1yZXNvbHZlcic7XG5pbXBvcnQge1xuICBmb3JtYXRSZXNvdXJjZVdhaXRGYWlsdXJlLFxuICBnZXRXYWl0QWJvcnRSZWFzb24sXG4gIGlzRGVzaXJlZFN0YWJsZVN0YXRlLFxuICBpc1RyYW5zaXRpb25pbmdTdGF0ZSxcbiAgdHlwZSBSZXNvdXJjZVdhaXRMaW1pdHMsXG59IGZyb20gJy4vcnVubmluZy1zY2hlZHVsZXItcHJlZGljYXRlcyc7XG5pbXBvcnQgeyBwYXJzZU1heENvbmN1cnJlbmN5RnJvbUVudiwgcGFyc2VSZXNvdXJjZVdhaXRMaW1pdHNGcm9tRW52IH0gZnJvbSAnLi9ydW5uaW5nLXNjaGVkdWxlci13YWl0LWVudic7XG5cbi8qKiBNYXBwaW5nIG9mIEVDMiBpbnN0YW5jZSBzdGF0ZSB0byBkaXNwbGF5IG5hbWUgYW5kIGVtb2ppIGZvciBTbGFjay4gKi9cbmNvbnN0IFNUQVRFX0xJU1QgPSBbXG4gIHsgbmFtZTogJ1JVTk5JTkcnLCBlbW9qaTogJ/CfmIYnLCBzdGF0ZTogJ3J1bm5pbmcnIH0sXG4gIHsgbmFtZTogJ1NUT1BQRUQnLCBlbW9qaTogJ/CfmLQnLCBzdGF0ZTogJ3N0b3BwZWQnIH0sXG5dIGFzIGNvbnN0O1xuXG4vKipcbiAqIE9wdGlvbnMgcGFzc2VkIHRvIHtAbGluayBzZWNyZXRGZXRjaGVyLmdldFNlY3JldFZhbHVlfSB3aGVuIGxvYWRpbmcgdGhlIFNsYWNrIHNlY3JldC5cbiAqXG4gKiBSZXRyaWVzIGNvdmVyIHRyYW5zaWVudCBleHRlbnNpb24gSFRUUCBlcnJvcnMgKDV4eCwgNDI5KSBhbmQgdGhlIGV4dGVuc2lvblxuICogXCJub3QgcmVhZHkgdG8gc2VydmUgdHJhZmZpY1wiIHJlc3BvbnNlIGR1cmluZyBjb2xkIHN0YXJ0cy5cbiAqL1xuY29uc3QgU0xBQ0tfU0VDUkVUX0ZFVENIX09QVElPTlM6IEdldFNlY3JldFZhbHVlT3B0aW9ucyA9IHtcbiAgdGltZW91dE1zOiAzMDAwLFxuICByZXRyaWVzOiA1LFxuICBiYXNlQmFja29mZk1zOiAzMDAsXG59O1xuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZnJvbSBFdmVudEJyaWRnZSBTY2hlZHVsZXIgaW52b2tpbmcgdGhpcyBMYW1iZGEuXG4gKlxuICogQHNlZSB7QGxpbmsgaGFuZGxlcn1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZXJFdmVudCB7XG4gIC8qKiBTY2hlZHVsZXIgaW52b2NhdGlvbiBwYXJhbWV0ZXJzICh0YWcgZmlsdGVyIGFuZCBzdGFydC9zdG9wIG1vZGUpLiAqL1xuICBQYXJhbXM6IHtcbiAgICAvKiogVGFnIGtleSB1c2VkIHRvIHNlbGVjdCBFQzIgaW5zdGFuY2VzLiAqL1xuICAgIFRhZ0tleTogc3RyaW5nO1xuICAgIC8qKiBUYWcgdmFsdWVzIHRvIG1hdGNoLiAqL1xuICAgIFRhZ1ZhbHVlczogc3RyaW5nW107XG4gICAgLyoqIFdoZXRoZXIgdG8gc3RhcnQgb3Igc3RvcCBpbnN0YW5jZXMuICovXG4gICAgTW9kZTogJ1N0YXJ0JyB8ICdTdG9wJztcbiAgfTtcbn1cblxuLyoqIFNsYWNrIGNyZWRlbnRpYWxzIGFuZCBkZWZhdWx0IGNoYW5uZWwgbG9hZGVkIGZyb20gU2VjcmV0cyBNYW5hZ2VyIChgU0xBQ0tfU0VDUkVUX05BTUVgKS4gKi9cbmludGVyZmFjZSBTbGFja1NlY3JldCB7XG4gIC8qKiBTbGFjayBib3QgdG9rZW4gZm9yIHRoZSBTbGFjayBgV2ViQ2xpZW50YC4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIENoYW5uZWwgSUQgb3IgbmFtZSBwYXNzZWQgdG8gYGNoYXQucG9zdE1lc3NhZ2VgLiAqL1xuICBjaGFubmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHNlY3JldCBwYXlsb2FkIGlzIGEgSlNPTiBvYmplY3Qgd2l0aCBub24tZW1wdHkgU2xhY2sgYHRva2VuYCBhbmQgYGNoYW5uZWxgLlxuICpcbiAqIGBhd3MtbGFtYmRhLXNlY3JldC1mZXRjaGVyYCBeMC43IHBhcnNlcyBKU09OIHdpdGggcXVpZXQtanNvbi1wYXJzZXI7IGludmFsaWQgb3IgZW1wdHlcbiAqIEpTT04gZmFsbHMgYmFjayB0byB0aGUgb3JpZ2luYWwgc3RyaW5nIGluc3RlYWQgb2YgdGhyb3dpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgcmV0dXJuZWQgYnkge0BsaW5rIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWV9LlxuICogQHJldHVybnMgYHRydWVgIHdoZW4gYHZhbHVlYCBpcyBhIHtAbGluayBTbGFja1NlY3JldH0uXG4gKi9cbmNvbnN0IGlzU2xhY2tTZWNyZXQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTbGFja1NlY3JldCA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghKCd0b2tlbicgaW4gdmFsdWUpIHx8ICEoJ2NoYW5uZWwnIGluIHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlLnRva2VuICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS50b2tlbiA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZS5jaGFubmVsICE9PSAnc3RyaW5nJyB8fCB2YWx1ZS5jaGFubmVsID09PSAnJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBkaXNwbGF5IG5hbWUgYW5kIGVtb2ppIGZvciBhbiBFQzIgaW5zdGFuY2Ugc3RhdGUuXG4gKlxuICogQHBhcmFtIGN1cnJlbnQgLSBDdXJyZW50IGluc3RhbmNlIHN0YXRlIChlLmcuICdydW5uaW5nJywgJ3N0b3BwZWQnKS5cbiAqIEByZXR1cm5zIERpc3BsYXkgaW5mbyBvciB1bmRlZmluZWQgaWYgc3RhdGUgaXMgbm90IGluIFNUQVRFX0xJU1QuXG4gKi9cbmNvbnN0IGdldFN0YXRlRGlzcGxheSA9IChjdXJyZW50OiBzdHJpbmcpOiB7IGVtb2ppOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9IHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgZm91bmQgPSBTVEFURV9MSVNULmZpbmQoKHMpID0+IHMuc3RhdGUgPT09IGN1cnJlbnQpO1xuICByZXR1cm4gZm91bmQgPyB7IGVtb2ppOiBmb3VuZC5lbW9qaSwgbmFtZTogZm91bmQubmFtZSB9IDogdW5kZWZpbmVkO1xufTtcblxuLyoqXG4gKiBQcm9jZXNzZXMgb25lIEVDMiBpbnN0YW5jZTogZGVzY3JpYmVzIHN0YXRlLCBpc3N1ZXMgc3RhcnQvc3RvcCB3aGVuIG5lZWRlZCwgdGhlbiB3YWl0cyB1bnRpbFxuICoge0BsaW5rIGlzRGVzaXJlZFN0YWJsZVN0YXRlfSBpcyBzYXRpc2ZpZWQgKGR1cmFibGUgYHN0ZXBgIC8gYHdhaXRgIGJldHdlZW4gYXR0ZW1wdHMpLlxuICpcbiAqIEVhY2ggbG9vcCBpdGVyYXRpb24gY2hlY2tzIHtAbGluayBnZXRXYWl0QWJvcnRSZWFzb259IGJlZm9yZSBkZXNjcmliZS4gRmFpbHVyZXMgdXNlXG4gKiB7QGxpbmsgZm9ybWF0UmVzb3VyY2VXYWl0RmFpbHVyZX0gKGBSZXNvdXJjZVdhaXRGYWlsZWQ6KmAgbWVzc2FnZSBwcmVmaXgpLlxuICpcbiAqIEBwYXJhbSBjdHggLSBEdXJhYmxlIGV4ZWN1dGlvbiBjb250ZXh0IChjaGlsZCBjb250ZXh0IHBlciBpbnN0YW5jZSByZWNvbW1lbmRlZCkuXG4gKiBAcGFyYW0gdGFyZ2V0UmVzb3VyY2UgLSBFQzIgaW5zdGFuY2UgQVJOLlxuICogQHBhcmFtIHBhcmFtcyAtIFNjaGVkdWxlciBwYXJhbXMgKGBUYWdLZXlgLCBgVGFnVmFsdWVzYCwgYE1vZGVgKS5cbiAqIEBwYXJhbSByZXNvdXJjZUluZGV4IC0gSW5kZXggdXNlZCBpbiBkdXJhYmxlIHN0ZXAgbmFtZXMgZm9yIHRoaXMgcmVzb3VyY2UuXG4gKiBAcGFyYW0gd2FpdExpbWl0cyAtIFBlci1pbnN0YW5jZSBjYXBzIGZyb20ge0BsaW5rIHBhcnNlUmVzb3VyY2VXYWl0TGltaXRzRnJvbUVudn0gKHNldCBieSB0aGUgQ0RLIGNvbnN0cnVjdCkuXG4gKiBAcmV0dXJucyBGaW5hbCByZXNvdXJjZSBBUk4sIEVDMiBzdGF0ZSBuYW1lLCBwYXJzZWQgYWNjb3VudCwgcmVnaW9uLCBhbmQgaW5zdGFuY2UgaWQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2hlbiB3YWl0IGxpbWl0cyBhcmUgZXhjZWVkZWQgKGBNYXhMb29wQ291bnRFeGNlZWRlZGAsIGBNYXhFbGFwc2VkVGltZUV4Y2VlZGVkYCksXG4gKiAgIHRoZSBpbnN0YW5jZSBpcyBpbiBhbiB1bmV4cGVjdGVkIHN0YXRlIChgVW5leHBlY3RlZEluc3RhbmNlU3RhdGVgKSwgb3IgdGhlIGxvb3AgZXhpdHMgd2l0aG91dCBhIHN0YWJsZSBnb2FsIHN0YXRlLlxuICovXG5jb25zdCBwcm9jZXNzT25lUmVzb3VyY2UgPSBhc3luYyAoXG4gIGN0eDogRHVyYWJsZUNvbnRleHQsXG4gIHRhcmdldFJlc291cmNlOiBzdHJpbmcsXG4gIHBhcmFtczogU2NoZWR1bGVyRXZlbnRbJ1BhcmFtcyddLFxuICByZXNvdXJjZUluZGV4OiBudW1iZXIsXG4gIHdhaXRMaW1pdHM6IFJlc291cmNlV2FpdExpbWl0cyxcbik6IFByb21pc2U8eyByZXNvdXJjZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgYWNjb3VudDogc3RyaW5nOyByZWdpb246IHN0cmluZzsgaWRlbnRpZmllcjogc3RyaW5nIH0+ID0+IHtcbiAgY29uc3QgcGFydHMgPSB0YXJnZXRSZXNvdXJjZS5zcGxpdCgnLycpO1xuICBjb25zdCBpZGVudGlmaWVyID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPz8gJ3Vua25vd24nO1xuICBjb25zdCBhcm5QYXJ0cyA9IHRhcmdldFJlc291cmNlLnNwbGl0KCc6Jyk7XG4gIGNvbnN0IGFjY291bnQgPSBhcm5QYXJ0c1s0XSA/PyAnJztcbiAgY29uc3QgcmVnaW9uID0gYXJuUGFydHNbM10gPz8gJyc7XG4gIGNvbnN0IHN0ZXBQcmVmaXggPSBgcmVzb3VyY2UtJHtyZXNvdXJjZUluZGV4fS0ke2lkZW50aWZpZXJ9YDtcblxuICBjdHgubG9nZ2VyLmluZm8oJ3Byb2Nlc3NPbmVSZXNvdXJjZTogc3RhcnQnLCB7XG4gICAgcmVzb3VyY2VJbmRleCxcbiAgICBpZGVudGlmaWVyLFxuICAgIHJlZ2lvbixcbiAgICBhY2NvdW50LFxuICAgIG1vZGU6IHBhcmFtcy5Nb2RlLFxuICAgIG1heExvb3BDb3VudDogd2FpdExpbWl0cy5tYXhMb29wQ291bnQsXG4gICAgbWF4RWxhcHNlZFNlY29uZHM6IHdhaXRMaW1pdHMubWF4RWxhcHNlZFNlY29uZHMsXG4gICAgc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHM6IHdhaXRMaW1pdHMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMsXG4gIH0pO1xuXG4gIGNvbnN0IHN0YXJ0ZWRBdE1zID0gYXdhaXQgY3R4LnN0ZXAoYCR7c3RlcFByZWZpeH0td2FpdC1zdGFydGVkLWF0YCwgYXN5bmMgKCkgPT4gRGF0ZS5ub3coKSk7XG5cbiAgbGV0IGxvb3BDb3VudCA9IDA7XG4gIGxldCBjdXJyZW50U3RhdGUgPSAnJztcbiAgZG8ge1xuICAgIGNvbnN0IGFib3J0UmVhc29uID0gYXdhaXQgY3R4LnN0ZXAoYCR7c3RlcFByZWZpeH0td2FpdC1saW1pdC1jaGVjay0ke2xvb3BDb3VudH1gLCBhc3luYyAoKSA9PlxuICAgICAgZ2V0V2FpdEFib3J0UmVhc29uKGxvb3BDb3VudCwgc3RhcnRlZEF0TXMsIERhdGUubm93KCksIHdhaXRMaW1pdHMpLFxuICAgICk7XG4gICAgaWYgKGFib3J0UmVhc29uKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZm9ybWF0UmVzb3VyY2VXYWl0RmFpbHVyZShhYm9ydFJlYXNvbiwge1xuICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICBtb2RlOiBwYXJhbXMuTW9kZSxcbiAgICAgICAgY3VycmVudFN0YXRlOiBjdXJyZW50U3RhdGUgfHwgJ3Vua25vd24nLFxuICAgICAgICBsb29wQ291bnQsXG4gICAgICAgIGxpbWl0czogd2FpdExpbWl0cyxcbiAgICAgIH0pO1xuICAgICAgY3R4LmxvZ2dlci5lcnJvcigncHJvY2Vzc09uZVJlc291cmNlOiB3YWl0IGxpbWl0IGV4Y2VlZGVkJywge1xuICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICBhYm9ydFJlYXNvbixcbiAgICAgICAgbG9vcENvdW50LFxuICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgIG1heExvb3BDb3VudDogd2FpdExpbWl0cy5tYXhMb29wQ291bnQsXG4gICAgICAgIG1heEVsYXBzZWRTZWNvbmRzOiB3YWl0TGltaXRzLm1heEVsYXBzZWRTZWNvbmRzLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfVxuXG4gICAgY3VycmVudFN0YXRlID0gYXdhaXQgY3R4LnN0ZXAoYCR7c3RlcFByZWZpeH0tZGVzY3JpYmUtJHtsb29wQ291bnR9YCwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZWMyID0gbmV3IEVDMkNsaWVudCh7fSk7XG4gICAgICBjb25zdCBvdXQgPSBhd2FpdCBlYzIuc2VuZChuZXcgRGVzY3JpYmVJbnN0YW5jZXNDb21tYW5kKHsgSW5zdGFuY2VJZHM6IFtpZGVudGlmaWVyXSB9KSk7XG4gICAgICByZXR1cm4gb3V0LlJlc2VydmF0aW9ucz8uWzBdPy5JbnN0YW5jZXM/LlswXT8uU3RhdGU/Lk5hbWUgPz8gJ3Vua25vd24nO1xuICAgIH0pO1xuXG4gICAgY3R4LmxvZ2dlci5pbmZvKCdwcm9jZXNzT25lUmVzb3VyY2U6IGRlc2NyaWJlZCcsIHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBsb29wQ291bnQsXG4gICAgICBjdXJyZW50U3RhdGUsXG4gICAgICBtb2RlOiBwYXJhbXMuTW9kZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG1vZGUgPSBwYXJhbXMuTW9kZTtcblxuICAgIGlmIChtb2RlID09PSAnU3RhcnQnICYmIGN1cnJlbnRTdGF0ZSA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICBjdHgubG9nZ2VyLmluZm8oJ3Byb2Nlc3NPbmVSZXNvdXJjZTogc3RhcnRpbmcgaW5zdGFuY2UnLCB7IGlkZW50aWZpZXIsIGxvb3BDb3VudCB9KTtcbiAgICAgIGF3YWl0IGN0eC5zdGVwKGAke3N0ZXBQcmVmaXh9LXN0YXJ0LSR7bG9vcENvdW50fWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZWMyID0gbmV3IEVDMkNsaWVudCh7fSk7XG4gICAgICAgIGF3YWl0IGVjMi5zZW5kKG5ldyBTdGFydEluc3RhbmNlc0NvbW1hbmQoeyBJbnN0YW5jZUlkczogW2lkZW50aWZpZXJdIH0pKTtcbiAgICAgIH0pO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdwcm9jZXNzT25lUmVzb3VyY2U6IHdhaXQgYWZ0ZXIgc3RhcnQnLCB7XG4gICAgICAgIGlkZW50aWZpZXIsXG4gICAgICAgIHNlY29uZHM6IHdhaXRMaW1pdHMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGN0eC53YWl0KHsgc2Vjb25kczogd2FpdExpbWl0cy5zdGF0dXNDaGFuZ2VXYWl0U2Vjb25kcyB9KTtcbiAgICAgIGxvb3BDb3VudCArPSAxO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG1vZGUgPT09ICdTdG9wJyAmJiBjdXJyZW50U3RhdGUgPT09ICdydW5uaW5nJykge1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdwcm9jZXNzT25lUmVzb3VyY2U6IHN0b3BwaW5nIGluc3RhbmNlJywgeyBpZGVudGlmaWVyLCBsb29wQ291bnQgfSk7XG4gICAgICBhd2FpdCBjdHguc3RlcChgJHtzdGVwUHJlZml4fS1zdG9wLSR7bG9vcENvdW50fWAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZWMyID0gbmV3IEVDMkNsaWVudCh7fSk7XG4gICAgICAgIGF3YWl0IGVjMi5zZW5kKG5ldyBTdG9wSW5zdGFuY2VzQ29tbWFuZCh7IEluc3RhbmNlSWRzOiBbaWRlbnRpZmllcl0gfSkpO1xuICAgICAgfSk7XG4gICAgICBjdHgubG9nZ2VyLmluZm8oJ3Byb2Nlc3NPbmVSZXNvdXJjZTogd2FpdCBhZnRlciBzdG9wJywge1xuICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICBzZWNvbmRzOiB3YWl0TGltaXRzLnN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBjdHgud2FpdCh7IHNlY29uZHM6IHdhaXRMaW1pdHMuc3RhdHVzQ2hhbmdlV2FpdFNlY29uZHMgfSk7XG4gICAgICBsb29wQ291bnQgKz0gMTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICghaXNEZXNpcmVkU3RhYmxlU3RhdGUobW9kZSwgY3VycmVudFN0YXRlKSkge1xuICAgICAgaWYgKGlzVHJhbnNpdGlvbmluZ1N0YXRlKG1vZGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgY3R4LmxvZ2dlci5pbmZvKCdwcm9jZXNzT25lUmVzb3VyY2U6IHdhaXQgd2hpbGUgdHJhbnNpdGlvbmluZycsIHtcbiAgICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICAgIGxvb3BDb3VudCxcbiAgICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgICAgbW9kZSxcbiAgICAgICAgICBzZWNvbmRzOiB3YWl0TGltaXRzLnN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgY3R4LndhaXQoeyBzZWNvbmRzOiB3YWl0TGltaXRzLnN0YXR1c0NoYW5nZVdhaXRTZWNvbmRzIH0pO1xuICAgICAgICBsb29wQ291bnQgKz0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBmb3JtYXRSZXNvdXJjZVdhaXRGYWlsdXJlKCdVbmV4cGVjdGVkSW5zdGFuY2VTdGF0ZScsIHtcbiAgICAgICAgaWRlbnRpZmllcixcbiAgICAgICAgbW9kZSxcbiAgICAgICAgY3VycmVudFN0YXRlLFxuICAgICAgICBsb29wQ291bnQsXG4gICAgICAgIGxpbWl0czogd2FpdExpbWl0cyxcbiAgICAgIH0pO1xuICAgICAgY3R4LmxvZ2dlci5lcnJvcigncHJvY2Vzc09uZVJlc291cmNlOiB1bmV4cGVjdGVkIHN0YXRlJywge1xuICAgICAgICBpZGVudGlmaWVyLFxuICAgICAgICBtb2RlLFxuICAgICAgICBjdXJyZW50U3RhdGUsXG4gICAgICAgIGxvb3BDb3VudCxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgfSB3aGlsZSAoIWlzRGVzaXJlZFN0YWJsZVN0YXRlKHBhcmFtcy5Nb2RlLCBjdXJyZW50U3RhdGUpKTtcblxuICBjdHgubG9nZ2VyLmluZm8oJ3Byb2Nlc3NPbmVSZXNvdXJjZTogcmVhY2hlZCBkZXNpcmVkIHN0YWJsZSBzdGF0ZScsIHtcbiAgICBpZGVudGlmaWVyLFxuICAgIGZpbmFsU3RhdGU6IGN1cnJlbnRTdGF0ZSxcbiAgICBtb2RlOiBwYXJhbXMuTW9kZSxcbiAgICBsb29wQ291bnQsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgaWRlbnRpZmllcixcbiAgICBhY2NvdW50LFxuICAgIHJlZ2lvbixcbiAgICByZXNvdXJjZTogdGFyZ2V0UmVzb3VyY2UsXG4gICAgc3RhdHVzOiBjdXJyZW50U3RhdGUsXG4gIH07XG59O1xuXG4vKipcbiAqIER1cmFibGUgTGFtYmRhIGVudHJ5IHBvaW50IGZvciB0aGUgRUMyIHJ1bm5pbmcgc2NoZWR1bGVyLlxuICpcbiAqIFJlc29sdmVzIGluc3RhbmNlcyB2aWEgUmVzb3VyY2UgR3JvdXBzIFRhZ2dpbmcgQVBJLCBydW5zIHtAbGluayBwcm9jZXNzT25lUmVzb3VyY2V9IGZvciBlYWNoIEFSTlxuICogaW4gcGFyYWxsZWwgKGJvdW5kZWQgY29uY3VycmVuY3kpLCBwb3N0cyBhIHBhcmVudCBTbGFjayBtZXNzYWdlIGFuZCBwZXItaW5zdGFuY2UgdGhyZWFkIHJlcGxpZXMsXG4gKiBhbmQgdXNlcyBkdXJhYmxlIGBzdGVwYCAvIGB3YWl0YCAvIGBtYXBgIHNvIHRoZSBydW4gY2FuIHJlc3VtZSBhY3Jvc3Mgc3VzcGVuc2lvbnMuXG4gKlxuICogUmVhZHMgcGVyLWluc3RhbmNlIHdhaXQgbGltaXRzIGZyb20gYFBST0NFU1NfUkVTT1VSQ0VfTUFYX0xPT1BfQ09VTlRgLFxuICogYFBST0NFU1NfUkVTT1VSQ0VfTUFYX0VMQVBTRURfU0VDT05EU2AsIGFuZCBgUFJPQ0VTU19SRVNPVVJDRV9TVEFUVVNfQ0hBTkdFX1dBSVRfU0VDT05EU2BcbiAqIHZpYSB7QGxpbmsgcGFyc2VSZXNvdXJjZVdhaXRMaW1pdHNGcm9tRW52fSwgYW5kIG1hcCBjb25jdXJyZW5jeSBmcm9tXG4gKiBgUFJPQ0VTU19SRVNPVVJDRVNfTUFYX0NPTkNVUlJFTkNZYCB2aWEge0BsaW5rIHBhcnNlTWF4Q29uY3VycmVuY3lGcm9tRW52fS5cbiAqIExvYWRzIHRoZSBTbGFjayBzZWNyZXQgdmlhIHtAbGluayBzZWNyZXRGZXRjaGVyfSAoUGFyYW1ldGVycyBhbmQgU2VjcmV0cyBMYW1iZGEgRXh0ZW5zaW9uKS5cbiAqIFNsYWNrIEFQSSBmYWlsdXJlcyBhcmUgbG9nZ2VkIGFzIGBydW5uaW5nLXNjaGVkdWxlcjogU2xhY2sgcG9zdCBmYWlsZWRgIGZvciBDbG91ZFdhdGNoIGxvZyBmaWx0ZXJzLlxuICpcbiAqIEBwYXJhbSBldmVudCAtIFBheWxvYWQgZnJvbSBFdmVudEJyaWRnZSBTY2hlZHVsZXI7IG11c3QgaW5jbHVkZSBgUGFyYW1zLlRhZ0tleWAsIGBQYXJhbXMuVGFnVmFsdWVzYCwgYFBhcmFtcy5Nb2RlYC5cbiAqIEBwYXJhbSBjdHggLSBSb290IGR1cmFibGUgZXhlY3V0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJuc1xuICogLSBgeyBzdGF0dXM6ICdUYXJnZXRSZXNvdXJjZXNOb3RGb3VuZCcgfWAgd2hlbiBubyBpbnN0YW5jZXMgbWF0Y2ggdGhlIHRhZyBmaWx0ZXIuXG4gKiAtIGB7IHN0YXR1czogJ0NvbXBsZXRlZCcsIHByb2Nlc3NlZCwgcmVzdWx0cyB9YCB3aGVuIGluc3RhbmNlcyB3ZXJlIGhhbmRsZWQgKGByZXN1bHRzYCBlbnRyaWVzIG1hdGNoIHtAbGluayBwcm9jZXNzT25lUmVzb3VyY2V9IHJldHVybiBzaGFwZSkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgYFBhcmFtc2AgaXMgaW52YWxpZCwgdGhlIFNsYWNrIHNlY3JldCBpcyBpbmNvbXBsZXRlIG9yIG5vdCBKU09OIHdpdGggYHRva2VuYCBhbmQgYGNoYW5uZWxgLFxuICogICBpbnN0YW5jZSBwcm9jZXNzaW5nIGZhaWxzIChpbmNsdWRpbmcgYFJlc291cmNlV2FpdEZhaWxlZDoqYCBlcnJvcnMpLFxuICogICBvciB0aGUgc2VjcmV0IGNhbm5vdCBiZSByZWFkIGZyb20gdGhlIGV4dGVuc2lvbiAoZS5nLiBvdXRzaWRlIExhbWJkYSBvciBtaXNzaW5nIGBBV1NfU0VTU0lPTl9UT0tFTmApLlxuICogQHRocm93cyB7aW1wb3J0KCdzdHJpY3QtZW52LXJlc29sdmVyJykuU3RyaWN0RW52VmFsaWRhdGlvbkVycm9yfSBXaGVuIHJlcXVpcmVkIGVudiB2YXJzIGFyZSBtaXNzaW5nIG9yIG5vdCBwb3NpdGl2ZSBpbnRlZ2Vycy5cbiAqIEB0aHJvd3Mge2ltcG9ydCgnZmV0Y2gtcmV0cmllcicpLkZldGNoUmV0cmllckh0dHBFcnJvcn0gV2hlbiB0aGUgZXh0ZW5zaW9uIHJldHVybnMgYSBub24tcmV0cmlhYmxlIEhUVFAgZXJyb3IuXG4gKiBAdGhyb3dzIHtpbXBvcnQoJ2ZldGNoLXJldHJpZXInKS5GZXRjaFJldHJpZXJOZXR3b3JrRXJyb3J9IFdoZW4gZXh0ZW5zaW9uIHJlcXVlc3RzIGZhaWwgYXQgdGhlIG5ldHdvcmsgbGV2ZWwuXG4gKiBAdGhyb3dzIHtpbXBvcnQoJ2ZldGNoLXJldHJpZXInKS5GZXRjaFJldHJpZXJBYm9ydEVycm9yfSBXaGVuIGV4dGVuc2lvbiByZXF1ZXN0cyB0aW1lIG91dCBhZnRlciBhbGwgcmV0cmllcy5cbiAqIEB0aHJvd3Mge2ltcG9ydCgnZmV0Y2gtcmV0cmllcicpLkZldGNoUmV0cmllckludmFsaWRPcHRpb25zRXJyb3J9IFdoZW4gc2VjcmV0LWZldGNoIHJldHJ5IG9wdGlvbnMgYXJlIGludmFsaWQuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gd2l0aER1cmFibGVFeGVjdXRpb24oYXN5bmMgKGV2ZW50OiBTY2hlZHVsZXJFdmVudCwgY3R4OiBEdXJhYmxlQ29udGV4dCkgPT4ge1xuXG4gIGNvbnN0IHBhcmFtcyA9IGV2ZW50LlBhcmFtcztcblxuICBjdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBpbnZvY2F0aW9uJywge1xuICAgIG1vZGU6IHBhcmFtcz8uTW9kZSxcbiAgICB0YWdLZXk6IHBhcmFtcz8uVGFnS2V5LFxuICAgIHRhZ1ZhbHVlQ291bnQ6IHBhcmFtcz8uVGFnVmFsdWVzPy5sZW5ndGggPz8gMCxcbiAgfSk7XG5cbiAgaWYgKCFwYXJhbXM/LlRhZ0tleSB8fCAhcGFyYW1zPy5UYWdWYWx1ZXMgfHwgIXBhcmFtcz8uTW9kZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBldmVudDogUGFyYW1zLlRhZ0tleSwgUGFyYW1zLlRhZ1ZhbHVlcywgUGFyYW1zLk1vZGUgYXJlIHJlcXVpcmVkLicpO1xuICB9XG5cbiAgY29uc3Qgd2FpdExpbWl0cyA9IHBhcnNlUmVzb3VyY2VXYWl0TGltaXRzRnJvbUVudigpO1xuICBjb25zdCBtYXhDb25jdXJyZW5jeSA9IHBhcnNlTWF4Q29uY3VycmVuY3lGcm9tRW52KCk7XG5cbiAgY29uc3Qgc2xhY2tTZWNyZXROYW1lID0gU3RyaWN0RW52UmVzb2x2ZXIucmVzb2x2ZSgnU0xBQ0tfU0VDUkVUX05BTUUnLCBTdHJpY3RFbnZUeXBlLlN0cmluZyk7XG5cbiAgY29uc3Qgc2xhY2tTZWNyZXRWYWx1ZTogdW5rbm93biA9IGF3YWl0IGN0eC5zdGVwKCdmZXRjaC1zbGFjay1zZWNyZXQnLCBhc3luYyAoKSA9PiB7XG4gICAgY3R4LmxvZ2dlci5pbmZvKCdydW5uaW5nLXNjaGVkdWxlcjogZmV0Y2hpbmcgU2xhY2sgc2VjcmV0JywgeyBzZWNyZXROYW1lOiBzbGFja1NlY3JldE5hbWUgfSk7XG4gICAgcmV0dXJuIHNlY3JldEZldGNoZXIuZ2V0U2VjcmV0VmFsdWUoc2xhY2tTZWNyZXROYW1lLCBTTEFDS19TRUNSRVRfRkVUQ0hfT1BUSU9OUyk7XG4gIH0pO1xuXG4gIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IFNsYWNrIHNlY3JldCBsb2FkZWQnKTtcblxuICBpZiAoIWlzU2xhY2tTZWNyZXQoc2xhY2tTZWNyZXRWYWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NsYWNrIHNlY3JldCBtdXN0IGNvbnRhaW4gdG9rZW4gYW5kIGNoYW5uZWwuJyk7XG4gIH1cblxuICBjb25zdCB0YXJnZXRSZXNvdXJjZXMgPSBhd2FpdCBjdHguc3RlcCgnZ2V0LXRhcmdldC1yZXNvdXJjZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJlc291cmNlR3JvdXBzVGFnZ2luZ0FQSUNsaWVudCh7fSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnNlbmQoXG4gICAgICBuZXcgR2V0UmVzb3VyY2VzQ29tbWFuZCh7XG4gICAgICAgIFJlc291cmNlVHlwZUZpbHRlcnM6IFsnZWMyOmluc3RhbmNlJ10sXG4gICAgICAgIFRhZ0ZpbHRlcnM6IFt7IEtleTogcGFyYW1zLlRhZ0tleSwgVmFsdWVzOiBwYXJhbXMuVGFnVmFsdWVzIH1dLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBhcm5zID0gKHJlc3VsdC5SZXNvdXJjZVRhZ01hcHBpbmdMaXN0ID8/IFtdKVxuICAgICAgLm1hcCgobTogeyBSZXNvdXJjZUFSTj86IHN0cmluZyB9KSA9PiBtLlJlc291cmNlQVJOKVxuICAgICAgLmZpbHRlcigoYXJuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBhcm4gaXMgc3RyaW5nID0+IGFybiAhPSBudWxsKTtcbiAgICBjdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBnZXQtdGFyZ2V0LXJlc291cmNlcyBkb25lJywgeyBjb3VudDogYXJucy5sZW5ndGggfSk7XG4gICAgcmV0dXJuIGFybnM7XG4gIH0pO1xuXG4gIGlmICh0YXJnZXRSZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY3R4LmxvZ2dlci5pbmZvKCdydW5uaW5nLXNjaGVkdWxlcjogbm8gbWF0Y2hpbmcgaW5zdGFuY2VzJywgeyB0YWdLZXk6IHBhcmFtcy5UYWdLZXkgfSk7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiAnVGFyZ2V0UmVzb3VyY2VzTm90Rm91bmQnIGFzIGNvbnN0IH07XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBuZXcgV2ViQ2xpZW50KHNsYWNrU2VjcmV0VmFsdWUudG9rZW4pO1xuICBjb25zdCBjaGFubmVsID0gc2xhY2tTZWNyZXRWYWx1ZS5jaGFubmVsO1xuXG4gIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IHBvc3RpbmcgcGFyZW50IFNsYWNrIG1lc3NhZ2UnLCB7XG4gICAgaW5zdGFuY2VDb3VudDogdGFyZ2V0UmVzb3VyY2VzLmxlbmd0aCxcbiAgfSk7XG5cbiAgLy8gc2VuZCBzbGFjayBtZXNzYWdlXG4gIGNvbnN0IHNsYWNrUGFyZW50TWVzc2FnZVJlc3VsdCA9IGF3YWl0IGN0eC5zdGVwKCdwb3N0LXNsYWNrLW1lc3NhZ2VzJywgYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgY2xpZW50LmNoYXQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICBjaGFubmVsLFxuICAgICAgICB0ZXh0OiBgJHtwYXJhbXMuTW9kZSA9PT0gJ1N0YXJ0JyA/ICfwn5iGIFN0YXJ0cycgOiAn8J+lsSBTdG9wcyd9IHRoZSBzY2hlZHVsZWQgRUMyIEluc3RhbmNlLmAsXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgY3R4LmxvZ2dlci5lcnJvcigncnVubmluZy1zY2hlZHVsZXI6IFNsYWNrIHBvc3QgZmFpbGVkJywge1xuICAgICAgICBzdGVwOiAncG9zdC1zbGFjay1tZXNzYWdlcycsXG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH0pO1xuXG4gIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IHBhcmVudCBTbGFjayBtZXNzYWdlIHBvc3RlZCcsIHtcbiAgICB0aHJlYWRUczogc2xhY2tQYXJlbnRNZXNzYWdlUmVzdWx0Py50cyA/PyBudWxsLFxuICB9KTtcblxuICBjdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBzdGFydGluZyBwYXJhbGxlbCBpbnN0YW5jZSBwcm9jZXNzaW5nJywge1xuICAgIGNvdW50OiB0YXJnZXRSZXNvdXJjZXMubGVuZ3RoLFxuICAgIG1heENvbmN1cnJlbmN5LFxuICB9KTtcblxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgY3R4Lm1hcChcbiAgICB0YXJnZXRSZXNvdXJjZXMsXG4gICAgLy8gYXN5bmMgKGN0eDogRHVyYWJsZUNvbnRleHQsIHRhcmdldFJlc291cmNlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+XG4gICAgLy8gICBjdHguc3RlcChgcHJvY2Vzcy1yZXNvdXJjZS0ke2luZGV4fWAsIGFzeW5jICgpID0+XG4gICAgLy8gICAgIHByb2Nlc3NPbmVSZXNvdXJjZShjdHgsIHRhcmdldFJlc291cmNlLCBwYXJhbXMsIGluZGV4KSxcbiAgICAvLyAgICksXG4gICAgYXN5bmMgKG1hcEN0eDogRHVyYWJsZUNvbnRleHQsIHRhcmdldFJlc291cmNlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIHJldHVybiBtYXBDdHgucnVuSW5DaGlsZENvbnRleHQoYHJlc291cmNlLSR7aW5kZXh9YCwgYXN5bmMgKGNoaWxkQ3R4OiBEdXJhYmxlQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9jZXNzT25lUmVzb3VyY2UoY2hpbGRDdHgsIHRhcmdldFJlc291cmNlLCBwYXJhbXMsIGluZGV4LCB3YWl0TGltaXRzKTtcbiAgICAgICAgLy8gaWYgKHJlc3VsdC5zdGF0dXMgPT09ICdza2lwcGVkJykge1xuICAgICAgICAvLyAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIH1cbiAgICAgICAgY2hpbGRDdHgubG9nZ2VyLmluZm8oJ3J1bm5pbmctc2NoZWR1bGVyOiBwb3N0aW5nIHRocmVhZCBTbGFjayBtZXNzYWdlJywge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGlkZW50aWZpZXI6IHJlc3VsdC5pZGVudGlmaWVyLFxuICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHNlbmQgc2xhY2sgdGhyZWFkIG1lc3NhZ2VcbiAgICAgICAgYXdhaXQgY2hpbGRDdHguc3RlcCgncG9zdC1zbGFjay1jaGlsZC1tZXNzYWdlcycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5ID0gZ2V0U3RhdGVEaXNwbGF5KHJlc3VsdC5zdGF0dXMpO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBjbGllbnQuY2hhdC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGNoYW5uZWwsXG4gICAgICAgICAgICAgIHRocmVhZF90czogc2xhY2tQYXJlbnRNZXNzYWdlUmVzdWx0Py50cyxcbiAgICAgICAgICAgICAgYXR0YWNobWVudHM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb2xvcjogJyMzNmE2NGYnLFxuICAgICAgICAgICAgICAgICAgcHJldGV4dDogYCR7ZGlzcGxheT8uZW1vaml9IFRoZSBzdGF0dXMgb2YgdGhlIEVDMiBJbnN0YW5jZSAke3Jlc3VsdC5pZGVudGlmaWVyfSBjaGFuZ2VkIHRvICR7ZGlzcGxheT8ubmFtZX0gZHVlIHRvIHRoZSBzY2hlZHVsZS5gLFxuICAgICAgICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdBY2NvdW50JywgdmFsdWU6IHJlc3VsdC5hY2NvdW50LCBzaG9ydDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHRpdGxlOiAnUmVnaW9uJywgdmFsdWU6IHJlc3VsdC5yZWdpb24sIHNob3J0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgdGl0bGU6ICdJZGVudGlmaWVyJywgdmFsdWU6IHJlc3VsdC5pZGVudGlmaWVyLCBzaG9ydDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHRpdGxlOiAnU3RhdHVzJywgdmFsdWU6IChkaXNwbGF5Py5uYW1lID8/ICdVbmtub3duJyksIHNob3J0OiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgY2hpbGRDdHgubG9nZ2VyLmVycm9yKCdydW5uaW5nLXNjaGVkdWxlcjogU2xhY2sgcG9zdCBmYWlsZWQnLCB7XG4gICAgICAgICAgICAgIHN0ZXA6ICdwb3N0LXNsYWNrLWNoaWxkLW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICAgICAgaWRlbnRpZmllcjogcmVzdWx0LmlkZW50aWZpZXIsXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB7IG1heENvbmN1cnJlbmN5IH0sXG4gICk7XG5cbiAgY29uc3QgcmVzdWx0TGlzdCA9IEFycmF5LmlzQXJyYXkocmVzdWx0cykgPyByZXN1bHRzIDogW107XG4gIGN0eC5sb2dnZXIuaW5mbygncnVubmluZy1zY2hlZHVsZXI6IGNvbXBsZXRlZCcsIHtcbiAgICBwcm9jZXNzZWQ6IHRhcmdldFJlc291cmNlcy5sZW5ndGgsXG4gICAgcmVzdWx0Q291bnQ6IHJlc3VsdExpc3QubGVuZ3RoLFxuICB9KTtcbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6ICdDb21wbGV0ZWQnIGFzIGNvbnN0LFxuICAgIHByb2Nlc3NlZDogdGFyZ2V0UmVzb3VyY2VzLmxlbmd0aCxcbiAgICByZXN1bHRzOiByZXN1bHRMaXN0LFxuICB9O1xufSk7XG4iXX0=
@@ -4,7 +4,8 @@ import { TargetResource, Secrets, Schedule, type FailureDetectionAlarms } from '
4
4
  /**
5
5
  * Props for the EC2 instance running schedule CDK stack.
6
6
  *
7
- * @see {@link EC2InstanceRunningSchedulerProps} for construct-level options not exposed here (e.g. `resourceWait`).
7
+ * @see {@link EC2InstanceRunningSchedulerProps} for construct-level options not exposed here
8
+ * (e.g. `resourceWait`, `runtime`, `durable`, `logGroup`).
8
9
  */
9
10
  export interface EC2InstanceRunningScheduleStackProps extends StackProps {
10
11
  /** Tag-based target resource for EC2 instances to start/stop. */
@@ -24,8 +25,10 @@ export interface EC2InstanceRunningScheduleStackProps extends StackProps {
24
25
  * CDK stack that deploys the EC2 instance running scheduler (EventBridge Scheduler + Durable Lambda).
25
26
  *
26
27
  * Wires {@link EC2InstanceRunningScheduler} with targeting, schedules, secrets, scheduling toggle,
27
- * and optional {@link FailureDetectionAlarms}. Does not expose {@link ResourceWaitLimits}; use the
28
- * construct directly when custom per-instance wait limits are required.
28
+ * and optional {@link FailureDetectionAlarms}. Does not expose {@link ResourceWaitLimits},
29
+ * {@link RunningSchedulerRuntimeProps}, {@link RunningSchedulerDurableProps}, or
30
+ * {@link RunningSchedulerLogGroupProps}; use the construct directly when custom runtime,
31
+ * wait, durable, or log group settings are required.
29
32
  */
30
33
  export declare class EC2InstanceRunningScheduleStack extends Stack {
31
34
  /**
@@ -8,11 +8,13 @@ const ec2_instance_running_scheduler_1 = require("../constructs/ec2-instance-run
8
8
  * CDK stack that deploys the EC2 instance running scheduler (EventBridge Scheduler + Durable Lambda).
9
9
  *
10
10
  * Wires {@link EC2InstanceRunningScheduler} with targeting, schedules, secrets, scheduling toggle,
11
- * and optional {@link FailureDetectionAlarms}. Does not expose {@link ResourceWaitLimits}; use the
12
- * construct directly when custom per-instance wait limits are required.
11
+ * and optional {@link FailureDetectionAlarms}. Does not expose {@link ResourceWaitLimits},
12
+ * {@link RunningSchedulerRuntimeProps}, {@link RunningSchedulerDurableProps}, or
13
+ * {@link RunningSchedulerLogGroupProps}; use the construct directly when custom runtime,
14
+ * wait, durable, or log group settings are required.
13
15
  */
14
16
  class EC2InstanceRunningScheduleStack extends aws_cdk_lib_1.Stack {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduleStack", version: "0.3.6" };
17
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "ec2-instance-running-scheduler.EC2InstanceRunningScheduleStack", version: "0.4.1" };
16
18
  /**
17
19
  * Creates the stack and wires {@link EC2InstanceRunningScheduler}.
18
20
  *
@@ -33,4 +35,4 @@ class EC2InstanceRunningScheduleStack extends aws_cdk_lib_1.Stack {
33
35
  }
34
36
  }
35
37
  exports.EC2InstanceRunningScheduleStack = EC2InstanceRunningScheduleStack;
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhY2tzL2VjMi1pbnN0YW5jZS1ydW5uaW5nLXNjaGVkdWxlLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBZ0Q7QUFFaEQsaUdBQTJKO0FBc0IzSjs7Ozs7O0dBTUc7QUFDSCxNQUFhLCtCQUFnQyxTQUFRLG1CQUFLOztJQUN4RDs7Ozs7O09BTUc7SUFDSCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJDO1FBQ25GLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXhCLElBQUksNERBQTJCLENBQUMsSUFBSSxFQUFFLDZCQUE2QixFQUFFO1lBQ25FLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztZQUNwQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCO1lBQ3hDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFuQkgsMEVBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlciwgVGFyZ2V0UmVzb3VyY2UsIFNlY3JldHMsIFNjaGVkdWxlLCB0eXBlIEZhaWx1cmVEZXRlY3Rpb25BbGFybXMgfSBmcm9tICcuLi9jb25zdHJ1Y3RzL2VjMi1pbnN0YW5jZS1ydW5uaW5nLXNjaGVkdWxlcic7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBFQzIgaW5zdGFuY2UgcnVubmluZyBzY2hlZHVsZSBDREsgc3RhY2suXG4gKlxuICogQHNlZSB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyUHJvcHN9IGZvciBjb25zdHJ1Y3QtbGV2ZWwgb3B0aW9ucyBub3QgZXhwb3NlZCBoZXJlIChlLmcuIGByZXNvdXJjZVdhaXRgKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZVN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgLyoqIFRhZy1iYXNlZCB0YXJnZXQgcmVzb3VyY2UgZm9yIEVDMiBpbnN0YW5jZXMgdG8gc3RhcnQvc3RvcC4gKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2U6IFRhcmdldFJlc291cmNlO1xuICAvKiogV2hldGhlciBzY2hlZHVsaW5nIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIHRydWUgaWYgb21pdHRlZC4gKi9cbiAgcmVhZG9ubHkgZW5hYmxlU2NoZWR1bGluZz86IGJvb2xlYW47XG4gIC8qKiBTZWNyZXRzIChlLmcuIFNsYWNrKSBmb3IgdGhlIHNjaGVkdWxlci4gKi9cbiAgcmVhZG9ubHkgc2VjcmV0czogU2VjcmV0cztcbiAgLyoqIENyb24gc2NoZWR1bGUgZm9yIHN0b3BwaW5nIGluc3RhbmNlcy4gKi9cbiAgcmVhZG9ubHkgc3RvcFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdGFydGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0YXJ0U2NoZWR1bGU/OiBTY2hlZHVsZTtcbiAgLyoqIE9wdGlvbmFsIENsb3VkV2F0Y2ggZmFpbHVyZSBkZXRlY3Rpb24gYWxhcm1zIGFuZCBsb2ctYmFzZWQgbWV0cmljcy4gKi9cbiAgcmVhZG9ubHkgZmFpbHVyZURldGVjdGlvbj86IEZhaWx1cmVEZXRlY3Rpb25BbGFybXM7XG59XG5cbi8qKlxuICogQ0RLIHN0YWNrIHRoYXQgZGVwbG95cyB0aGUgRUMyIGluc3RhbmNlIHJ1bm5pbmcgc2NoZWR1bGVyIChFdmVudEJyaWRnZSBTY2hlZHVsZXIgKyBEdXJhYmxlIExhbWJkYSkuXG4gKlxuICogV2lyZXMge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlcn0gd2l0aCB0YXJnZXRpbmcsIHNjaGVkdWxlcywgc2VjcmV0cywgc2NoZWR1bGluZyB0b2dnbGUsXG4gKiBhbmQgb3B0aW9uYWwge0BsaW5rIEZhaWx1cmVEZXRlY3Rpb25BbGFybXN9LiBEb2VzIG5vdCBleHBvc2Uge0BsaW5rIFJlc291cmNlV2FpdExpbWl0c307IHVzZSB0aGVcbiAqIGNvbnN0cnVjdCBkaXJlY3RseSB3aGVuIGN1c3RvbSBwZXItaW5zdGFuY2Ugd2FpdCBsaW1pdHMgYXJlIHJlcXVpcmVkLlxuICovXG5leHBvcnQgY2xhc3MgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIHN0YWNrIGFuZCB3aXJlcyB7QGxpbmsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyfS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gUGFyZW50IGNvbnN0cnVjdCBvciBhcHAuXG4gICAqIEBwYXJhbSBpZCAtIFN0YWNrIGlkLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUYXJnZXQgcmVzb3VyY2UsIHNjaGVkdWxlcywgc2VjcmV0cywgb3B0aW9uYWwgZmFpbHVyZSBkZXRlY3Rpb24sIGFuZCBzdGFuZGFyZCBzdGFjayBwcm9wcy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZVN0YWNrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIG5ldyBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXIodGhpcywgJ0VDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlcicsIHtcbiAgICAgIHRhcmdldFJlc291cmNlOiBwcm9wcy50YXJnZXRSZXNvdXJjZSxcbiAgICAgIGVuYWJsZVNjaGVkdWxpbmc6IHByb3BzLmVuYWJsZVNjaGVkdWxpbmcsXG4gICAgICBzZWNyZXRzOiBwcm9wcy5zZWNyZXRzLFxuICAgICAgc3RvcFNjaGVkdWxlOiBwcm9wcy5zdG9wU2NoZWR1bGUsXG4gICAgICBzdGFydFNjaGVkdWxlOiBwcm9wcy5zdGFydFNjaGVkdWxlLFxuICAgICAgZmFpbHVyZURldGVjdGlvbjogcHJvcHMuZmFpbHVyZURldGVjdGlvbixcbiAgICB9KTtcbiAgfVxufSJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGUtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhY2tzL2VjMi1pbnN0YW5jZS1ydW5uaW5nLXNjaGVkdWxlLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBZ0Q7QUFFaEQsaUdBQTJKO0FBdUIzSjs7Ozs7Ozs7R0FRRztBQUNILE1BQWEsK0JBQWdDLFNBQVEsbUJBQUs7O0lBQ3hEOzs7Ozs7T0FNRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkM7UUFDbkYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSw0REFBMkIsQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLEVBQUU7WUFDbkUsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3BDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQW5CSCwwRUFvQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyLCBUYXJnZXRSZXNvdXJjZSwgU2VjcmV0cywgU2NoZWR1bGUsIHR5cGUgRmFpbHVyZURldGVjdGlvbkFsYXJtcyB9IGZyb20gJy4uL2NvbnN0cnVjdHMvZWMyLWluc3RhbmNlLXJ1bm5pbmctc2NoZWR1bGVyJztcblxuLyoqXG4gKiBQcm9wcyBmb3IgdGhlIEVDMiBpbnN0YW5jZSBydW5uaW5nIHNjaGVkdWxlIENESyBzdGFjay5cbiAqXG4gKiBAc2VlIHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJQcm9wc30gZm9yIGNvbnN0cnVjdC1sZXZlbCBvcHRpb25zIG5vdCBleHBvc2VkIGhlcmVcbiAqIChlLmcuIGByZXNvdXJjZVdhaXRgLCBgcnVudGltZWAsIGBkdXJhYmxlYCwgYGxvZ0dyb3VwYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIC8qKiBUYWctYmFzZWQgdGFyZ2V0IHJlc291cmNlIGZvciBFQzIgaW5zdGFuY2VzIHRvIHN0YXJ0L3N0b3AuICovXG4gIHJlYWRvbmx5IHRhcmdldFJlc291cmNlOiBUYXJnZXRSZXNvdXJjZTtcbiAgLyoqIFdoZXRoZXIgc2NoZWR1bGluZyBpcyBlbmFibGVkLiBEZWZhdWx0cyB0byB0cnVlIGlmIG9taXR0ZWQuICovXG4gIHJlYWRvbmx5IGVuYWJsZVNjaGVkdWxpbmc/OiBib29sZWFuO1xuICAvKiogU2VjcmV0cyAoZS5nLiBTbGFjaykgZm9yIHRoZSBzY2hlZHVsZXIuICovXG4gIHJlYWRvbmx5IHNlY3JldHM6IFNlY3JldHM7XG4gIC8qKiBDcm9uIHNjaGVkdWxlIGZvciBzdG9wcGluZyBpbnN0YW5jZXMuICovXG4gIHJlYWRvbmx5IHN0b3BTY2hlZHVsZT86IFNjaGVkdWxlO1xuICAvKiogQ3JvbiBzY2hlZHVsZSBmb3Igc3RhcnRpbmcgaW5zdGFuY2VzLiAqL1xuICByZWFkb25seSBzdGFydFNjaGVkdWxlPzogU2NoZWR1bGU7XG4gIC8qKiBPcHRpb25hbCBDbG91ZFdhdGNoIGZhaWx1cmUgZGV0ZWN0aW9uIGFsYXJtcyBhbmQgbG9nLWJhc2VkIG1ldHJpY3MuICovXG4gIHJlYWRvbmx5IGZhaWx1cmVEZXRlY3Rpb24/OiBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zO1xufVxuXG4vKipcbiAqIENESyBzdGFjayB0aGF0IGRlcGxveXMgdGhlIEVDMiBpbnN0YW5jZSBydW5uaW5nIHNjaGVkdWxlciAoRXZlbnRCcmlkZ2UgU2NoZWR1bGVyICsgRHVyYWJsZSBMYW1iZGEpLlxuICpcbiAqIFdpcmVzIHtAbGluayBFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXJ9IHdpdGggdGFyZ2V0aW5nLCBzY2hlZHVsZXMsIHNlY3JldHMsIHNjaGVkdWxpbmcgdG9nZ2xlLFxuICogYW5kIG9wdGlvbmFsIHtAbGluayBGYWlsdXJlRGV0ZWN0aW9uQWxhcm1zfS4gRG9lcyBub3QgZXhwb3NlIHtAbGluayBSZXNvdXJjZVdhaXRMaW1pdHN9LFxuICoge0BsaW5rIFJ1bm5pbmdTY2hlZHVsZXJSdW50aW1lUHJvcHN9LCB7QGxpbmsgUnVubmluZ1NjaGVkdWxlckR1cmFibGVQcm9wc30sIG9yXG4gKiB7QGxpbmsgUnVubmluZ1NjaGVkdWxlckxvZ0dyb3VwUHJvcHN9OyB1c2UgdGhlIGNvbnN0cnVjdCBkaXJlY3RseSB3aGVuIGN1c3RvbSBydW50aW1lLFxuICogd2FpdCwgZHVyYWJsZSwgb3IgbG9nIGdyb3VwIHNldHRpbmdzIGFyZSByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzdGFjayBhbmQgd2lyZXMge0BsaW5rIEVDMkluc3RhbmNlUnVubmluZ1NjaGVkdWxlcn0uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFBhcmVudCBjb25zdHJ1Y3Qgb3IgYXBwLlxuICAgKiBAcGFyYW0gaWQgLSBTdGFjayBpZC5cbiAgICogQHBhcmFtIHByb3BzIC0gVGFyZ2V0IHJlc291cmNlLCBzY2hlZHVsZXMsIHNlY3JldHMsIG9wdGlvbmFsIGZhaWx1cmUgZGV0ZWN0aW9uLCBhbmQgc3RhbmRhcmQgc3RhY2sgcHJvcHMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVTdGFja1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgRUMySW5zdGFuY2VSdW5uaW5nU2NoZWR1bGVyKHRoaXMsICdFQzJJbnN0YW5jZVJ1bm5pbmdTY2hlZHVsZXInLCB7XG4gICAgICB0YXJnZXRSZXNvdXJjZTogcHJvcHMudGFyZ2V0UmVzb3VyY2UsXG4gICAgICBlbmFibGVTY2hlZHVsaW5nOiBwcm9wcy5lbmFibGVTY2hlZHVsaW5nLFxuICAgICAgc2VjcmV0czogcHJvcHMuc2VjcmV0cyxcbiAgICAgIHN0b3BTY2hlZHVsZTogcHJvcHMuc3RvcFNjaGVkdWxlLFxuICAgICAgc3RhcnRTY2hlZHVsZTogcHJvcHMuc3RhcnRTY2hlZHVsZSxcbiAgICAgIGZhaWx1cmVEZXRlY3Rpb246IHByb3BzLmZhaWx1cmVEZXRlY3Rpb24sXG4gICAgfSk7XG4gIH1cbn0iXX0=
package/package.json CHANGED
@@ -39,20 +39,20 @@
39
39
  "organization": false
40
40
  },
41
41
  "devDependencies": {
42
- "@aws-sdk/client-ec2": "^3",
43
- "@aws-sdk/client-resource-groups-tagging-api": "^3",
44
- "@aws/durable-execution-sdk-js": "^1",
45
- "@slack/web-api": "^6",
42
+ "@aws-sdk/client-ec2": "^3.1111.0",
43
+ "@aws-sdk/client-resource-groups-tagging-api": "^3.1111.0",
44
+ "@aws/durable-execution-sdk-js": "^1.1.7",
45
+ "@slack/web-api": "^6.13.0",
46
46
  "@stylistic/eslint-plugin": "^2",
47
- "@types/aws-lambda": "^8",
47
+ "@types/aws-lambda": "^8.10.162",
48
48
  "@types/jest": "^29.5.14",
49
49
  "@types/node": "^20",
50
50
  "@typescript-eslint/eslint-plugin": "^8",
51
51
  "@typescript-eslint/parser": "^8",
52
52
  "aws-cdk-lib": "2.232.0",
53
- "aws-lambda-secret-fetcher": "^0.6.1",
54
- "aws-sdk-client-mock": "^2",
55
- "aws-sdk-client-mock-jest": "^2",
53
+ "aws-lambda-secret-fetcher": "^0.7.2",
54
+ "aws-sdk-client-mock": "^2.2.0",
55
+ "aws-sdk-client-mock-jest": "^2.2.0",
56
56
  "commit-and-tag-version": "^12",
57
57
  "constructs": "10.5.1",
58
58
  "esbuild": "^0.28.2",
@@ -61,16 +61,16 @@
61
61
  "eslint-plugin-import": "^2.32.0",
62
62
  "jest": "^29.7.0",
63
63
  "jest-junit": "^17",
64
- "jsii": "5.9.x",
64
+ "jsii": "6.0.x",
65
65
  "jsii-diff": "^1.139.0",
66
66
  "jsii-docgen": "^10.5.0",
67
67
  "jsii-pacmak": "^1.139.0",
68
- "jsii-rosetta": "5.9.x",
69
- "projen": "^0.101.31",
70
- "strict-env-resolver": "^0.5.1",
68
+ "jsii-rosetta": "6.0.x",
69
+ "projen": "^0.103.1",
70
+ "strict-env-resolver": "^0.6.2",
71
71
  "ts-jest": "^29.4.12",
72
72
  "ts-node": "^10.9.2",
73
- "typescript": "5.9.x"
73
+ "typescript": "6.0.x"
74
74
  },
75
75
  "peerDependencies": {
76
76
  "aws-cdk-lib": "^2.232.0",
@@ -100,7 +100,7 @@
100
100
  "publishConfig": {
101
101
  "access": "public"
102
102
  },
103
- "version": "0.3.6",
103
+ "version": "0.4.1",
104
104
  "jest": {
105
105
  "coverageProvider": "v8",
106
106
  "testMatch": [