@cdktn/commons 0.23.3 → 0.23.4

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,12 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.terraformVersion = exports.terraformBinaryName = void 0;
3
+ exports.terraformVersion = exports.parseTerraformCliVersion = exports.terraformBinaryName = void 0;
4
4
  // Copyright (c) HashiCorp, Inc
5
5
  // SPDX-License-Identifier: MPL-2.0
6
6
  const errors_1 = require("./errors");
7
7
  const util_1 = require("./util");
8
8
  exports.terraformBinaryName = process.env.TERRAFORM_BINARY_NAME || "terraform";
9
+ // The Terraform CLI version parser lives in the cdktn package (its canonical
10
+ // home). It is consumed via subpath because its string-literal union return
11
+ // type is not part of cdktn's public jsii API. Re-exported here so existing
12
+ // commons consumers (e.g. @cdktn/cli-core) keep a single import surface.
13
+ var validations_1 = require("cdktn/lib/validations");
14
+ Object.defineProperty(exports, "parseTerraformCliVersion", { enumerable: true, get: function () { return validations_1.parseTerraformCliVersion; } });
9
15
  exports.terraformVersion = (0, util_1.exec)(exports.terraformBinaryName, ["version", "-json"], {})
10
16
  .then((versionString) => JSON.parse(versionString).terraform_version)
11
17
  .catch((err) => errors_1.Errors.Usage(`Unknown: Error loading terraform version ${err}`, err));
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHFDQUFrQztBQUNsQyxpQ0FBOEI7QUFFakIsUUFBQSxtQkFBbUIsR0FDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFDdEMsUUFBQSxnQkFBZ0IsR0FBRyxJQUFBLFdBQUksRUFDbEMsMkJBQW1CLEVBQ25CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxFQUNwQixFQUFFLENBQ0g7S0FDRSxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsaUJBQWlCLENBQUM7S0FDcEUsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDYixlQUFNLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQgeyBFcnJvcnMgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiLi91dGlsXCI7XG5cbmV4cG9ydCBjb25zdCB0ZXJyYWZvcm1CaW5hcnlOYW1lID1cbiAgcHJvY2Vzcy5lbnYuVEVSUkFGT1JNX0JJTkFSWV9OQU1FIHx8IFwidGVycmFmb3JtXCI7XG5leHBvcnQgY29uc3QgdGVycmFmb3JtVmVyc2lvbiA9IGV4ZWMoXG4gIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gIFtcInZlcnNpb25cIiwgXCItanNvblwiXSxcbiAge30sXG4pXG4gIC50aGVuKCh2ZXJzaW9uU3RyaW5nKSA9PiBKU09OLnBhcnNlKHZlcnNpb25TdHJpbmcpLnRlcnJhZm9ybV92ZXJzaW9uKVxuICAuY2F0Y2goKGVycikgPT5cbiAgICBFcnJvcnMuVXNhZ2UoYFVua25vd246IEVycm9yIGxvYWRpbmcgdGVycmFmb3JtIHZlcnNpb24gJHtlcnJ9YCwgZXJyKSxcbiAgKTtcbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3RlcnJhZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLHFDQUFrQztBQUNsQyxpQ0FBOEI7QUFFakIsUUFBQSxtQkFBbUIsR0FDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFFbkQsNkVBQTZFO0FBQzdFLDRFQUE0RTtBQUM1RSw0RUFBNEU7QUFDNUUseUVBQXlFO0FBQ3pFLHFEQUFpRTtBQUF4RCx1SEFBQSx3QkFBd0IsT0FBQTtBQU1wQixRQUFBLGdCQUFnQixHQUFHLElBQUEsV0FBSSxFQUNsQywyQkFBbUIsRUFDbkIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQ3BCLEVBQUUsQ0FDSDtLQUNFLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztLQUNwRSxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNiLGVBQU0sQ0FBQyxLQUFLLENBQUMsNENBQTRDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IEVycm9ycyB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGNvbnN0IHRlcnJhZm9ybUJpbmFyeU5hbWUgPVxuICBwcm9jZXNzLmVudi5URVJSQUZPUk1fQklOQVJZX05BTUUgfHwgXCJ0ZXJyYWZvcm1cIjtcblxuLy8gVGhlIFRlcnJhZm9ybSBDTEkgdmVyc2lvbiBwYXJzZXIgbGl2ZXMgaW4gdGhlIGNka3RuIHBhY2thZ2UgKGl0cyBjYW5vbmljYWxcbi8vIGhvbWUpLiBJdCBpcyBjb25zdW1lZCB2aWEgc3VicGF0aCBiZWNhdXNlIGl0cyBzdHJpbmctbGl0ZXJhbCB1bmlvbiByZXR1cm5cbi8vIHR5cGUgaXMgbm90IHBhcnQgb2YgY2RrdG4ncyBwdWJsaWMganNpaSBBUEkuIFJlLWV4cG9ydGVkIGhlcmUgc28gZXhpc3Rpbmdcbi8vIGNvbW1vbnMgY29uc3VtZXJzIChlLmcuIEBjZGt0bi9jbGktY29yZSkga2VlcCBhIHNpbmdsZSBpbXBvcnQgc3VyZmFjZS5cbmV4cG9ydCB7IHBhcnNlVGVycmFmb3JtQ2xpVmVyc2lvbiB9IGZyb20gXCJjZGt0bi9saWIvdmFsaWRhdGlvbnNcIjtcbmV4cG9ydCB0eXBlIHtcbiAgVGVycmFmb3JtQ2xpVmVyc2lvbixcbiAgVGVycmFmb3JtQ2xpTmFtZSxcbn0gZnJvbSBcImNka3RuL2xpYi92YWxpZGF0aW9uc1wiO1xuXG5leHBvcnQgY29uc3QgdGVycmFmb3JtVmVyc2lvbiA9IGV4ZWMoXG4gIHRlcnJhZm9ybUJpbmFyeU5hbWUsXG4gIFtcInZlcnNpb25cIiwgXCItanNvblwiXSxcbiAge30sXG4pXG4gIC50aGVuKCh2ZXJzaW9uU3RyaW5nKSA9PiBKU09OLnBhcnNlKHZlcnNpb25TdHJpbmcpLnRlcnJhZm9ybV92ZXJzaW9uKVxuICAuY2F0Y2goKGVycikgPT5cbiAgICBFcnJvcnMuVXNhZ2UoYFVua25vd246IEVycm9yIGxvYWRpbmcgdGVycmFmb3JtIHZlcnNpb24gJHtlcnJ9YCwgZXJyKSxcbiAgKTtcbiJdfQ==
package/build/util.d.ts CHANGED
@@ -1,3 +1,6 @@
1
+ /// <reference types="ambient" />
2
+ /// <reference types=".pnpm/@types+node@20.17.51/node_modules/@types/node/child_process" />
3
+ /// <reference types=".pnpm/@types+node@20.19.37/node_modules/@types/node/child_process" />
1
4
  import { SpawnOptions } from "child_process";
2
5
  import { IManifest } from "cdktn";
3
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAO7C,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAmC5C;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,mBAkBnD;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAa7B;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,iBAOpE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,MAAM,EACf,MAAM,MAAM,EAAE,EACd,SAAS,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,EAC7C,SAAS,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,EAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,KAAK,GAAG,EAC5C,sBAAmB,KAClB,OAAO,CAAC,MAAM,CAgEhB,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,CAI5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,qBAAa,SAAU,SAAQ,KAAK;IAGzB,UAAU,CAAC,EAAE,MAAM;gBAD1B,OAAO,CAAC,EAAE,MAAM,EACT,UAAU,CAAC,EAAE,MAAM,YAAA;CAM7B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EACf,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,iBAUvC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAO7C,OAAO,EAAE,SAAS,EAAY,MAAM,OAAO,CAAC;AAmC5C;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,mBAkBnD;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,iBAa7B;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,iBAOpE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,IAAI,YACN,MAAM,QACT,MAAM,EAAE,WACL,YAAY,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,WACpC,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,WACtB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,KAAK,GAAG,6BAE3C,QAAQ,MAAM,CAoEhB,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASzE;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,CAI5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED,qBAAa,SAAU,SAAQ,KAAK;IAGzB,UAAU,CAAC;gBADlB,OAAO,CAAC,EAAE,MAAM,EACT,UAAU,CAAC,oBAAQ;CAM7B;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED;;;;;GAKG;AACH,wBAAsB,8BAA8B,CAClD,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,EACf,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,iBAUvC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
package/build/util.js CHANGED
@@ -15,37 +15,18 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
27
  };
38
28
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.HttpError = exports.exec = void 0;
40
- exports.shell = shell;
41
- exports.withTempDir = withTempDir;
42
- exports.mkdtemp = mkdtemp;
43
- exports.readCDKTFVersion = readCDKTFVersion;
44
- exports.readCDKTFManifest = readCDKTFManifest;
45
- exports.downcaseFirst = downcaseFirst;
46
- exports.downloadFile = downloadFile;
47
- exports.ensureAllSettledBeforeThrowing = ensureAllSettledBeforeThrowing;
48
- exports.hasNoColorFlagOrEnv = hasNoColorFlagOrEnv;
29
+ exports.hasNoColorFlagOrEnv = exports.ensureAllSettledBeforeThrowing = exports.downloadFile = exports.HttpError = exports.downcaseFirst = exports.readCDKTFManifest = exports.readCDKTFVersion = exports.exec = exports.mkdtemp = exports.withTempDir = exports.shell = void 0;
49
30
  const cross_spawn_1 = require("cross-spawn");
50
31
  const fs = __importStar(require("fs-extra"));
51
32
  const follow_redirects_1 = require("follow-redirects");
@@ -103,6 +84,7 @@ async function shell(program, args = [], options = {}) {
103
84
  // the thrown error's .stderr field.
104
85
  });
105
86
  }
87
+ exports.shell = shell;
106
88
  async function withTempDir(dirname, closure) {
107
89
  const prevdir = process.cwd();
108
90
  const parent = await fs.mkdtemp(path.join(os.tmpdir(), "cdktf."));
@@ -117,6 +99,7 @@ async function withTempDir(dirname, closure) {
117
99
  await fs.remove(parent);
118
100
  }
119
101
  }
102
+ exports.withTempDir = withTempDir;
120
103
  async function mkdtemp(closure) {
121
104
  const workdir = await fs.mkdtemp(path.join(os.tmpdir(), "cdktf."));
122
105
  try {
@@ -126,6 +109,7 @@ async function mkdtemp(closure) {
126
109
  await fs.remove(workdir);
127
110
  }
128
111
  }
112
+ exports.mkdtemp = mkdtemp;
129
113
  /**
130
114
  * Spawn a child process and resolve with its stdout, or reject with a decorated Error on non-zero exit.
131
115
  *
@@ -151,9 +135,12 @@ const exec = async (command, args, options, stdout, stderr, sendToStderr = true)
151
135
  if (typeof options.noColor !== "boolean" && hasNoColorFlagOrEnv()) {
152
136
  options.noColor = true;
153
137
  }
138
+ // Drop spawn's `signal` option: the child already gets the interrupt via the process group, and a second signal
139
+ // aborts terraform's graceful shutdown. Just wait for its own "close".
140
+ const { signal: _signal, ...spawnOptions } = options;
154
141
  return new Promise((ok, ko) => {
155
142
  var _a, _b, _c, _d;
156
- const child = (0, cross_spawn_1.spawn)(command, args, options);
143
+ const child = (0, cross_spawn_1.spawn)(command, args, spawnOptions);
157
144
  const out = new Array();
158
145
  const err = new Array();
159
146
  if (stdout !== undefined) {
@@ -220,11 +207,13 @@ async function readCDKTFVersion(outputDir) {
220
207
  }
221
208
  return "";
222
209
  }
210
+ exports.readCDKTFVersion = readCDKTFVersion;
223
211
  async function readCDKTFManifest() {
224
212
  const { output } = config.readConfigSync();
225
213
  const json = await fs.readFile(path.join(output, cdktn_1.Manifest.fileName));
226
214
  return JSON.parse(json.toString());
227
215
  }
216
+ exports.readCDKTFManifest = readCDKTFManifest;
228
217
  /**
229
218
  * Downcase the first character in a string.
230
219
  *
@@ -236,6 +225,7 @@ function downcaseFirst(str) {
236
225
  }
237
226
  return `${str[0].toLocaleLowerCase()}${str.slice(1)}`;
238
227
  }
228
+ exports.downcaseFirst = downcaseFirst;
239
229
  class HttpError extends Error {
240
230
  constructor(message, statusCode) {
241
231
  super(message); // 'Error' breaks prototype chain here
@@ -269,6 +259,7 @@ async function downloadFile(url, targetFilename) {
269
259
  request.end();
270
260
  });
271
261
  }
262
+ exports.downloadFile = downloadFile;
272
263
  /**
273
264
  * Awaits a promise and makes sure it's error (if any) is only thrown after all other promises are settled
274
265
  * if the promise does not throw an error, the other promises won't be awaited
@@ -286,6 +277,7 @@ async function ensureAllSettledBeforeThrowing(p, promises) {
286
277
  throw e;
287
278
  }
288
279
  }
280
+ exports.ensureAllSettledBeforeThrowing = ensureAllSettledBeforeThrowing;
289
281
  /**
290
282
  * returns true if --no-color is passed as CLI flag or the env var FORCE_COLOR is set to "0"
291
283
  * Used for cases where we can't pass down the noColor flag (e.g. when collecting debug information from the environment)
@@ -294,6 +286,7 @@ async function ensureAllSettledBeforeThrowing(p, promises) {
294
286
  function hasNoColorFlagOrEnv() {
295
287
  return hasFlag("no-color") || process.env.FORCE_COLOR === "0";
296
288
  }
289
+ exports.hasNoColorFlagOrEnv = hasNoColorFlagOrEnv;
297
290
  // From: https://github.com/sindresorhus/has-flag/blob/main/index.js
298
291
  // as used in https://github.com/chalk/chalk
299
292
  function hasFlag(flag) {
@@ -303,4 +296,4 @@ function hasFlag(flag) {
303
296
  return (position !== -1 &&
304
297
  (terminatorPosition === -1 || position < terminatorPosition));
305
298
  }
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdEQSxzQkFxQkM7QUFFRCxrQ0FlQztBQUVELDBCQU9DO0FBOEZELDRDQVNDO0FBRUQsOENBSUM7QUFPRCxzQ0FLQztBQWFELG9DQW1DQztBQVFELHdFQVlDO0FBT0Qsa0RBRUM7QUExU0QsNkNBQW9DO0FBQ3BDLDZDQUErQjtBQUMvQix1REFBK0M7QUFDL0MsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBbUU7QUFDbkUsaUNBQTRDO0FBQzVDLGlEQUFtQztBQUNuQyw0REFBbUM7QUFJbkM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixLQUFZLEVBQ1osVUFBa0IsRUFDbEIsVUFBa0I7SUFFakIsS0FBbUIsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0lBQ3hDLEtBQW1CLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQ3pCLE9BQWUsRUFDZixPQUFpQixFQUFFLEVBQ25CLFVBQWdELEVBQUU7SUFFbEQsT0FBTyxJQUFBLFlBQUksRUFDVCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8s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R0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQ0wsUUFBUSxLQUFLLENBQUMsQ0FBQztRQUNmLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLGtCQUFrQixDQUFDLENBQzdELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjcm9zcy1zcGF3blwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyBodHRwcywgaHR0cCB9IGZyb20gXCJmb2xsb3ctcmVkaXJlY3RzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHByb2Nlc3NMb2dnZXJFcnJvciwgcHJvY2Vzc0xvZ2dlckRlYnVnIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSU1hbmlmZXN0LCBNYW5pZmVzdCB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuXG50eXBlIEV4ZWNFcnJvciA9IEVycm9yICYgeyBzdGRlcnI6IHN0cmluZzsgc3Rkb3V0OiBzdHJpbmcgfTtcblxuLyoqXG4gKiBBdHRhY2ggY2FwdHVyZWQgc3RkZXJyL3N0ZG91dCB0byBhIHByb2Nlc3MtZmFpbHVyZSBFcnJvci5cbiAqXG4gKiBUaGUgYm9keSB0ZXh0IGlzIGV4cG9zZWQgdHdvIHdheXM6XG4gKiAtIGAuc3RkZXJyYCBhbmQgYC5zdGRvdXRgIHByb3BlcnRpZXMsIGZvciBjYWxsZXJzIHRoYXQgcmVuZGVyIHRoZSBzdHJlYW1zIHNlcGFyYXRlbHkgKGUuZy4gc3ludGgtc3RhY2sncyBjaGFsa1xuICogICBmb3JtYXR0aW5nKS5cbiAqIC0gQSBgdG9TdHJpbmcoKWAgb3ZlcnJpZGUgdGhhdCBhcHBlbmRzIHRoZSBib2R5IGFmdGVyIHRoZSBoZWFkbGluZSwgc28gY2FsbGVycyB1c2luZyBgJHtlfWAgaW50ZXJwb2xhdGlvbiBzdXJmYWNlIHRoZVxuICogICB1bmRlcmx5aW5nIHRvb2wgb3V0cHV0IHdpdGhvdXQgZG91YmxlLXByaW50aW5nIGZvciB0aGUgcHJvcGVydHktcmVhZGluZyBjYWxsZXJzLlxuICpcbiAqIFRoZSBFcnJvcidzIGAubWVzc2FnZWAgaXMgbGVmdCB1bnRvdWNoZWQgYXMgdGhlIGhlYWRsaW5lIG9ubHkuXG4gKlxuICogQHBhcmFtIGVycm9yIHRoZSBFcnJvciB0byBkZWNvcmF0ZSAoaXRzIGAubWVzc2FnZWAgYmVjb21lcyB0aGUgdG9TdHJpbmcgaGVhZGxpbmUpXG4gKiBAcGFyYW0gc3RkZXJyVGV4dCBjYXB0dXJlZCBzdGRlcnIsIG1heSBiZSBlbXB0eVxuICogQHBhcmFtIHN0ZG91dFRleHQgY2FwdHVyZWQgc3Rkb3V0LCBtYXkgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUHJvY2Vzc091dHB1dChcbiAgZXJyb3I6IEVycm9yLFxuICBzdGRlcnJUZXh0OiBzdHJpbmcsXG4gIHN0ZG91dFRleHQ6IHN0cmluZyxcbik6IGFzc2VydHMgZXJyb3IgaXMgRXhlY0Vycm9yIHtcbiAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyVGV4dDtcbiAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3Rkb3V0ID0gc3Rkb3V0VGV4dDtcbiAgY29uc3QgYm9keSA9IFtzdGRlcnJUZXh0LCBzdGRvdXRUZXh0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKTtcbiAgaWYgKGJvZHkpIHtcbiAgICBjb25zdCBoZWFkbGluZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgZXJyb3IudG9TdHJpbmcgPSAoKSA9PiBgRXJyb3I6ICR7aGVhZGxpbmV9XFxuJHtib2R5fWA7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGF3biBhIGNoaWxkIHByb2Nlc3MgYW5kIG1pcnJvciBpdHMgc3Rkb3V0IHRvIHRoZSBwYXJlbnQncyBjb25zb2xlLlxuICpcbiAqIFRoaW4gd3JhcHBlciBvdmVyIHtAbGluayBleGVjfSBmb3IgY2FsbGVycyB0aGF0IHdhbnQgc3Rkb3V0IGNodW5rcyBlY2hvZWQgdmlhIGBjb25zb2xlLmxvZ2AgYXMgdGhleSBhcnJpdmUuIFN0ZGVyciBpc1xuICogY2FwdHVyZWQgc2lsZW50bHkgYW5kIHN1cmZhY2VkIG9uIHRoZSB0aHJvd24gRXJyb3IncyBgLnN0ZGVycmAgLyBgdG9TdHJpbmcoKWAgaWYgdGhlIHByb2Nlc3MgZXhpdHMgbm9uLXplcm8uXG4gKlxuICogQHBhcmFtIHByb2dyYW0gdGhlIGV4ZWN1dGFibGUgdG8gc3Bhd25cbiAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBvcHRpb25zIHNwYXduIG9wdGlvbnM7IGBub0NvbG9yOiB0cnVlYCBzdHJpcHMgQU5TSSBlc2NhcGVzIGZyb20gY2FwdHVyZWQgb3V0cHV0XG4gKiBAcmV0dXJucyB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgc3Rkb3V0IGFzIGEgc3RyaW5nIG9uIHN1Y2Nlc3NcbiAqIEB0aHJvd3MgYW4gRXJyb3Igd2l0aCBgLnN0ZGVycmAgYW5kIGAuc3Rkb3V0YCBwcm9wZXJ0aWVzIChzZWUge0BsaW5rIGF0dGFjaFByb2Nlc3NPdXRwdXR9KSBvbiBub24temVybyBleGl0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaGVsbChcbiAgcHJvZ3JhbTogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zOiBTcGF3bk9wdGlvbnMgJiB7IG5vQ29sb3I/OiBib29sZWFuIH0gPSB7fSxcbikge1xuICByZXR1cm4gZXhlYyhcbiAgICBwcm9ncmFtLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9ucyxcbiAgICAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgY29uc29sZS5sb2coc2FuaXRpemVkQ2h1bmspO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgLy8gTm8tb3A6IHBhc3NpbmcgYSBjYWxsYmFjayAodnMuIHVuZGVmaW5lZCkgc3VwcHJlc3NlcyBleGVjKCkncyBkZWZhdWx0XG4gICAgICAvLyBwYXNzLXRocm91Z2ggdG8gcHJvY2Vzcy5zdGRlcnI7IGlubmVyIGV4ZWMoKSBzdGlsbCBjb2xsZWN0cyBpdCBmb3JcbiAgICAgIC8vIHRoZSB0aHJvd24gZXJyb3IncyAuc3RkZXJyIGZpZWxkLlxuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcihcbiAgZGlybmFtZTogc3RyaW5nLFxuICBjbG9zdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuKSB7XG4gIGNvbnN0IHByZXZkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBwYXJlbnQgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjZGt0Zi5cIikpO1xuICBjb25zdCB3b3JrZGlyID0gcGF0aC5qb2luKHBhcmVudCwgZGlybmFtZSk7XG4gIGF3YWl0IGZzLm1rZGlycCh3b3JrZGlyKTtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHdvcmtkaXIpO1xuICAgIGF3YWl0IGNsb3N1cmUoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHByZXZkaXIpO1xuICAgIGF3YWl0IGZzLnJlbW92ZShwYXJlbnQpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBta2R0ZW1wKGNsb3N1cmU6IChkaXI6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPikge1xuICBjb25zdCB3b3JrZGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdGYuXCIpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbG9zdXJlKHdvcmtkaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh3b3JrZGlyKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwYXduIGEgY2hpbGQgcHJvY2VzcyBhbmQgcmVzb2x2ZSB3aXRoIGl0cyBzdGRvdXQsIG9yIHJlamVjdCB3aXRoIGEgZGVjb3JhdGVkIEVycm9yIG9uIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQ2FwdHVyZWQgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIGFsd2F5cyB0ZWUnZCB0byBgcHJvY2Vzc0xvZ2dlckRlYnVnYCAvIGBwcm9jZXNzTG9nZ2VyRXJyb3JgLiBUaGUgb3B0aW9uYWwgYHN0ZG91dGAgYW5kXG4gKiBgc3RkZXJyYCBjYWxsYmFja3MgcmVjZWl2ZSBlYWNoIHNhbml0aXplZCBjaHVuayBhcyBpdCBhcnJpdmVzIOKAlCB1c2VmdWwgZm9yIHN0cmVhbWluZyBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLlxuICogUGFzc2luZyBhIGBzdGRlcnJgIGNhbGxiYWNrIChldmVuIGEgbm8tb3ApIHN1cHByZXNzZXMgdGhlIGRlZmF1bHQgcGFzcy10aHJvdWdoIHRvIGBwcm9jZXNzLnN0ZGVycmAgZm9yIHRoYXQgc3RyZWFtLlxuICpcbiAqIE9uIG5vbi16ZXJvIGV4aXQsIHJlamVjdHMgd2l0aCBhbiB7QGxpbmsgRXhlY0Vycm9yfSBjYXJyeWluZyBgLnN0ZGVycmAgLyBgLnN0ZG91dGAgYW5kIGEgYHRvU3RyaW5nKClgIHRoYXQgaW5jbHVkZXNcbiAqIHRoZSBjYXB0dXJlZCBib2R5IChzZWUge0BsaW5rIGF0dGFjaFByb2Nlc3NPdXRwdXR9KTsgYC5tZXNzYWdlYCBpdHNlbGYgc3RheXMgYXMgdGhlIGhlYWRsaW5lLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdXRhYmxlIHRvIHNwYXduXG4gKiBAcGFyYW0gYXJncyBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gb3B0aW9ucyBzcGF3biBvcHRpb25zOyBgbm9Db2xvcjogdHJ1ZWAgc3RyaXBzIEFOU0kgZXNjYXBlcyBmcm9tIGNhcHR1cmVkIG91dHB1dCAoYXV0by1kZXRlY3RlZCBmcm9tIENMSSBmbGFnc1xuICogIC8gYEZPUkNFX0NPTE9SPTBgIHdoZW4gb21pdHRlZClcbiAqIEBwYXJhbSBzdGRvdXQgb3B0aW9uYWwgcGVyLWNodW5rIGNhbGxiYWNrIGZvciBzYW5pdGl6ZWQgc3Rkb3V0XG4gKiBAcGFyYW0gc3RkZXJyIG9wdGlvbmFsIHBlci1jaHVuayBjYWxsYmFjayBmb3Igc2FuaXRpemVkIHN0ZGVycjsgcGFzc2luZyBhIGNhbGxiYWNrIHN1cHByZXNzZXMgZGVmYXVsdCB0ZXJtaW5hbCBlY2hvXG4gKiBAcGFyYW0gc2VuZFRvU3RkZXJyIHdoZW4gZmFsc2UsIHN1cHByZXNzZXMgYm90aCB0aGUgc3RkZXJyIGNhbGxiYWNrIGludm9jYXRpb24gYW5kIHRoZSBkZWZhdWx0IHRlcm1pbmFsIGVjaG9cbiAqIEByZXR1cm5zIHRoZSBmdWxsIGNvbmNhdGVuYXRlZCBzdGRvdXQgYXMgYSBzdHJpbmcgb24gc3VjY2Vzc1xuICovXG5leHBvcnQgY29uc3QgZXhlYyA9IGFzeW5jIChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogU3Bhd25PcHRpb25zICYgeyBub0NvbG9yPzogYm9vbGVhbiB9LFxuICBzdGRvdXQ/OiAoY2h1bms6IHN0cmluZykgPT4gYW55LFxuICBzdGRlcnI/OiAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IGFueSxcbiAgc2VuZFRvU3RkZXJyID0gdHJ1ZSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIGlmIG9wdGlvbnMubm9Db2xvciBpcyBub3Qgc2V0LCBjaGVja2luZyB0aGUgZmxhZ3MgJiBlbnZpcm9ubWVudCBpZiBpdCBzaG91bGQgYmUgc2V0XG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvbGxlY3REZWJ1Z0luZm9ybWF0aW9uKCkgd2hpY2ggZG9lcyBub3QgaGF2ZSBrbm93bGVkZ2UgYWJvdXQgZmxhZ3NcbiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vQ29sb3IgIT09IFwiYm9vbGVhblwiICYmIGhhc05vQ29sb3JGbGFnT3JFbnYoKSkge1xuICAgIG9wdGlvbnMubm9Db2xvciA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBrbykgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywgb3B0aW9ucyk7XG4gICAgY29uc3Qgb3V0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBjb25zdCBlcnIgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGlmIChzdGRvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgICA/IHN0cmlwQW5zaShjaHVuay50b0xvY2FsZVN0cmluZygpKVxuICAgICAgICAgIDogY2h1bmsudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgcHJvY2Vzc0xvZ2dlckRlYnVnKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgb3V0LnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBzdGRvdXQoc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoaWxkLnN0ZG91dD8ub24oXCJkYXRhXCIsIChjaHVuazogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJEZWJ1ZyhzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIG91dC5wdXNoKHNhbml0aXplZENodW5rKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3RkZXJyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkLnN0ZGVycj8ub24oXCJkYXRhXCIsIChjaHVuazogc3RyaW5nIHwgVWludDhBcnJheSkgPT4ge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRDaHVuayA9IG9wdGlvbnMubm9Db2xvclxuICAgICAgICAgID8gc3RyaXBBbnNpKGNodW5rLnRvTG9jYWxlU3RyaW5nKCkpXG4gICAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBwcm9jZXNzTG9nZ2VyRXJyb3Ioc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBpZiAoc2VuZFRvU3RkZXJyKSB7XG4gICAgICAgICAgc3RkZXJyKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlcnIucHVzaChzYW5pdGl6ZWRDaHVuayk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQuc3RkZXJyPy5vbihcImRhdGFcIiwgKGNodW5rOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJFcnJvcihzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIGlmIChzZW5kVG9TdGRlcnIpIHtcbiAgICAgICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgZXJyLnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGNoaWxkLm9uY2UoXCJlcnJvclwiLCAoZXJyOiBhbnkpID0+IGtvKGVycikpO1xuICAgIGNoaWxkLm9uY2UoXCJjbG9zZVwiLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWAsXG4gICAgICAgICk7XG4gICAgICAgIGF0dGFjaFByb2Nlc3NPdXRwdXQoZXJyb3IsIGVyci5qb2luKFwiXCIpLCBvdXQuam9pbihcIlwiKSk7XG4gICAgICAgIHJldHVybiBrbyhlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2sob3V0LmpvaW4oXCJcIikpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ0RLVEZWZXJzaW9uKG91dHB1dERpcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgb3V0cHV0RmlsZSA9IHBhdGguam9pbihvdXRwdXREaXIsIFwiY2RrLnRmLmpzb25cIik7XG4gIGlmIChmcy5leGlzdHNTeW5jKG91dHB1dEZpbGUpKSB7XG4gICAgY29uc3Qgb3V0cHV0SlNPTiA9IGZzLnJlYWRGaWxlU3luYyhvdXRwdXRGaWxlLCBcInV0ZjhcIik7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uob3V0cHV0SlNPTik7XG4gICAgcmV0dXJuIGRhdGFbXCIvL1wiXS5tZXRhZGF0YS52ZXJzaW9uO1xuICB9XG5cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkQ0RLVEZNYW5pZmVzdCgpOiBQcm9taXNlPElNYW5pZmVzdD4ge1xuICBjb25zdCB7IG91dHB1dCB9ID0gY29uZmlnLnJlYWRDb25maWdTeW5jKCk7XG4gIGNvbnN0IGpzb24gPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4ob3V0cHV0LCBNYW5pZmVzdC5maWxlTmFtZSkpO1xuICByZXR1cm4gSlNPTi5wYXJzZShqc29uLnRvU3RyaW5nKCkpIGFzIElNYW5pZmVzdDtcbn1cblxuLyoqXG4gKiBEb3duY2FzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyB0byBiZSBwcm9jZXNzZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3duY2FzZUZpcnN0KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHN0ciA9PT0gXCJcIikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgcmV0dXJuIGAke3N0clswXS50b0xvY2FsZUxvd2VyQ2FzZSgpfSR7c3RyLnNsaWNlKDEpfWA7XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgcHVibGljIHN0YXR1c0NvZGU/OiBudW1iZXIsXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpOyAvLyAnRXJyb3InIGJyZWFrcyBwcm90b3R5cGUgY2hhaW4gaGVyZVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBuZXcudGFyZ2V0LnByb3RvdHlwZSk7IC8vIHJlc3RvcmUgcHJvdG90eXBlIGNoYWluXG4gICAgLy8gc2VlOiBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtMi0yLmh0bWwjc3VwcG9ydC1mb3ItbmV3dGFyZ2V0XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZShcbiAgdXJsOiBzdHJpbmcsXG4gIHRhcmdldEZpbGVuYW1lOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgLy8gaWYgdGhlIHR5cGUgaXMgaW5mZXJyZWQgdG8gYmUgXCJodHRwfGh0dHBzXCIgY2FsbGluZyAuZ2V0KCkgaXMgbm90IHBvc3NpYmxlXG4gIC8vIGJlY2F1c2UgdGhlIG9wdGlvbnMgcGFyYW1ldGVyICh3aGljaCB3ZSBkb24ndCB1c2UgYW55d2F5KSBmb3IgZ2V0IGlzXG4gIC8vIG5vdCBjb21wYXRpYmxlIGJldHdlZW4gaHR0cCBhbmQgaHR0cHMgLT4gc28gd2UgdHJlYXQgaXQgYXMgaHR0cFxuICBjb25zdCBjbGllbnQgPSAodXJsLnN0YXJ0c1dpdGgoXCJodHRwOi8vXCIpID8gaHR0cCA6IGh0dHBzKSBhcyB0eXBlb2YgaHR0cDtcbiAgY29uc3QgZmlsZSA9IGZzLmNyZWF0ZVdyaXRlU3RyZWFtKHRhcmdldEZpbGVuYW1lKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChvaywga28pID0+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50LmdldCh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICBrbyhcbiAgICAgICAgICBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBnZXQgJyR7dXJsfScgKCR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0pYCxcbiAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c0NvZGUsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2UucGlwZShmaWxlKTtcbiAgICB9KTtcblxuICAgIGZpbGUub24oXCJmaW5pc2hcIiwgKCkgPT4gb2soKSk7XG5cbiAgICByZXF1ZXN0Lm9uKFwiZXJyb3JcIiwgKGVycjogRXJyb3IpID0+IHtcbiAgICAgIGZzLnVubGluayh0YXJnZXRGaWxlbmFtZSwgKCkgPT4ga28oZXJyKSk7XG4gICAgfSk7XG5cbiAgICBmaWxlLm9uKFwiZXJyb3JcIiwgKGVycikgPT4ge1xuICAgICAgZnMudW5saW5rKHRhcmdldEZpbGVuYW1lLCAoKSA9PiBrbyhlcnIpKTtcbiAgICB9KTtcblxuICAgIHJlcXVlc3QuZW5kKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEF3YWl0cyBhIHByb21pc2UgYW5kIG1ha2VzIHN1cmUgaXQncyBlcnJvciAoaWYgYW55KSBpcyBvbmx5IHRocm93biBhZnRlciBhbGwgb3RoZXIgcHJvbWlzZXMgYXJlIHNldHRsZWRcbiAqIGlmIHRoZSBwcm9taXNlIGRvZXMgbm90IHRocm93IGFuIGVycm9yLCB0aGUgb3RoZXIgcHJvbWlzZXMgd29uJ3QgYmUgYXdhaXRlZFxuICogQHBhcmFtIHAgcHJvbWlzZSB0byBhd2FpdFxuICogQHBhcmFtIHByb21pc2VzIHByb21pc2VzIHRvIGF3YWl0IHRvIGJlIGFsbCBzZXR0bGVkIGlmIHAgZmFpbGVkIGJlZm9yZSB0aHJvd2luZyBlcnJvciB0aGF0IHAgZmFpbGVkIHdpdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyhcbiAgcDogUHJvbWlzZTxhbnk+LFxuICBwcm9taXNlczogKFByb21pc2U8YW55PiB8IHVuZGVmaW5lZClbXSxcbikge1xuICB0cnkge1xuICAgIGF3YWl0IHA7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBpZiBhbiBlcnJvciBoYXBwZW5lZCwgd2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZvciBhbGwgb3RoZXIgcHJvbWlzZXMgdGhhdFxuICAgIC8vIGFyZSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgdG8gY29tcGxldGUgdG8gYWxsb3cgdGhlbSB0byBwcm9wZXJseSB3cmFwIHVwXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHByb21pc2VzKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbi8qKlxuICogcmV0dXJucyB0cnVlIGlmIC0tbm8tY29sb3IgaXMgcGFzc2VkIGFzIENMSSBmbGFnIG9yIHRoZSBlbnYgdmFyIEZPUkNFX0NPTE9SIGlzIHNldCB0byBcIjBcIlxuICogVXNlZCBmb3IgY2FzZXMgd2hlcmUgd2UgY2FuJ3QgcGFzcyBkb3duIHRoZSBub0NvbG9yIGZsYWcgKGUuZy4gd2hlbiBjb2xsZWN0aW5nIGRlYnVnIGluZm9ybWF0aW9uIGZyb20gdGhlIGVudmlyb25tZW50KVxuICogVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvciBhcyB0aGUgYGNoYWxrYCBsaWIgd2UgdXNlIGZvciBjb2xvcmluZyBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc05vQ29sb3JGbGFnT3JFbnYoKTogYm9vbGVhbiB7XG4gIHJldHVybiBoYXNGbGFnKFwibm8tY29sb3JcIikgfHwgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09IFwiMFwiO1xufVxuXG4vLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2hhcy1mbGFnL2Jsb2IvbWFpbi9pbmRleC5qc1xuLy8gYXMgdXNlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvY2hhbGtcbmZ1bmN0aW9uIGhhc0ZsYWcoZmxhZzogc3RyaW5nKSB7XG4gIGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aChcIi1cIikgPyBcIlwiIDogZmxhZy5sZW5ndGggPT09IDEgPyBcIi1cIiA6IFwiLS1cIjtcbiAgY29uc3QgcG9zaXRpb24gPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihwcmVmaXggKyBmbGFnKTtcbiAgY29uc3QgdGVybWluYXRvclBvc2l0aW9uID0gcHJvY2Vzcy5hcmd2LmluZGV4T2YoXCItLVwiKTtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbiAhPT0gLTEgJiZcbiAgICAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbilcbiAgKTtcbn1cbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsNkNBQW9DO0FBQ3BDLDZDQUErQjtBQUMvQix1REFBK0M7QUFDL0MsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3Qix1Q0FBbUU7QUFDbkUsaUNBQTRDO0FBQzVDLGlEQUFtQztBQUNuQyw0REFBbUM7QUFJbkM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLG1CQUFtQixDQUMxQixLQUFZLEVBQ1osVUFBa0IsRUFDbEIsVUFBa0I7SUFFakIsS0FBbUIsQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO0lBQ3hDLEtBQW1CLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQy9CLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkQsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQ3pCLE9BQWUsRUFDZixPQUFpQixFQUFFLEVBQ25CLFVBQWdELEVBQUU7SUFFbEQsT0FBTyxJQUFBLFlBQUksRUFDVCxPQUFPLEVBQ1AsSUFBSSxFQUNKLE9BQU8sRUFDUCxDQUFDLEtBQWEsRUFBRSxFQUFFO1FBQ2hCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1lBQ3BDLENBQUMsQ0FBQyxJQUFBLG9CQUFTLEVBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxD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QUM7QUFGRCxrREFFQztBQUVELG9FQUFvRTtBQUNwRSw0Q0FBNEM7QUFDNUMsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQ0wsUUFBUSxLQUFLLENBQUMsQ0FBQztRQUNmLENBQUMsa0JBQWtCLEtBQUssQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLGtCQUFrQixDQUFDLENBQzdELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFNwYXduT3B0aW9ucyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gXCJjcm9zcy1zcGF3blwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgeyBodHRwcywgaHR0cCB9IGZyb20gXCJmb2xsb3ctcmVkaXJlY3RzXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHByb2Nlc3NMb2dnZXJFcnJvciwgcHJvY2Vzc0xvZ2dlckRlYnVnIH0gZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgSU1hbmlmZXN0LCBNYW5pZmVzdCB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHN0cmlwQW5zaSBmcm9tIFwic3RyaXAtYW5zaVwiO1xuXG50eXBlIEV4ZWNFcnJvciA9IEVycm9yICYgeyBzdGRlcnI6IHN0cmluZzsgc3Rkb3V0OiBzdHJpbmcgfTtcblxuLyoqXG4gKiBBdHRhY2ggY2FwdHVyZWQgc3RkZXJyL3N0ZG91dCB0byBhIHByb2Nlc3MtZmFpbHVyZSBFcnJvci5cbiAqXG4gKiBUaGUgYm9keSB0ZXh0IGlzIGV4cG9zZWQgdHdvIHdheXM6XG4gKiAtIGAuc3RkZXJyYCBhbmQgYC5zdGRvdXRgIHByb3BlcnRpZXMsIGZvciBjYWxsZXJzIHRoYXQgcmVuZGVyIHRoZSBzdHJlYW1zIHNlcGFyYXRlbHkgKGUuZy4gc3ludGgtc3RhY2sncyBjaGFsa1xuICogICBmb3JtYXR0aW5nKS5cbiAqIC0gQSBgdG9TdHJpbmcoKWAgb3ZlcnJpZGUgdGhhdCBhcHBlbmRzIHRoZSBib2R5IGFmdGVyIHRoZSBoZWFkbGluZSwgc28gY2FsbGVycyB1c2luZyBgJHtlfWAgaW50ZXJwb2xhdGlvbiBzdXJmYWNlIHRoZVxuICogICB1bmRlcmx5aW5nIHRvb2wgb3V0cHV0IHdpdGhvdXQgZG91YmxlLXByaW50aW5nIGZvciB0aGUgcHJvcGVydHktcmVhZGluZyBjYWxsZXJzLlxuICpcbiAqIFRoZSBFcnJvcidzIGAubWVzc2FnZWAgaXMgbGVmdCB1bnRvdWNoZWQgYXMgdGhlIGhlYWRsaW5lIG9ubHkuXG4gKlxuICogQHBhcmFtIGVycm9yIHRoZSBFcnJvciB0byBkZWNvcmF0ZSAoaXRzIGAubWVzc2FnZWAgYmVjb21lcyB0aGUgdG9TdHJpbmcgaGVhZGxpbmUpXG4gKiBAcGFyYW0gc3RkZXJyVGV4dCBjYXB0dXJlZCBzdGRlcnIsIG1heSBiZSBlbXB0eVxuICogQHBhcmFtIHN0ZG91dFRleHQgY2FwdHVyZWQgc3Rkb3V0LCBtYXkgYmUgZW1wdHlcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUHJvY2Vzc091dHB1dChcbiAgZXJyb3I6IEVycm9yLFxuICBzdGRlcnJUZXh0OiBzdHJpbmcsXG4gIHN0ZG91dFRleHQ6IHN0cmluZyxcbik6IGFzc2VydHMgZXJyb3IgaXMgRXhlY0Vycm9yIHtcbiAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyVGV4dDtcbiAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3Rkb3V0ID0gc3Rkb3V0VGV4dDtcbiAgY29uc3QgYm9keSA9IFtzdGRlcnJUZXh0LCBzdGRvdXRUZXh0XS5maWx0ZXIoQm9vbGVhbikuam9pbihcIlxcblwiKTtcbiAgaWYgKGJvZHkpIHtcbiAgICBjb25zdCBoZWFkbGluZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgZXJyb3IudG9TdHJpbmcgPSAoKSA9PiBgRXJyb3I6ICR7aGVhZGxpbmV9XFxuJHtib2R5fWA7XG4gIH1cbn1cblxuLyoqXG4gKiBTcGF3biBhIGNoaWxkIHByb2Nlc3MgYW5kIG1pcnJvciBpdHMgc3Rkb3V0IHRvIHRoZSBwYXJlbnQncyBjb25zb2xlLlxuICpcbiAqIFRoaW4gd3JhcHBlciBvdmVyIHtAbGluayBleGVjfSBmb3IgY2FsbGVycyB0aGF0IHdhbnQgc3Rkb3V0IGNodW5rcyBlY2hvZWQgdmlhIGBjb25zb2xlLmxvZ2AgYXMgdGhleSBhcnJpdmUuIFN0ZGVyciBpc1xuICogY2FwdHVyZWQgc2lsZW50bHkgYW5kIHN1cmZhY2VkIG9uIHRoZSB0aHJvd24gRXJyb3IncyBgLnN0ZGVycmAgLyBgdG9TdHJpbmcoKWAgaWYgdGhlIHByb2Nlc3MgZXhpdHMgbm9uLXplcm8uXG4gKlxuICogQHBhcmFtIHByb2dyYW0gdGhlIGV4ZWN1dGFibGUgdG8gc3Bhd25cbiAqIEBwYXJhbSBhcmdzIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGV4ZWN1dGFibGVcbiAqIEBwYXJhbSBvcHRpb25zIHNwYXduIG9wdGlvbnM7IGBub0NvbG9yOiB0cnVlYCBzdHJpcHMgQU5TSSBlc2NhcGVzIGZyb20gY2FwdHVyZWQgb3V0cHV0XG4gKiBAcmV0dXJucyB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgc3Rkb3V0IGFzIGEgc3RyaW5nIG9uIHN1Y2Nlc3NcbiAqIEB0aHJvd3MgYW4gRXJyb3Igd2l0aCBgLnN0ZGVycmAgYW5kIGAuc3Rkb3V0YCBwcm9wZXJ0aWVzIChzZWUge0BsaW5rIGF0dGFjaFByb2Nlc3NPdXRwdXR9KSBvbiBub24temVybyBleGl0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaGVsbChcbiAgcHJvZ3JhbTogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zOiBTcGF3bk9wdGlvbnMgJiB7IG5vQ29sb3I/OiBib29sZWFuIH0gPSB7fSxcbikge1xuICByZXR1cm4gZXhlYyhcbiAgICBwcm9ncmFtLFxuICAgIGFyZ3MsXG4gICAgb3B0aW9ucyxcbiAgICAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgY29uc29sZS5sb2coc2FuaXRpemVkQ2h1bmspO1xuICAgIH0sXG4gICAgKCkgPT4ge1xuICAgICAgLy8gTm8tb3A6IHBhc3NpbmcgYSBjYWxsYmFjayAodnMuIHVuZGVmaW5lZCkgc3VwcHJlc3NlcyBleGVjKCkncyBkZWZhdWx0XG4gICAgICAvLyBwYXNzLXRocm91Z2ggdG8gcHJvY2Vzcy5zdGRlcnI7IGlubmVyIGV4ZWMoKSBzdGlsbCBjb2xsZWN0cyBpdCBmb3JcbiAgICAgIC8vIHRoZSB0aHJvd24gZXJyb3IncyAuc3RkZXJyIGZpZWxkLlxuICAgIH0sXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoVGVtcERpcihcbiAgZGlybmFtZTogc3RyaW5nLFxuICBjbG9zdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+LFxuKSB7XG4gIGNvbnN0IHByZXZkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBwYXJlbnQgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjZGt0Zi5cIikpO1xuICBjb25zdCB3b3JrZGlyID0gcGF0aC5qb2luKHBhcmVudCwgZGlybmFtZSk7XG4gIGF3YWl0IGZzLm1rZGlycCh3b3JrZGlyKTtcbiAgdHJ5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHdvcmtkaXIpO1xuICAgIGF3YWl0IGNsb3N1cmUoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBwcm9jZXNzLmNoZGlyKHByZXZkaXIpO1xuICAgIGF3YWl0IGZzLnJlbW92ZShwYXJlbnQpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBta2R0ZW1wKGNsb3N1cmU6IChkaXI6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPikge1xuICBjb25zdCB3b3JrZGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY2RrdGYuXCIpKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBjbG9zdXJlKHdvcmtkaXIpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGZzLnJlbW92ZSh3b3JrZGlyKTtcbiAgfVxufVxuXG4vKipcbiAqIFNwYXduIGEgY2hpbGQgcHJvY2VzcyBhbmQgcmVzb2x2ZSB3aXRoIGl0cyBzdGRvdXQsIG9yIHJlamVjdCB3aXRoIGEgZGVjb3JhdGVkIEVycm9yIG9uIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQ2FwdHVyZWQgc3Rkb3V0IGFuZCBzdGRlcnIgYXJlIGFsd2F5cyB0ZWUnZCB0byBgcHJvY2Vzc0xvZ2dlckRlYnVnYCAvIGBwcm9jZXNzTG9nZ2VyRXJyb3JgLiBUaGUgb3B0aW9uYWwgYHN0ZG91dGAgYW5kXG4gKiBgc3RkZXJyYCBjYWxsYmFja3MgcmVjZWl2ZSBlYWNoIHNhbml0aXplZCBjaHVuayBhcyBpdCBhcnJpdmVzIOKAlCB1c2VmdWwgZm9yIHN0cmVhbWluZyBvdXRwdXQgdG8gdGhlIHRlcm1pbmFsLlxuICogUGFzc2luZyBhIGBzdGRlcnJgIGNhbGxiYWNrIChldmVuIGEgbm8tb3ApIHN1cHByZXNzZXMgdGhlIGRlZmF1bHQgcGFzcy10aHJvdWdoIHRvIGBwcm9jZXNzLnN0ZGVycmAgZm9yIHRoYXQgc3RyZWFtLlxuICpcbiAqIE9uIG5vbi16ZXJvIGV4aXQsIHJlamVjdHMgd2l0aCBhbiB7QGxpbmsgRXhlY0Vycm9yfSBjYXJyeWluZyBgLnN0ZGVycmAgLyBgLnN0ZG91dGAgYW5kIGEgYHRvU3RyaW5nKClgIHRoYXQgaW5jbHVkZXNcbiAqIHRoZSBjYXB0dXJlZCBib2R5IChzZWUge0BsaW5rIGF0dGFjaFByb2Nlc3NPdXRwdXR9KTsgYC5tZXNzYWdlYCBpdHNlbGYgc3RheXMgYXMgdGhlIGhlYWRsaW5lLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIHRoZSBleGVjdXRhYmxlIHRvIHNwYXduXG4gKiBAcGFyYW0gYXJncyBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBleGVjdXRhYmxlXG4gKiBAcGFyYW0gb3B0aW9ucyBzcGF3biBvcHRpb25zOyBgbm9Db2xvcjogdHJ1ZWAgc3RyaXBzIEFOU0kgZXNjYXBlcyBmcm9tIGNhcHR1cmVkIG91dHB1dCAoYXV0by1kZXRlY3RlZCBmcm9tIENMSSBmbGFnc1xuICogIC8gYEZPUkNFX0NPTE9SPTBgIHdoZW4gb21pdHRlZClcbiAqIEBwYXJhbSBzdGRvdXQgb3B0aW9uYWwgcGVyLWNodW5rIGNhbGxiYWNrIGZvciBzYW5pdGl6ZWQgc3Rkb3V0XG4gKiBAcGFyYW0gc3RkZXJyIG9wdGlvbmFsIHBlci1jaHVuayBjYWxsYmFjayBmb3Igc2FuaXRpemVkIHN0ZGVycjsgcGFzc2luZyBhIGNhbGxiYWNrIHN1cHByZXNzZXMgZGVmYXVsdCB0ZXJtaW5hbCBlY2hvXG4gKiBAcGFyYW0gc2VuZFRvU3RkZXJyIHdoZW4gZmFsc2UsIHN1cHByZXNzZXMgYm90aCB0aGUgc3RkZXJyIGNhbGxiYWNrIGludm9jYXRpb24gYW5kIHRoZSBkZWZhdWx0IHRlcm1pbmFsIGVjaG9cbiAqIEByZXR1cm5zIHRoZSBmdWxsIGNvbmNhdGVuYXRlZCBzdGRvdXQgYXMgYSBzdHJpbmcgb24gc3VjY2Vzc1xuICovXG5leHBvcnQgY29uc3QgZXhlYyA9IGFzeW5jIChcbiAgY29tbWFuZDogc3RyaW5nLFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogU3Bhd25PcHRpb25zICYgeyBub0NvbG9yPzogYm9vbGVhbiB9LFxuICBzdGRvdXQ/OiAoY2h1bms6IHN0cmluZykgPT4gYW55LFxuICBzdGRlcnI/OiAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IGFueSxcbiAgc2VuZFRvU3RkZXJyID0gdHJ1ZSxcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIC8vIGlmIG9wdGlvbnMubm9Db2xvciBpcyBub3Qgc2V0LCBjaGVja2luZyB0aGUgZmxhZ3MgJiBlbnZpcm9ubWVudCBpZiBpdCBzaG91bGQgYmUgc2V0XG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIGNvbGxlY3REZWJ1Z0luZm9ybWF0aW9uKCkgd2hpY2ggZG9lcyBub3QgaGF2ZSBrbm93bGVkZ2UgYWJvdXQgZmxhZ3NcbiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vQ29sb3IgIT09IFwiYm9vbGVhblwiICYmIGhhc05vQ29sb3JGbGFnT3JFbnYoKSkge1xuICAgIG9wdGlvbnMubm9Db2xvciA9IHRydWU7XG4gIH1cblxuICAvLyBEcm9wIHNwYXduJ3MgYHNpZ25hbGAgb3B0aW9uOiB0aGUgY2hpbGQgYWxyZWFkeSBnZXRzIHRoZSBpbnRlcnJ1cHQgdmlhIHRoZSBwcm9jZXNzIGdyb3VwLCBhbmQgYSBzZWNvbmQgc2lnbmFsXG4gIC8vIGFib3J0cyB0ZXJyYWZvcm0ncyBncmFjZWZ1bCBzaHV0ZG93bi4gSnVzdCB3YWl0IGZvciBpdHMgb3duIFwiY2xvc2VcIi5cbiAgY29uc3QgeyBzaWduYWw6IF9zaWduYWwsIC4uLnNwYXduT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBrbykgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywgc3Bhd25PcHRpb25zKTtcbiAgICBjb25zdCBvdXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGNvbnN0IGVyciA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgaWYgKHN0ZG91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZC5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRDaHVuayA9IG9wdGlvbnMubm9Db2xvclxuICAgICAgICAgID8gc3RyaXBBbnNpKGNodW5rLnRvTG9jYWxlU3RyaW5nKCkpXG4gICAgICAgICAgOiBjaHVuay50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICBwcm9jZXNzTG9nZ2VyRGVidWcoc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICBvdXQucHVzaChzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIHN0ZG91dChzYW5pdGl6ZWRDaHVuayk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQuc3Rkb3V0Py5vbihcImRhdGFcIiwgKGNodW5rOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgICA/IHN0cmlwQW5zaShjaHVuay50b0xvY2FsZVN0cmluZygpKVxuICAgICAgICAgIDogY2h1bmsudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgcHJvY2Vzc0xvZ2dlckRlYnVnKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgb3V0LnB1c2goc2FuaXRpemVkQ2h1bmspO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzdGRlcnIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hpbGQuc3RkZXJyPy5vbihcImRhdGFcIiwgKGNodW5rOiBzdHJpbmcgfCBVaW50OEFycmF5KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZENodW5rID0gb3B0aW9ucy5ub0NvbG9yXG4gICAgICAgICAgPyBzdHJpcEFuc2koY2h1bmsudG9Mb2NhbGVTdHJpbmcoKSlcbiAgICAgICAgICA6IGNodW5rLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgIHByb2Nlc3NMb2dnZXJFcnJvcihzYW5pdGl6ZWRDaHVuayk7XG4gICAgICAgIGlmIChzZW5kVG9TdGRlcnIpIHtcbiAgICAgICAgICBzdGRlcnIoc2FuaXRpemVkQ2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIGVyci5wdXNoKHNhbml0aXplZENodW5rKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZC5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoY2h1bms6IHN0cmluZyB8IFVpbnQ4QXJyYXkpID0+IHtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkQ2h1bmsgPSBvcHRpb25zLm5vQ29sb3JcbiAgICAgICAgICA/IHN0cmlwQW5zaShjaHVuay50b0xvY2FsZVN0cmluZygpKVxuICAgICAgICAgIDogY2h1bmsudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgcHJvY2Vzc0xvZ2dlckVycm9yKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgaWYgKHNlbmRUb1N0ZGVycikge1xuICAgICAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKHNhbml0aXplZENodW5rKTtcbiAgICAgICAgfVxuICAgICAgICBlcnIucHVzaChzYW5pdGl6ZWRDaHVuayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgY2hpbGQub25jZShcImVycm9yXCIsIChlcnI6IGFueSkgPT4ga28oZXJyKSk7XG4gICAgY2hpbGQub25jZShcImNsb3NlXCIsIChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGAke2NvbW1hbmR9ICR7YXJncy5qb2luKFwiIFwiKX0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCxcbiAgICAgICAgKTtcbiAgICAgICAgYXR0YWNoUHJvY2Vzc091dHB1dChlcnJvciwgZXJyLmpvaW4oXCJcIiksIG91dC5qb2luKFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIGtvKGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvayhvdXQuam9pbihcIlwiKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDREtURlZlcnNpb24ob3V0cHV0RGlyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aC5qb2luKG91dHB1dERpciwgXCJjZGsudGYuanNvblwiKTtcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3V0cHV0RmlsZSkpIHtcbiAgICBjb25zdCBvdXRwdXRKU09OID0gZnMucmVhZEZpbGVTeW5jKG91dHB1dEZpbGUsIFwidXRmOFwiKTtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShvdXRwdXRKU09OKTtcbiAgICByZXR1cm4gZGF0YVtcIi8vXCJdLm1ldGFkYXRhLnZlcnNpb247XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRDREtURk1hbmlmZXN0KCk6IFByb21pc2U8SU1hbmlmZXN0PiB7XG4gIGNvbnN0IHsgb3V0cHV0IH0gPSBjb25maWcucmVhZENvbmZpZ1N5bmMoKTtcbiAgY29uc3QganNvbiA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhdGguam9pbihvdXRwdXQsIE1hbmlmZXN0LmZpbGVOYW1lKSk7XG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24udG9TdHJpbmcoKSkgYXMgSU1hbmlmZXN0O1xufVxuXG4vKipcbiAqIERvd25jYXNlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciB0aGUgc3RyaW5nIHRvIGJlIHByb2Nlc3NlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRvd25jYXNlRmlyc3Qoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoc3RyID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICByZXR1cm4gYCR7c3RyWzBdLnRvTG9jYWxlTG93ZXJDYXNlKCl9JHtzdHIuc2xpY2UoMSl9YDtcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICBwdWJsaWMgc3RhdHVzQ29kZT86IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7IC8vICdFcnJvcicgYnJlYWtzIHByb3RvdHlwZSBjaGFpbiBoZXJlXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsIG5ldy50YXJnZXQucHJvdG90eXBlKTsgLy8gcmVzdG9yZSBwcm90b3R5cGUgY2hhaW5cbiAgICAvLyBzZWU6IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0yLTIuaHRtbCNzdXBwb3J0LWZvci1uZXd0YXJnZXRcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRGaWxlKFxuICB1cmw6IHN0cmluZyxcbiAgdGFyZ2V0RmlsZW5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICAvLyBpZiB0aGUgdHlwZSBpcyBpbmZlcnJlZCB0byBiZSBcImh0dHB8aHR0cHNcIiBjYWxsaW5nIC5nZXQoKSBpcyBub3QgcG9zc2libGVcbiAgLy8gYmVjYXVzZSB0aGUgb3B0aW9ucyBwYXJhbWV0ZXIgKHdoaWNoIHdlIGRvbid0IHVzZSBhbnl3YXkpIGZvciBnZXQgaXNcbiAgLy8gbm90IGNvbXBhdGlibGUgYmV0d2VlbiBodHRwIGFuZCBodHRwcyAtPiBzbyB3ZSB0cmVhdCBpdCBhcyBodHRwXG4gIGNvbnN0IGNsaWVudCA9ICh1cmwuc3RhcnRzV2l0aChcImh0dHA6Ly9cIikgPyBodHRwIDogaHR0cHMpIGFzIHR5cGVvZiBodHRwO1xuICBjb25zdCBmaWxlID0gZnMuY3JlYXRlV3JpdGVTdHJlYW0odGFyZ2V0RmlsZW5hbWUpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKG9rLCBrbykgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnQuZ2V0KHVybCwgKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIGtvKFxuICAgICAgICAgIG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGdldCAnJHt1cmx9JyAoJHtyZXNwb25zZS5zdGF0dXNDb2RlfSlgLFxuICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzQ29kZSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNwb25zZS5waXBlKGZpbGUpO1xuICAgIH0pO1xuXG4gICAgZmlsZS5vbihcImZpbmlzaFwiLCAoKSA9PiBvaygpKTtcblxuICAgIHJlcXVlc3Qub24oXCJlcnJvclwiLCAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgZnMudW5saW5rKHRhcmdldEZpbGVuYW1lLCAoKSA9PiBrbyhlcnIpKTtcbiAgICB9KTtcblxuICAgIGZpbGUub24oXCJlcnJvclwiLCAoZXJyKSA9PiB7XG4gICAgICBmcy51bmxpbmsodGFyZ2V0RmlsZW5hbWUsICgpID0+IGtvKGVycikpO1xuICAgIH0pO1xuXG4gICAgcmVxdWVzdC5lbmQoKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXdhaXRzIGEgcHJvbWlzZSBhbmQgbWFrZXMgc3VyZSBpdCdzIGVycm9yIChpZiBhbnkpIGlzIG9ubHkgdGhyb3duIGFmdGVyIGFsbCBvdGhlciBwcm9taXNlcyBhcmUgc2V0dGxlZFxuICogaWYgdGhlIHByb21pc2UgZG9lcyBub3QgdGhyb3cgYW4gZXJyb3IsIHRoZSBvdGhlciBwcm9taXNlcyB3b24ndCBiZSBhd2FpdGVkXG4gKiBAcGFyYW0gcCBwcm9taXNlIHRvIGF3YWl0XG4gKiBAcGFyYW0gcHJvbWlzZXMgcHJvbWlzZXMgdG8gYXdhaXQgdG8gYmUgYWxsIHNldHRsZWQgaWYgcCBmYWlsZWQgYmVmb3JlIHRocm93aW5nIGVycm9yIHRoYXQgcCBmYWlsZWQgd2l0aFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQWxsU2V0dGxlZEJlZm9yZVRocm93aW5nKFxuICBwOiBQcm9taXNlPGFueT4sXG4gIHByb21pc2VzOiAoUHJvbWlzZTxhbnk+IHwgdW5kZWZpbmVkKVtdLFxuKSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGlmIGFuIGVycm9yIGhhcHBlbmVkLCB3ZSBzdGlsbCBuZWVkIHRvIHdhaXQgZm9yIGFsbCBvdGhlciBwcm9taXNlcyB0aGF0XG4gICAgLy8gYXJlIGN1cnJlbnRseSBpbiBwcm9ncmVzcyB0byBjb21wbGV0ZSB0byBhbGxvdyB0aGVtIHRvIHByb3Blcmx5IHdyYXAgdXBcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocHJvbWlzZXMpO1xuICAgIHRocm93IGU7XG4gIH1cbn1cblxuLyoqXG4gKiByZXR1cm5zIHRydWUgaWYgLS1uby1jb2xvciBpcyBwYXNzZWQgYXMgQ0xJIGZsYWcgb3IgdGhlIGVudiB2YXIgRk9SQ0VfQ09MT1IgaXMgc2V0IHRvIFwiMFwiXG4gKiBVc2VkIGZvciBjYXNlcyB3aGVyZSB3ZSBjYW4ndCBwYXNzIGRvd24gdGhlIG5vQ29sb3IgZmxhZyAoZS5nLiB3aGVuIGNvbGxlY3RpbmcgZGVidWcgaW5mb3JtYXRpb24gZnJvbSB0aGUgZW52aXJvbm1lbnQpXG4gKiBUaGlzIGlzIHRoZSBzYW1lIGJlaGF2aW9yIGFzIHRoZSBgY2hhbGtgIGxpYiB3ZSB1c2UgZm9yIGNvbG9yaW5nIG91dHB1dFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzTm9Db2xvckZsYWdPckVudigpOiBib29sZWFuIHtcbiAgcmV0dXJuIGhhc0ZsYWcoXCJuby1jb2xvclwiKSB8fCBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gXCIwXCI7XG59XG5cbi8vIEZyb206IGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaGFzLWZsYWcvYmxvYi9tYWluL2luZGV4LmpzXG4vLyBhcyB1c2VkIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGFsay9jaGFsa1xuZnVuY3Rpb24gaGFzRmxhZyhmbGFnOiBzdHJpbmcpIHtcbiAgY29uc3QgcHJlZml4ID0gZmxhZy5zdGFydHNXaXRoKFwiLVwiKSA/IFwiXCIgOiBmbGFnLmxlbmd0aCA9PT0gMSA/IFwiLVwiIDogXCItLVwiO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb2Nlc3MuYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuICBjb25zdCB0ZXJtaW5hdG9yUG9zaXRpb24gPSBwcm9jZXNzLmFyZ3YuaW5kZXhPZihcIi0tXCIpO1xuICByZXR1cm4gKFxuICAgIHBvc2l0aW9uICE9PSAtMSAmJlxuICAgICh0ZXJtaW5hdG9yUG9zaXRpb24gPT09IC0xIHx8IHBvc2l0aW9uIDwgdGVybWluYXRvclBvc2l0aW9uKVxuICApO1xufVxuIl19
package/package.json CHANGED
@@ -1,19 +1,10 @@
1
1
  {
2
2
  "name": "@cdktn/commons",
3
- "version": "0.23.3",
3
+ "version": "0.23.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
7
7
  "description": "CDK Terrain Common utilities",
8
- "scripts": {
9
- "build": "tsc",
10
- "watch": "tsc -w",
11
- "watch-preserve-output": "tsc -w --preserveWatchOutput",
12
- "test:update": "jest -u",
13
- "package": "./package.sh",
14
- "dist-clean": "rm -rf dist",
15
- "package:js": "./package.sh"
16
- },
17
8
  "main": "build/index.js",
18
9
  "types": "build/index.d.ts",
19
10
  "nx": {
@@ -39,26 +30,36 @@
39
30
  "license": "MPL-2.0",
40
31
  "dependencies": {
41
32
  "@sentry/node": "7.120.4",
42
- "cdktn": "0.23.3",
43
33
  "ci-info": "3.9.0",
44
34
  "codemaker": "1.128.0",
45
35
  "cross-spawn": "7.0.6",
46
36
  "follow-redirects": "1.15.11",
47
37
  "fs-extra": "11.3.4",
48
38
  "log4js": "6.9.1",
39
+ "semver": "7.7.4",
49
40
  "strip-ansi": "6.0.1",
50
- "uuid": "9.0.1",
51
- "validator": "13.15.35"
41
+ "validator": "13.15.35",
42
+ "cdktn": "0.23.4"
52
43
  },
53
44
  "devDependencies": {
45
+ "@types/cross-spawn": "6.0.6",
54
46
  "@types/follow-redirects": "1.14.4",
55
47
  "@types/fs-extra": "11.0.4",
56
- "@types/uuid": "9.0.8",
48
+ "@types/semver": "7.7.1",
57
49
  "@types/validator": "13.15.10",
58
50
  "tsc-files": "1.1.4",
59
51
  "typescript": "^5.0.0"
60
52
  },
61
53
  "lint-staged": {
62
54
  "src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"
55
+ },
56
+ "scripts": {
57
+ "build": "tsc",
58
+ "watch": "tsc -w",
59
+ "watch-preserve-output": "tsc -w --preserveWatchOutput",
60
+ "test:update": "jest -u",
61
+ "package": "./package.sh",
62
+ "dist-clean": "rm -rf dist",
63
+ "package:js": "./package.sh"
63
64
  }
64
- }
65
+ }