cdk-nextjs 0.7.4 → 0.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.jsii +37 -37
  2. package/docs/adapter-runtime.md +1 -1
  3. package/docs/harness-coverage.md +9 -8
  4. package/lib/adapter/adapter.mjs +220 -149
  5. package/lib/adapter/aws-cache-store.d.ts +28 -4
  6. package/lib/adapter/aws-cache-store.js +52 -21
  7. package/lib/adapter/aws-cache-store.test.js +36 -1
  8. package/lib/adapter/build-outputs.js +23 -1
  9. package/lib/adapter/build-outputs.test.js +18 -1
  10. package/lib/adapter/cache-handler.d.ts +4 -3
  11. package/lib/adapter/cache-handler.js +1 -1
  12. package/lib/adapter/cache-handler.mjs +131 -61
  13. package/lib/adapter/cache-handler.test.js +31 -1
  14. package/lib/adapter/cache-utils.d.ts +68 -2
  15. package/lib/adapter/cache-utils.js +108 -2
  16. package/lib/adapter/cache-utils.test.js +45 -1
  17. package/lib/adapter/init-cache.d.ts +1 -1
  18. package/lib/adapter/init-cache.js +60 -37
  19. package/lib/adapter/init-cache.test.js +55 -2
  20. package/lib/adapter/local-file-cache-handler.d.ts +2 -2
  21. package/lib/adapter/local-file-cache-handler.js +4 -5
  22. package/lib/adapter/s3-cache-handler.d.ts +23 -7
  23. package/lib/adapter/s3-cache-handler.js +63 -27
  24. package/lib/adapter/s3-cache-handler.test.js +168 -1
  25. package/lib/adapter/use-cache-default-handler.mjs +32 -9
  26. package/lib/adapter/use-cache-remote-handler.js +2 -3
  27. package/lib/adapter/use-cache-remote-handler.mjs +81 -61
  28. package/lib/nextjs-api.js +1 -1
  29. package/lib/nextjs-build/nextjs-build.d.ts +0 -7
  30. package/lib/nextjs-build/nextjs-build.js +4 -11
  31. package/lib/nextjs-build/nextjs-build.test.js +4 -3
  32. package/lib/nextjs-cache.js +1 -1
  33. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  34. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  35. package/lib/nextjs-distribution.js +1 -1
  36. package/lib/nextjs-post-deploy.js +1 -1
  37. package/lib/nextjs-static-assets.js +1 -1
  38. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  39. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  40. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  41. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  42. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  43. package/lib/runtime/image.d.ts +19 -0
  44. package/lib/runtime/image.js +28 -2
  45. package/lib/runtime/image.test.js +43 -1
  46. package/lib/runtime/lambda.mjs +14 -3
  47. package/lib/runtime/server.mjs +14 -3
  48. package/lib/utils/deployment-build-id.d.ts +11 -0
  49. package/lib/utils/deployment-build-id.js +15 -0
  50. package/package.json +3 -3
  51. package/scripts/e2e-harness/README.md +1 -1
@@ -26825,7 +26825,7 @@ var require_dist_cjs13 = __commonJS({
26825
26825
  var { setCredentialFeature: setCredentialFeature2 } = (init_client3(), __toCommonJS(client_exports2));
26826
26826
  var { CredentialsProviderError: CredentialsProviderError2, parseKnownFiles: parseKnownFiles2, getProfileName: getProfileName2 } = (init_config2(), __toCommonJS(config_exports));
26827
26827
  var { HttpRequest: HttpRequest2 } = (init_protocols(), __toCommonJS(protocols_exports));
26828
- var { createHash: createHash5, createPrivateKey, createPublicKey, sign: sign2 } = __require("node:crypto");
26828
+ var { createHash: createHash6, createPrivateKey, createPublicKey, sign: sign2 } = __require("node:crypto");
26829
26829
  var { promises } = __require("node:fs");
26830
26830
  var { homedir: homedir2 } = __require("node:os");
26831
26831
  var { dirname, join: join5 } = __require("node:path");
@@ -26994,7 +26994,7 @@ var require_dist_cjs13 = __commonJS({
26994
26994
  getTokenFilePath() {
26995
26995
  const directory = process.env.AWS_LOGIN_CACHE_DIRECTORY ?? join5(homedir2(), ".aws", "login", "cache");
26996
26996
  const loginSessionBytes = Buffer.from(this.loginSession, "utf8");
26997
- const loginSessionSha256 = createHash5("sha256").update(loginSessionBytes).digest("hex");
26997
+ const loginSessionSha256 = createHash6("sha256").update(loginSessionBytes).digest("hex");
26998
26998
  return join5(directory, `${loginSessionSha256}.json`);
26999
26999
  }
27000
27000
  derToRawSignature(derSignature) {
@@ -34170,6 +34170,14 @@ var import_debug5 = __toESM(require_src());
34170
34170
 
34171
34171
  // src/adapter/aws-cache-store.ts
34172
34172
  var import_client_dynamodb = __toESM(require_dist_cjs19());
34173
+
34174
+ // src/adapter/cache-utils.ts
34175
+ import { createHash as createHash5 } from "node:crypto";
34176
+ function sha256Hex(value) {
34177
+ return createHash5("sha256").update(value).digest("hex");
34178
+ }
34179
+
34180
+ // src/adapter/aws-cache-store.ts
34173
34181
  function resolveAwsCacheConfig() {
34174
34182
  return {
34175
34183
  bucketName: process.env.CDK_NEXTJS_CACHE_BUCKET_NAME || "",
@@ -34232,6 +34240,13 @@ function markerOf(item) {
34232
34240
  }
34233
34241
  var BATCH_GET_MAX_KEYS = 100;
34234
34242
  var DEFAULT_TAG_REFRESH_MS = 1e3;
34243
+ function hashedTag(tag) {
34244
+ return `#${sha256Hex(tag)}`;
34245
+ }
34246
+ var MAX_TAG_BYTES = 768;
34247
+ function sortKeyTag(tag) {
34248
+ return Buffer.byteLength(tag) <= MAX_TAG_BYTES ? tag : hashedTag(tag);
34249
+ }
34235
34250
  var TagMarkerTable = class {
34236
34251
  constructor(client, tableName, buildId) {
34237
34252
  this.client = client;
@@ -34254,7 +34269,7 @@ var TagMarkerTable = class {
34254
34269
  TableName: this.tableName,
34255
34270
  Key: {
34256
34271
  pk: { S: this.buildId },
34257
- sk: { S: tag }
34272
+ sk: { S: sortKeyTag(tag) }
34258
34273
  },
34259
34274
  ...markerUpdate(now, durations),
34260
34275
  ReturnValues: "ALL_NEW"
@@ -34274,7 +34289,13 @@ var TagMarkerTable = class {
34274
34289
  const unique = Array.from(new Set(tags));
34275
34290
  const markers = /* @__PURE__ */ new Map();
34276
34291
  for (let i5 = 0; i5 < unique.length; i5 += BATCH_GET_MAX_KEYS) {
34277
- let keys = unique.slice(i5, i5 + BATCH_GET_MAX_KEYS).map((tag) => ({ pk: { S: buildId }, sk: { S: tag } }));
34292
+ const tagBySk = new Map(
34293
+ unique.slice(i5, i5 + BATCH_GET_MAX_KEYS).map((tag) => [sortKeyTag(tag), tag])
34294
+ );
34295
+ let keys = Array.from(
34296
+ tagBySk.keys(),
34297
+ (sk) => ({ pk: { S: buildId }, sk: { S: sk } })
34298
+ );
34278
34299
  for (let attempt = 0; keys?.length && attempt < 3; attempt++) {
34279
34300
  const response = await this.client.send(
34280
34301
  new import_client_dynamodb.BatchGetItemCommand({
@@ -34287,7 +34308,7 @@ var TagMarkerTable = class {
34287
34308
  })
34288
34309
  );
34289
34310
  for (const item of response.Responses?.[tableName] ?? []) {
34290
- const tag = item.sk?.S;
34311
+ const tag = tagBySk.get(item.sk?.S ?? "");
34291
34312
  if (tag !== void 0) {
34292
34313
  markers.set(tag, markerOf(item));
34293
34314
  }
@@ -34325,11 +34346,13 @@ var RevalidationLog = class {
34325
34346
  * to {@link LOG_PUT_ATTEMPTS} times.
34326
34347
  */
34327
34348
  async put(tag, at, marker) {
34349
+ const skTag = sortKeyTag(tag);
34328
34350
  for (let attempt = 1; ; attempt++) {
34329
34351
  const item = {
34330
34352
  pk: { S: this.pk },
34331
- sk: { S: `${logSkPrefix(at)}#${tag}` },
34332
- ttl: { N: String(Math.ceil((at + REVALIDATION_LOG_TTL_MS) / 1e3)) }
34353
+ sk: { S: `${logSkPrefix(at)}#${skTag}` },
34354
+ ttl: { N: String(Math.ceil((at + REVALIDATION_LOG_TTL_MS) / 1e3)) },
34355
+ ...skTag !== tag && { longTag: { S: tag } }
34333
34356
  };
34334
34357
  for (const field of MARKER_FIELDS) {
34335
34358
  const value = marker[field];
@@ -34374,7 +34397,7 @@ var RevalidationLog = class {
34374
34397
  ":pk": { S: this.pk },
34375
34398
  ":since": { S: logSkPrefix(Math.max(0, since)) }
34376
34399
  },
34377
- ProjectionExpression: "sk, revalidatedAt, staleAt, expiredAt",
34400
+ ProjectionExpression: "sk, longTag, revalidatedAt, staleAt, expiredAt",
34378
34401
  ExclusiveStartKey: startKey
34379
34402
  })
34380
34403
  );
@@ -34386,7 +34409,7 @@ var RevalidationLog = class {
34386
34409
  rows.push({
34387
34410
  sk,
34388
34411
  at: Number(sk.slice(0, LOG_SK_DIGITS)),
34389
- tag: sk.slice(LOG_SK_DIGITS + 1),
34412
+ tag: item.longTag?.S ?? sk.slice(LOG_SK_DIGITS + 1),
34390
34413
  marker: markerOf(item)
34391
34414
  });
34392
34415
  }
@@ -16,7 +16,6 @@ exports.createRemoteUseCacheHandler = createRemoteUseCacheHandler;
16
16
  `'use cache'`.
17
17
  */
18
18
  /* eslint-disable import/no-extraneous-dependencies */
19
- const node_crypto_1 = require("node:crypto");
20
19
  const client_s3_1 = require("@aws-sdk/client-s3");
21
20
  const debug_1 = __importDefault(require("debug"));
22
21
  const aws_cache_store_1 = require("./aws-cache-store");
@@ -60,7 +59,7 @@ function createRemoteUseCacheHandler(options = {}) {
60
59
  const memory = new use_cache_common_1.EntryLru((0, use_cache_common_1.numberFromEnv)("CDK_NEXTJS_USE_CACHE_MEMORY_BYTES", use_cache_common_1.DEFAULT_MEMORY_BYTES));
61
60
  const pending = new use_cache_common_1.PendingSets();
62
61
  const debug = (0, debug_1.default)("cdk-nextjs:cache-handler:use-cache:remote");
63
- const s3Key = (cacheKey) => (0, aws_cache_store_1.useCacheS3Key)(buildId, (0, node_crypto_1.createHash)("sha256").update(cacheKey).digest("hex"));
62
+ const s3Key = (cacheKey) => (0, aws_cache_store_1.useCacheS3Key)(buildId, (0, cache_utils_1.sha256Hex)(cacheKey));
64
63
  async function readFromS3(cacheKey) {
65
64
  if (!bucket) {
66
65
  return undefined;
@@ -183,4 +182,4 @@ function createRemoteUseCacheHandler(options = {}) {
183
182
  };
184
183
  }
185
184
  exports.default = (0, use_cache_common_1.lazyHandler)(() => createRemoteUseCacheHandler());
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBaUdBLGtFQXlKQztBQTFQRDs7Ozs7Ozs7OztFQVVFO0FBQ0Ysc0RBQXNEO0FBQ3RELDZDQUF5QztBQUN6QyxrREFBOEM7QUFDOUMsa0RBQTZCO0FBSzdCLHVEQUsyQjtBQUMzQiwrQ0FBcUU7QUFDckUseURBYzRCO0FBcUI1QixTQUFTLGFBQWE7SUFDcEIsSUFBSSxJQUFBLCtCQUFZLEdBQUUsRUFBRSxDQUFDO1FBQ25CLHdFQUF3RTtRQUN4RSxpRUFBaUU7UUFDakUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFBLHVDQUFxQixHQUFFLENBQUM7SUFDdkQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQ1YsbUhBQW1ILENBQ3BILENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLElBQUksNkJBQVcsQ0FBQyxJQUFJLG9CQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCwwRUFBMEU7QUFDMUUsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFtQixFQUFFLEVBQVU7SUFDdkQsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMxRCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQVMsWUFBWSxDQUFDLE1BQW1CLEVBQUUsRUFBVTtJQUNuRCxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQiwyQkFBMkIsQ0FDekMsVUFBd0MsRUFBRTtJQUUxQyxNQUFNLE1BQU0sR0FDVixPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFBLHVDQUFxQixHQUFFLENBQUMsT0FBTyxDQUFDO0lBQ25FLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBQSxvQ0FBaUIsR0FBRSxDQUFDO0lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksMkJBQVEsQ0FDekIsSUFBQSxnQ0FBYSxFQUFDLG1DQUFtQyxFQUFFLHVDQUFvQixDQUFDLENBQ3pFLENBQUM7SUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLDhCQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFBLGVBQVEsRUFBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBRXBFLE1BQU0sS0FBSyxHQUFHLENBQUMsUUFBZ0IsRUFBRSxFQUFFLENBQ2pDLElBQUEsK0JBQWEsRUFBQyxPQUFPLEVBQUUsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU5RSxLQUFLLFVBQVUsVUFBVSxDQUN2QixRQUFnQjtRQUVoQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osS0FBSyxDQUFDLFdBQVcsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLElBQUEsNkJBQWUsRUFBQyxNQUFNLENBQW9CLENBQUM7WUFDMUQsSUFBSSxNQUFNLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixtRUFBbUU7Z0JBQ25FLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEdBQUcscUJBQXFCLENBQUMsQ0FBQztnQkFDcEUsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUNELE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ25CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO2dCQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7Z0JBQzdCLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ3BDLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQ1gsMkNBQTJDLEdBQUcsV0FBVyxFQUN6RCxLQUFLLENBQ04sQ0FBQztZQUNGLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxVQUFVLFNBQVMsQ0FBQyxRQUFnQixFQUFFLE1BQW1CO1FBQzVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFvQjtZQUNsQyxHQUFHLE1BQU07WUFDVCxHQUFHLEVBQUUsUUFBUTtZQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDakMsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBQSxpQ0FBbUIsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzNELEtBQUssQ0FBQyxVQUFVLFFBQVEsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZ0VBQWdFO1lBQ2hFLE9BQU8sQ0FBQyxLQUFLLENBQ1gsMkNBQTJDLEdBQUcsU0FBUyxFQUN2RCxLQUFLLENBQ04sQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBZ0I7WUFDeEIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUEsc0JBQUcsR0FBRSxDQUFDO1lBRWpCLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFFRCxzRUFBc0U7WUFDdEUscUVBQXFFO1lBQ3JFLHlFQUF5RTtZQUN6RSxpQkFBaUI7WUFDakIsSUFDRSxDQUFDLE1BQU07Z0JBQ1AsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLEVBQ3JELENBQUM7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFDLElBQUksTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQztvQkFDaEIsK0RBQStEO29CQUMvRCxxRUFBcUU7b0JBQ3JFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixLQUFLLENBQUMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxXQUFXLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxLQUFLLENBQUMsT0FBTyxRQUFRLEdBQUcsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLDBFQUEwRTtZQUMxRSxnRUFBZ0U7WUFDaEUsT0FBTyxJQUFBLCtCQUFZLEVBQUMsTUFBTSxFQUFFLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELEtBQUssQ0FBQyxHQUFHLENBQ1AsUUFBZ0IsRUFDaEIsWUFBaUM7WUFFakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxJQUFJLE1BQW1CLENBQUM7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxNQUFNLElBQUEsZ0NBQWEsRUFBQyxZQUFZLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixpRUFBaUU7Z0JBQ2pFLEtBQUssQ0FBQyxjQUFjLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksSUFBQSxpQ0FBYyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixzRUFBc0U7WUFDdEUsb0NBQW9DO1lBQ3BDLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxHQUFHLElBQUEsNkJBQVUsRUFBQyxJQUFJLENBQUM7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZSxJQUFBLDhCQUFXLEVBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgVGhlIGBjYWNoZUhhbmRsZXJzLnJlbW90ZWAgaGFuZGxlciwgZm9yIGAndXNlIGNhY2hlOiByZW1vdGUnYC5cbiAgU2VlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9jb25maWcvbmV4dC1jb25maWctanMvY2FjaGVIYW5kbGVyc1xuXG4gIEVudHJpZXMgYXJlIHN0b3JlZCBpbiB0aGUgY2FjaGUgYnVja2V0LCBzbyBldmVyeSBpbnN0YW5jZSByZWFkcyB3aGF0IGFueVxuICBpbnN0YW5jZSB3cm90ZSwgd2l0aCBhIGJvdW5kZWQgaW4tbWVtb3J5IHRpZXIgaW4gZnJvbnQuIFRhZ3MgZ28gdGhyb3VnaCB0aGVcbiAgcmV2YWxpZGF0aW9uIHRhYmxlJ3MgbWFya2VyIHJvd3MsIHNoYXJlZCB3aXRoIHBsYWluIGAndXNlIGNhY2hlJ2AgYW5kIHdpdGggdGhlXG4gIGluY3JlbWVudGFsIGNhY2hlLiBXaXRob3V0IHRoaXMsIE5leHQuanMgbWFwcyBgcmVtb3RlYCB0byBpdHMgaW4tbWVtb3J5XG4gIGRlZmF1bHQgaGFuZGxlciwgYW5kIGAndXNlIGNhY2hlOiByZW1vdGUnYCBpcyBubyBtb3JlIHNoYXJlZCB0aGFuXG4gIGAndXNlIGNhY2hlJ2AuXG4qL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCBnZXREZWJ1ZyBmcm9tIFwiZGVidWdcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVFbnRyeSxcbiAgQ2FjaGVIYW5kbGVyLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvY2FjaGUtaGFuZGxlcnMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIENhY2hlQnVja2V0LFxuICByZXNvbHZlQXdzQ2FjaGVDb25maWcsXG4gIFRyYWNrZWRUYWdNYXJrZXJzLFxuICB1c2VDYWNoZVMzS2V5LFxufSBmcm9tIFwiLi9hd3MtY2FjaGUtc3RvcmVcIjtcbmltcG9ydCB7IHBhcnNlQ2FjaGVWYWx1ZSwgc2VyaWFsaXplQ2FjaGVWYWx1ZSB9IGZyb20gXCIuL2NhY2hlLXV0aWxzXCI7XG5pbXBvcnQge1xuICBjYWNoZUVudHJ5T2YsXG4gIERFRkFVTFRfTUVNT1JZX0JZVEVTLFxuICBFbnRyeUxydSxcbiAgaXNCdWlsZFBoYXNlLFxuICBpc0R5bmFtaWNFbnRyeSxcbiAgbGF6eUhhbmRsZXIsXG4gIG5vdyxcbiAgbnVtYmVyRnJvbUVudixcbiAgUGVuZGluZ1NldHMsXG4gIHNoYXJlZFRhZ01hbmlmZXN0LFxuICBTdG9yZWRFbnRyeSxcbiAgc3RvcmVkRW50cnlPZixcbiAgdGFnTWV0aG9kcyxcbn0gZnJvbSBcIi4vdXNlLWNhY2hlLWNvbW1vblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVVzZUNhY2hlSGFuZGxlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4sIG9yIGBudWxsYCBmb3IgbWVtb3J5IG9ubHkuIEZyb21cbiAgICogYENES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUVgIGJ5IGRlZmF1bHQsIGFuZCBuZXZlciBhdCBidWlsZCB0aW1lLlxuICAgKi9cbiAgYnVja2V0PzogQ2FjaGVCdWNrZXQgfCBudWxsO1xuICAvKiogUHJlZml4ZXMgZXZlcnkgUzMga2V5OyBgQ0RLX05FWFRKU19CVUlMRF9JRGAgYnkgZGVmYXVsdC4gKi9cbiAgYnVpbGRJZD86IHN0cmluZztcbiAgLyoqIFRhZyBzdGF0ZTsgdGhlIHByb2Nlc3Mtd2lkZSBvbmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgYnkgZGVmYXVsdC4gKi9cbiAgdGFncz86IFRyYWNrZWRUYWdNYXJrZXJzO1xufVxuXG4vKiogV2hhdCBpcyB3cml0dGVuIHRvIFMzIGZvciBvbmUgZW50cnkuICovXG5pbnRlcmZhY2UgU2VyaWFsaXplZEVudHJ5IGV4dGVuZHMgT21pdDxTdG9yZWRFbnRyeSwgXCJ2YWx1ZVwiPiB7XG4gIC8qKiBUaGUgZnVsbCBjYWNoZSBrZXksIGNoZWNrZWQgb24gcmVhZDsgdGhlIG9iamVjdCBrZXkgaXMgb25seSBpdHMgaGFzaC4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIGJ1Y2tldEZyb21FbnYoKTogQ2FjaGVCdWNrZXQgfCBudWxsIHtcbiAgaWYgKGlzQnVpbGRQaGFzZSgpKSB7XG4gICAgLy8gTm8gY3JlZGVudGlhbHMsIGFuZCBub3RoaW5nIGEgYnVpbGQtdGltZSBlbnRyeSBjb3VsZCBiZSByZWFkIGJhY2sgYnk6XG4gICAgLy8gcHJlcmVuZGVycyBrZWVwIHdoYXQgdGhleSBuZWVkIGluIHRoZWlyIG93biByZXN1bWUgZGF0YSBjYWNoZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7IGJ1Y2tldE5hbWUsIHJlZ2lvbiB9ID0gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCk7XG4gIGlmICghYnVja2V0TmFtZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJpZXMgYXJlIGxvY2FsIHRvIGVhY2ggaW5zdGFuY2VcIixcbiAgICApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQ2FjaGVCdWNrZXQobmV3IFMzQ2xpZW50KHsgcmVnaW9uIH0pLCBidWNrZXROYW1lKTtcbn1cblxuLyoqIFdoZXRoZXIgYHN0b3JlZGAgaXMgcGFzdCBgcmV2YWxpZGF0ZWAsIHNvIGEgZnJlc2hlciBjb3B5IG1heSBleGlzdC4gKi9cbmZ1bmN0aW9uIGlzUGFzdFJldmFsaWRhdGUoc3RvcmVkOiBTdG9yZWRFbnRyeSwgYXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gYXQgPiBzdG9yZWQudGltZXN0YW1wICsgc3RvcmVkLnJldmFsaWRhdGUgKiAxMDAwO1xufVxuXG4vKiogV2hldGhlciBgc3RvcmVkYCBpcyBwYXN0IGBleHBpcmVgLCBhbmQgbWF5IG5vIGxvbmdlciBiZSBzZXJ2ZWQgYXQgYWxsLiAqL1xuZnVuY3Rpb24gaXNQYXN0RXhwaXJlKHN0b3JlZDogU3RvcmVkRW50cnksIGF0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuIGF0ID4gc3RvcmVkLnRpbWVzdGFtcCArIHN0b3JlZC5leHBpcmUgKiAxMDAwO1xufVxuXG4vKipcbiAqIEEgYCd1c2UgY2FjaGU6IHJlbW90ZSdgIGhhbmRsZXI6IFMzIGZvciBzdG9yYWdlLCBtZW1vcnkgaW4gZnJvbnQsIGFuZCB0aGVcbiAqIHJldmFsaWRhdGlvbiB0YWJsZSBmb3IgdGFncy5cbiAqXG4gKiBVbmxpa2UgdGhlIGRlZmF1bHQgaGFuZGxlciBhbiBlbnRyeSBpcyBzZXJ2ZWQgdW50aWwgYGV4cGlyZWAsIG5vdCBkcm9wcGVkIGF0XG4gKiBgcmV2YWxpZGF0ZWA6IGEgcmVtb3RlIHJlYWQgaXMgd29ydGggc2VydmluZyBzdGFsZSB3aGlsZSBOZXh0LmpzJ3Mgd3JhcHBlclxuICogcmVnZW5lcmF0ZXMgaXQgaW4gdGhlIGJhY2tncm91bmQsIHdoaWNoIGlzIHdoYXQgYHJldmFsaWRhdGVgIGlzIGZvci4gQSBtZW1vcnlcbiAqIGNvcHkgcGFzdCBgcmV2YWxpZGF0ZWAgaXMgY2hlY2tlZCBhZ2FpbnN0IFMzIGZpcnN0LCBzaW5jZSBhbm90aGVyIGluc3RhbmNlIG1heVxuICogYWxyZWFkeSBoYXZlIHdyaXR0ZW4gdGhlIHJlZ2VuZXJhdGVkIGVudHJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVtb3RlVXNlQ2FjaGVIYW5kbGVyKFxuICBvcHRpb25zOiBSZW1vdGVVc2VDYWNoZUhhbmRsZXJPcHRpb25zID0ge30sXG4pOiBDYWNoZUhhbmRsZXIge1xuICBjb25zdCBidWNrZXQgPVxuICAgIG9wdGlvbnMuYnVja2V0ID09PSB1bmRlZmluZWQgPyBidWNrZXRGcm9tRW52KCkgOiBvcHRpb25zLmJ1Y2tldDtcbiAgY29uc3QgYnVpbGRJZCA9IG9wdGlvbnMuYnVpbGRJZCA/PyByZXNvbHZlQXdzQ2FjaGVDb25maWcoKS5idWlsZElkO1xuICBjb25zdCB0YWdzID0gb3B0aW9ucy50YWdzID8/IHNoYXJlZFRhZ01hbmlmZXN0KCk7XG4gIGNvbnN0IG1lbW9yeSA9IG5ldyBFbnRyeUxydShcbiAgICBudW1iZXJGcm9tRW52KFwiQ0RLX05FWFRKU19VU0VfQ0FDSEVfTUVNT1JZX0JZVEVTXCIsIERFRkFVTFRfTUVNT1JZX0JZVEVTKSxcbiAgKTtcbiAgY29uc3QgcGVuZGluZyA9IG5ldyBQZW5kaW5nU2V0cygpO1xuICBjb25zdCBkZWJ1ZyA9IGdldERlYnVnKFwiY2RrLW5leHRqczpjYWNoZS1oYW5kbGVyOnVzZS1jYWNoZTpyZW1vdGVcIik7XG5cbiAgY29uc3QgczNLZXkgPSAoY2FjaGVLZXk6IHN0cmluZykgPT5cbiAgICB1c2VDYWNoZVMzS2V5KGJ1aWxkSWQsIGNyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKGNhY2hlS2V5KS5kaWdlc3QoXCJoZXhcIikpO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlYWRGcm9tUzMoXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxTdG9yZWRFbnRyeSB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghYnVja2V0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBzM0tleShjYWNoZUtleSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IGF3YWl0IGJ1Y2tldC5nZXQoa2V5KTtcbiAgICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIGRlYnVnKGBTMyBNSVNTICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUNhY2hlVmFsdWUob2JqZWN0KSBhcyBTZXJpYWxpemVkRW50cnk7XG4gICAgICBpZiAocGFyc2VkLmtleSAhPT0gY2FjaGVLZXkpIHtcbiAgICAgICAgLy8gQSBoYXNoIGNvbGxpc2lvbiwgb3IgYW4gb2JqZWN0IHRoYXQgaXMgbm90IG91cnM6IG5ldmVyIHNlcnZlIGl0LlxuICAgICAgICBjb25zb2xlLndhcm4oYCd1c2UgY2FjaGU6IHJlbW90ZScgZW50cnkgJHtrZXl9IGlzIGZvciBhbm90aGVyIGtleWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFnczogcGFyc2VkLnRhZ3MsXG4gICAgICAgIHN0YWxlOiBwYXJzZWQuc3RhbGUsXG4gICAgICAgIHRpbWVzdGFtcDogcGFyc2VkLnRpbWVzdGFtcCxcbiAgICAgICAgZXhwaXJlOiBwYXJzZWQuZXhwaXJlLFxuICAgICAgICByZXZhbGlkYXRlOiBwYXJzZWQucmV2YWxpZGF0ZSxcbiAgICAgICAgdmFsdWU6IG5ldyBVaW50OEFycmF5KHBhcnNlZC52YWx1ZSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3IgcmVhZGluZyAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSBmcm9tIFMzOmAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gd3JpdGVUb1MzKGNhY2hlS2V5OiBzdHJpbmcsIHN0b3JlZDogU3RvcmVkRW50cnkpIHtcbiAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBzM0tleShjYWNoZUtleSk7XG4gICAgY29uc3Qgc2VyaWFsaXplZDogU2VyaWFsaXplZEVudHJ5ID0ge1xuICAgICAgLi4uc3RvcmVkLFxuICAgICAga2V5OiBjYWNoZUtleSxcbiAgICAgIHZhbHVlOiBCdWZmZXIuZnJvbShzdG9yZWQudmFsdWUpLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGJ1Y2tldC5wdXRKc29uKGtleSwgc2VyaWFsaXplQ2FjaGVWYWx1ZShzZXJpYWxpemVkKSk7XG4gICAgICBkZWJ1ZyhgUzMgU0VUICR7Y2FjaGVLZXl9ICgke2tleX0pYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFRoZSBlbnRyeSBpcyBzdGlsbCBpbiBtZW1vcnkgaGVyZTsgb3RoZXIgaW5zdGFuY2VzIGp1c3QgbWlzcy5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFcnJvciB3cml0aW5nICd1c2UgY2FjaGU6IHJlbW90ZScgZW50cnkgJHtrZXl9IHRvIFMzOmAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzeW5jIGdldChjYWNoZUtleTogc3RyaW5nKTogUHJvbWlzZTxDYWNoZUVudHJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgICBhd2FpdCBwZW5kaW5nLndhaXQoY2FjaGVLZXkpO1xuICAgICAgY29uc3QgYXQgPSBub3coKTtcblxuICAgICAgbGV0IHN0b3JlZCA9IG1lbW9yeS5nZXQoY2FjaGVLZXkpO1xuICAgICAgaWYgKHN0b3JlZCkge1xuICAgICAgICBhd2FpdCB0YWdzLmVuc3VyZShzdG9yZWQudGFncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFBhc3QgYHJldmFsaWRhdGVgLCBvciBzdGFsZSBvciBleHBpcmVkIGJ5IHRhZzogYW5vdGhlciBpbnN0YW5jZSBtYXlcbiAgICAgIC8vIGFscmVhZHkgaGF2ZSB3cml0dGVuIHRoZSByZWdlbmVyYXRlZCBlbnRyeSwgYW5kIHNlcnZpbmcgdGhhdCBiZWF0c1xuICAgICAgLy8gcmVnZW5lcmF0aW5nIGl0IGhlcmUgdG9vLiBBbiBleHBpcmVkIGVudHJ5IFMzIGhhcyBub3RoaW5nIG5ld2VyIGZvciBpc1xuICAgICAgLy8gZHJvcHBlZCBiZWxvdy5cbiAgICAgIGlmIChcbiAgICAgICAgIXN0b3JlZCB8fFxuICAgICAgICBpc1Bhc3RSZXZhbGlkYXRlKHN0b3JlZCwgYXQpIHx8XG4gICAgICAgIHRhZ3Muc3RhdGUoc3RvcmVkLnRhZ3MsIHN0b3JlZC50aW1lc3RhbXApICE9PSBcImZyZXNoXCJcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmcm9tUzMgPSBhd2FpdCByZWFkRnJvbVMzKGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKGZyb21TMyAmJiAoIXN0b3JlZCB8fCBmcm9tUzMudGltZXN0YW1wID4gc3RvcmVkLnRpbWVzdGFtcCkpIHtcbiAgICAgICAgICBzdG9yZWQgPSBmcm9tUzM7XG4gICAgICAgICAgLy8gQW4gZW50cnkgd3JpdHRlbiBieSBhbm90aGVyIGluc3RhbmNlOiBpdHMgdGFncyBtYXkgaGF2ZSBiZWVuXG4gICAgICAgICAgLy8gcmV2YWxpZGF0ZWQgYXQgYW55IHRpbWUgc2luY2UsIHNvIHRoZXkgYXJlIHJlYWQgYmVmb3JlIGp1ZGdpbmcgaXQuXG4gICAgICAgICAgYXdhaXQgdGFncy5lbnN1cmUoc3RvcmVkLnRhZ3MpO1xuICAgICAgICAgIG1lbW9yeS5zZXQoY2FjaGVLZXksIHN0b3JlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFzdG9yZWQpIHtcbiAgICAgICAgZGVidWcoYE1JU1MgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChpc1Bhc3RFeHBpcmUoc3RvcmVkLCBhdCkpIHtcbiAgICAgICAgZGVidWcoYEVYUElSRUQgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgbWVtb3J5LmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZSA9IHRhZ3Muc3RhdGUoc3RvcmVkLnRhZ3MsIHN0b3JlZC50aW1lc3RhbXApO1xuICAgICAgaWYgKHN0YXRlID09PSBcImV4cGlyZWRcIikge1xuICAgICAgICBkZWJ1ZyhgRVhQSVJFRCBCWSBUQUcgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgbWVtb3J5LmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBkZWJ1ZyhgSElUICR7Y2FjaGVLZXl9JHtzdGF0ZSA9PT0gXCJzdGFsZVwiID8gXCIgKHN0YWxlIHRhZylcIiA6IFwiXCJ9YCk7XG4gICAgICAvLyBgcmV2YWxpZGF0ZTogLTFgIG1ha2VzIHRoZSB3cmFwcGVyIHNlcnZlIHRoZSBlbnRyeSBhbmQgcmVnZW5lcmF0ZSBpdCBpblxuICAgICAgLy8gdGhlIGJhY2tncm91bmQsIHRoZSBidWlsdC1pbiBoYW5kbGVyJ3MgYW5zd2VyIHRvIGEgc3RhbGUgdGFnLlxuICAgICAgcmV0dXJuIGNhY2hlRW50cnlPZihzdG9yZWQsIHN0YXRlID09PSBcInN0YWxlXCIgPyAtMSA6IHN0b3JlZC5yZXZhbGlkYXRlKTtcbiAgICB9LFxuXG4gICAgYXN5bmMgc2V0KFxuICAgICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICAgIHBlbmRpbmdFbnRyeTogUHJvbWlzZTxDYWNoZUVudHJ5PixcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IGRvbmUgPSBwZW5kaW5nLmJlZ2luKGNhY2hlS2V5KTtcbiAgICAgIGxldCBzdG9yZWQ6IFN0b3JlZEVudHJ5O1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RvcmVkID0gYXdhaXQgc3RvcmVkRW50cnlPZihwZW5kaW5nRW50cnkpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gVGhlIHN0cmVhbSBlcnJvcmVkOiBzdG9yZSBub3RoaW5nIHJhdGhlciB0aGFuIGEgcGFydGlhbCBlbnRyeS5cbiAgICAgICAgZGVidWcoYFNFVCBGQUlMRUQgJHtjYWNoZUtleX1gLCBlcnJvcik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRHluYW1pY0VudHJ5KHN0b3JlZCkpIHtcbiAgICAgICAgZGVidWcoYFNLSVAgZHluYW1pYyBlbnRyeSAke2NhY2hlS2V5fWApO1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG1lbW9yeS5zZXQoY2FjaGVLZXksIHN0b3JlZCk7XG4gICAgICB0YWdzLnRyYWNrKHN0b3JlZC50YWdzKTtcbiAgICAgIC8vIEEgYGdldGAgd2FpdGluZyBvbiB0aGlzIGBzZXRgIGNhbiBiZSBhbnN3ZXJlZCBmcm9tIG1lbW9yeSBub3c7IG9ubHlcbiAgICAgIC8vIG90aGVyIGluc3RhbmNlcyBuZWVkIHRoZSBTMyBjb3B5LlxuICAgICAgZG9uZSgpO1xuICAgICAgYXdhaXQgd3JpdGVUb1MzKGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgIH0sXG5cbiAgICAuLi50YWdNZXRob2RzKHRhZ3MpLFxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBsYXp5SGFuZGxlcigoKSA9PiBjcmVhdGVSZW1vdGVVc2VDYWNoZUhhbmRsZXIoKSk7XG4iXX0=
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0dBLGtFQXlKQztBQXpQRDs7Ozs7Ozs7OztFQVVFO0FBQ0Ysc0RBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxrREFBNkI7QUFLN0IsdURBSzJCO0FBQzNCLCtDQUFnRjtBQUNoRix5REFjNEI7QUFxQjVCLFNBQVMsYUFBYTtJQUNwQixJQUFJLElBQUEsK0JBQVksR0FBRSxFQUFFLENBQUM7UUFDbkIsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsdUNBQXFCLEdBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtSEFBbUgsQ0FDcEgsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sSUFBSSw2QkFBVyxDQUFDLElBQUksb0JBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDBFQUEwRTtBQUMxRSxTQUFTLGdCQUFnQixDQUFDLE1BQW1CLEVBQUUsRUFBVTtJQUN2RCxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFELENBQUM7QUFFRCw2RUFBNkU7QUFDN0UsU0FBUyxZQUFZLENBQUMsTUFBbUIsRUFBRSxFQUFVO0lBQ25ELE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEQsQ0FBQztB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QyxHQUFHLENBQ1AsUUFBZ0IsRUFDaEIsWUFBaUM7WUFFakMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxJQUFJLE1BQW1CLENBQUM7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sR0FBRyxNQUFNLElBQUEsZ0NBQWEsRUFBQyxZQUFZLENBQUMsQ0FBQztZQUM3QyxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixpRUFBaUU7Z0JBQ2pFLEtBQUssQ0FBQyxjQUFjLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksSUFBQSxpQ0FBYyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxzQkFBc0IsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxFQUFFLENBQUM7Z0JBQ1AsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QixzRUFBc0U7WUFDdEUsb0NBQW9DO1lBQ3BDLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxHQUFHLElBQUEsNkJBQVUsRUFBQyxJQUFJLENBQUM7S0FDcEIsQ0FBQztBQUNKLENBQUM7QUFFRCxrQkFBZSxJQUFBLDhCQUFXLEVBQUMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgVGhlIGBjYWNoZUhhbmRsZXJzLnJlbW90ZWAgaGFuZGxlciwgZm9yIGAndXNlIGNhY2hlOiByZW1vdGUnYC5cbiAgU2VlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9jb25maWcvbmV4dC1jb25maWctanMvY2FjaGVIYW5kbGVyc1xuXG4gIEVudHJpZXMgYXJlIHN0b3JlZCBpbiB0aGUgY2FjaGUgYnVja2V0LCBzbyBldmVyeSBpbnN0YW5jZSByZWFkcyB3aGF0IGFueVxuICBpbnN0YW5jZSB3cm90ZSwgd2l0aCBhIGJvdW5kZWQgaW4tbWVtb3J5IHRpZXIgaW4gZnJvbnQuIFRhZ3MgZ28gdGhyb3VnaCB0aGVcbiAgcmV2YWxpZGF0aW9uIHRhYmxlJ3MgbWFya2VyIHJvd3MsIHNoYXJlZCB3aXRoIHBsYWluIGAndXNlIGNhY2hlJ2AgYW5kIHdpdGggdGhlXG4gIGluY3JlbWVudGFsIGNhY2hlLiBXaXRob3V0IHRoaXMsIE5leHQuanMgbWFwcyBgcmVtb3RlYCB0byBpdHMgaW4tbWVtb3J5XG4gIGRlZmF1bHQgaGFuZGxlciwgYW5kIGAndXNlIGNhY2hlOiByZW1vdGUnYCBpcyBubyBtb3JlIHNoYXJlZCB0aGFuXG4gIGAndXNlIGNhY2hlJ2AuXG4qL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCBnZXREZWJ1ZyBmcm9tIFwiZGVidWdcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVFbnRyeSxcbiAgQ2FjaGVIYW5kbGVyLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvY2FjaGUtaGFuZGxlcnMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIENhY2hlQnVja2V0LFxuICByZXNvbHZlQXdzQ2FjaGVDb25maWcsXG4gIFRyYWNrZWRUYWdNYXJrZXJzLFxuICB1c2VDYWNoZVMzS2V5LFxufSBmcm9tIFwiLi9hd3MtY2FjaGUtc3RvcmVcIjtcbmltcG9ydCB7IHBhcnNlQ2FjaGVWYWx1ZSwgc2VyaWFsaXplQ2FjaGVWYWx1ZSwgc2hhMjU2SGV4IH0gZnJvbSBcIi4vY2FjaGUtdXRpbHNcIjtcbmltcG9ydCB7XG4gIGNhY2hlRW50cnlPZixcbiAgREVGQVVMVF9NRU1PUllfQllURVMsXG4gIEVudHJ5THJ1LFxuICBpc0J1aWxkUGhhc2UsXG4gIGlzRHluYW1pY0VudHJ5LFxuICBsYXp5SGFuZGxlcixcbiAgbm93LFxuICBudW1iZXJGcm9tRW52LFxuICBQZW5kaW5nU2V0cyxcbiAgc2hhcmVkVGFnTWFuaWZlc3QsXG4gIFN0b3JlZEVudHJ5LFxuICBzdG9yZWRFbnRyeU9mLFxuICB0YWdNZXRob2RzLFxufSBmcm9tIFwiLi91c2UtY2FjaGUtY29tbW9uXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3RlVXNlQ2FjaGVIYW5kbGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnVja2V0IGVudHJpZXMgYXJlIHN0b3JlZCBpbiwgb3IgYG51bGxgIGZvciBtZW1vcnkgb25seS4gRnJvbVxuICAgKiBgQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRWAgYnkgZGVmYXVsdCwgYW5kIG5ldmVyIGF0IGJ1aWxkIHRpbWUuXG4gICAqL1xuICBidWNrZXQ/OiBDYWNoZUJ1Y2tldCB8IG51bGw7XG4gIC8qKiBQcmVmaXhlcyBldmVyeSBTMyBrZXk7IGBDREtfTkVYVEpTX0JVSUxEX0lEYCBieSBkZWZhdWx0LiAqL1xuICBidWlsZElkPzogc3RyaW5nO1xuICAvKiogVGFnIHN0YXRlOyB0aGUgcHJvY2Vzcy13aWRlIG9uZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBieSBkZWZhdWx0LiAqL1xuICB0YWdzPzogVHJhY2tlZFRhZ01hcmtlcnM7XG59XG5cbi8qKiBXaGF0IGlzIHdyaXR0ZW4gdG8gUzMgZm9yIG9uZSBlbnRyeS4gKi9cbmludGVyZmFjZSBTZXJpYWxpemVkRW50cnkgZXh0ZW5kcyBPbWl0PFN0b3JlZEVudHJ5LCBcInZhbHVlXCI+IHtcbiAgLyoqIFRoZSBmdWxsIGNhY2hlIGtleSwgY2hlY2tlZCBvbiByZWFkOyB0aGUgb2JqZWN0IGtleSBpcyBvbmx5IGl0cyBoYXNoLiAqL1xuICBrZXk6IHN0cmluZztcbiAgdmFsdWU6IEJ1ZmZlcjtcbn1cblxuZnVuY3Rpb24gYnVja2V0RnJvbUVudigpOiBDYWNoZUJ1Y2tldCB8IG51bGwge1xuICBpZiAoaXNCdWlsZFBoYXNlKCkpIHtcbiAgICAvLyBObyBjcmVkZW50aWFscywgYW5kIG5vdGhpbmcgYSBidWlsZC10aW1lIGVudHJ5IGNvdWxkIGJlIHJlYWQgYmFjayBieTpcbiAgICAvLyBwcmVyZW5kZXJzIGtlZXAgd2hhdCB0aGV5IG5lZWQgaW4gdGhlaXIgb3duIHJlc3VtZSBkYXRhIGNhY2hlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHsgYnVja2V0TmFtZSwgcmVnaW9uIH0gPSByZXNvbHZlQXdzQ2FjaGVDb25maWcoKTtcbiAgaWYgKCFidWNrZXROYW1lKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJDREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXQsICd1c2UgY2FjaGU6IHJlbW90ZScgZW50cmllcyBhcmUgbG9jYWwgdG8gZWFjaCBpbnN0YW5jZVwiLFxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBDYWNoZUJ1Y2tldChuZXcgUzNDbGllbnQoeyByZWdpb24gfSksIGJ1Y2tldE5hbWUpO1xufVxuXG4vKiogV2hldGhlciBgc3RvcmVkYCBpcyBwYXN0IGByZXZhbGlkYXRlYCwgc28gYSBmcmVzaGVyIGNvcHkgbWF5IGV4aXN0LiAqL1xuZnVuY3Rpb24gaXNQYXN0UmV2YWxpZGF0ZShzdG9yZWQ6IFN0b3JlZEVudHJ5LCBhdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdCA+IHN0b3JlZC50aW1lc3RhbXAgKyBzdG9yZWQucmV2YWxpZGF0ZSAqIDEwMDA7XG59XG5cbi8qKiBXaGV0aGVyIGBzdG9yZWRgIGlzIHBhc3QgYGV4cGlyZWAsIGFuZCBtYXkgbm8gbG9uZ2VyIGJlIHNlcnZlZCBhdCBhbGwuICovXG5mdW5jdGlvbiBpc1Bhc3RFeHBpcmUoc3RvcmVkOiBTdG9yZWRFbnRyeSwgYXQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gYXQgPiBzdG9yZWQudGltZXN0YW1wICsgc3RvcmVkLmV4cGlyZSAqIDEwMDA7XG59XG5cbi8qKlxuICogQSBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AgaGFuZGxlcjogUzMgZm9yIHN0b3JhZ2UsIG1lbW9yeSBpbiBmcm9udCwgYW5kIHRoZVxuICogcmV2YWxpZGF0aW9uIHRhYmxlIGZvciB0YWdzLlxuICpcbiAqIFVubGlrZSB0aGUgZGVmYXVsdCBoYW5kbGVyIGFuIGVudHJ5IGlzIHNlcnZlZCB1bnRpbCBgZXhwaXJlYCwgbm90IGRyb3BwZWQgYXRcbiAqIGByZXZhbGlkYXRlYDogYSByZW1vdGUgcmVhZCBpcyB3b3J0aCBzZXJ2aW5nIHN0YWxlIHdoaWxlIE5leHQuanMncyB3cmFwcGVyXG4gKiByZWdlbmVyYXRlcyBpdCBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggaXMgd2hhdCBgcmV2YWxpZGF0ZWAgaXMgZm9yLiBBIG1lbW9yeVxuICogY29weSBwYXN0IGByZXZhbGlkYXRlYCBpcyBjaGVja2VkIGFnYWluc3QgUzMgZmlyc3QsIHNpbmNlIGFub3RoZXIgaW5zdGFuY2UgbWF5XG4gKiBhbHJlYWR5IGhhdmUgd3JpdHRlbiB0aGUgcmVnZW5lcmF0ZWQgZW50cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW1vdGVVc2VDYWNoZUhhbmRsZXIoXG4gIG9wdGlvbnM6IFJlbW90ZVVzZUNhY2hlSGFuZGxlck9wdGlvbnMgPSB7fSxcbik6IENhY2hlSGFuZGxlciB7XG4gIGNvbnN0IGJ1Y2tldCA9XG4gICAgb3B0aW9ucy5idWNrZXQgPT09IHVuZGVmaW5lZCA/IGJ1Y2tldEZyb21FbnYoKSA6IG9wdGlvbnMuYnVja2V0O1xuICBjb25zdCBidWlsZElkID0gb3B0aW9ucy5idWlsZElkID8/IHJlc29sdmVBd3NDYWNoZUNvbmZpZygpLmJ1aWxkSWQ7XG4gIGNvbnN0IHRhZ3MgPSBvcHRpb25zLnRhZ3MgPz8gc2hhcmVkVGFnTWFuaWZlc3QoKTtcbiAgY29uc3QgbWVtb3J5ID0gbmV3IEVudHJ5THJ1KFxuICAgIG51bWJlckZyb21FbnYoXCJDREtfTkVYVEpTX1VTRV9DQUNIRV9NRU1PUllfQllURVNcIiwgREVGQVVMVF9NRU1PUllfQllURVMpLFxuICApO1xuICBjb25zdCBwZW5kaW5nID0gbmV3IFBlbmRpbmdTZXRzKCk7XG4gIGNvbnN0IGRlYnVnID0gZ2V0RGVidWcoXCJjZGstbmV4dGpzOmNhY2hlLWhhbmRsZXI6dXNlLWNhY2hlOnJlbW90ZVwiKTtcblxuICBjb25zdCBzM0tleSA9IChjYWNoZUtleTogc3RyaW5nKSA9PlxuICAgIHVzZUNhY2hlUzNLZXkoYnVpbGRJZCwgc2hhMjU2SGV4KGNhY2hlS2V5KSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcmVhZEZyb21TMyhcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICApOiBQcm9taXNlPFN0b3JlZEVudHJ5IHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHMzS2V5KGNhY2hlS2V5KTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gYXdhaXQgYnVja2V0LmdldChrZXkpO1xuICAgICAgaWYgKCFvYmplY3QpIHtcbiAgICAgICAgZGVidWcoYFMzIE1JU1MgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlQ2FjaGVWYWx1ZShvYmplY3QpIGFzIFNlcmlhbGl6ZWRFbnRyeTtcbiAgICAgIGlmIChwYXJzZWQua2V5ICE9PSBjYWNoZUtleSkge1xuICAgICAgICAvLyBBIGhhc2ggY29sbGlzaW9uLCBvciBhbiBvYmplY3QgdGhhdCBpcyBub3Qgb3VyczogbmV2ZXIgc2VydmUgaXQuXG4gICAgICAgIGNvbnNvbGUud2FybihgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gaXMgZm9yIGFub3RoZXIga2V5YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YWdzOiBwYXJzZWQudGFncyxcbiAgICAgICAgc3RhbGU6IHBhcnNlZC5zdGFsZSxcbiAgICAgICAgdGltZXN0YW1wOiBwYXJzZWQudGltZXN0YW1wLFxuICAgICAgICBleHBpcmU6IHBhcnNlZC5leHBpcmUsXG4gICAgICAgIHJldmFsaWRhdGU6IHBhcnNlZC5yZXZhbGlkYXRlLFxuICAgICAgICB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkocGFyc2VkLnZhbHVlKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBFcnJvciByZWFkaW5nICd1c2UgY2FjaGU6IHJlbW90ZScgZW50cnkgJHtrZXl9IGZyb20gUzM6YCxcbiAgICAgICAgZXJyb3IsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB3cml0ZVRvUzMoY2FjaGVLZXk6IHN0cmluZywgc3RvcmVkOiBTdG9yZWRFbnRyeSkge1xuICAgIGlmICghYnVja2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHMzS2V5KGNhY2hlS2V5KTtcbiAgICBjb25zdCBzZXJpYWxpemVkOiBTZXJpYWxpemVkRW50cnkgPSB7XG4gICAgICAuLi5zdG9yZWQsXG4gICAgICBrZXk6IGNhY2hlS2V5LFxuICAgICAgdmFsdWU6IEJ1ZmZlci5mcm9tKHN0b3JlZC52YWx1ZSksXG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYnVja2V0LnB1dEpzb24oa2V5LCBzZXJpYWxpemVDYWNoZVZhbHVlKHNlcmlhbGl6ZWQpKTtcbiAgICAgIGRlYnVnKGBTMyBTRVQgJHtjYWNoZUtleX0gKCR7a2V5fSlgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGVudHJ5IGlzIHN0aWxsIGluIG1lbW9yeSBoZXJlOyBvdGhlciBpbnN0YW5jZXMganVzdCBtaXNzLlxuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEVycm9yIHdyaXRpbmcgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gdG8gUzM6YCxcbiAgICAgICAgZXJyb3IsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGNhY2hlS2V5OiBzdHJpbmcpOiBQcm9taXNlPENhY2hlRW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICAgIGF3YWl0IHBlbmRpbmcud2FpdChjYWNoZUtleSk7XG4gICAgICBjb25zdCBhdCA9IG5vdygpO1xuXG4gICAgICBsZXQgc3RvcmVkID0gbWVtb3J5LmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoc3RvcmVkKSB7XG4gICAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKHN0b3JlZC50YWdzKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFzdCBgcmV2YWxpZGF0ZWAsIG9yIHN0YWxlIG9yIGV4cGlyZWQgYnkgdGFnOiBhbm90aGVyIGluc3RhbmNlIG1heVxuICAgICAgLy8gYWxyZWFkeSBoYXZlIHdyaXR0ZW4gdGhlIHJlZ2VuZXJhdGVkIGVudHJ5LCBhbmQgc2VydmluZyB0aGF0IGJlYXRzXG4gICAgICAvLyByZWdlbmVyYXRpbmcgaXQgaGVyZSB0b28uIEFuIGV4cGlyZWQgZW50cnkgUzMgaGFzIG5vdGhpbmcgbmV3ZXIgZm9yIGlzXG4gICAgICAvLyBkcm9wcGVkIGJlbG93LlxuICAgICAgaWYgKFxuICAgICAgICAhc3RvcmVkIHx8XG4gICAgICAgIGlzUGFzdFJldmFsaWRhdGUoc3RvcmVkLCBhdCkgfHxcbiAgICAgICAgdGFncy5zdGF0ZShzdG9yZWQudGFncywgc3RvcmVkLnRpbWVzdGFtcCkgIT09IFwiZnJlc2hcIlxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZyb21TMyA9IGF3YWl0IHJlYWRGcm9tUzMoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoZnJvbVMzICYmICghc3RvcmVkIHx8IGZyb21TMy50aW1lc3RhbXAgPiBzdG9yZWQudGltZXN0YW1wKSkge1xuICAgICAgICAgIHN0b3JlZCA9IGZyb21TMztcbiAgICAgICAgICAvLyBBbiBlbnRyeSB3cml0dGVuIGJ5IGFub3RoZXIgaW5zdGFuY2U6IGl0cyB0YWdzIG1heSBoYXZlIGJlZW5cbiAgICAgICAgICAvLyByZXZhbGlkYXRlZCBhdCBhbnkgdGltZSBzaW5jZSwgc28gdGhleSBhcmUgcmVhZCBiZWZvcmUganVkZ2luZyBpdC5cbiAgICAgICAgICBhd2FpdCB0YWdzLmVuc3VyZShzdG9yZWQudGFncyk7XG4gICAgICAgICAgbWVtb3J5LnNldChjYWNoZUtleSwgc3RvcmVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXN0b3JlZCkge1xuICAgICAgICBkZWJ1ZyhgTUlTUyAke2NhY2hlS2V5fWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKGlzUGFzdEV4cGlyZShzdG9yZWQsIGF0KSkge1xuICAgICAgICBkZWJ1ZyhgRVhQSVJFRCAke2NhY2hlS2V5fWApO1xuICAgICAgICBtZW1vcnkuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXRlID0gdGFncy5zdGF0ZShzdG9yZWQudGFncywgc3RvcmVkLnRpbWVzdGFtcCk7XG4gICAgICBpZiAoc3RhdGUgPT09IFwiZXhwaXJlZFwiKSB7XG4gICAgICAgIGRlYnVnKGBFWFBJUkVEIEJZIFRBRyAke2NhY2hlS2V5fWApO1xuICAgICAgICBtZW1vcnkuZGVsZXRlKGNhY2hlS2V5KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGRlYnVnKGBISVQgJHtjYWNoZUtleX0ke3N0YXRlID09PSBcInN0YWxlXCIgPyBcIiAoc3RhbGUgdGFnKVwiIDogXCJcIn1gKTtcbiAgICAgIC8vIGByZXZhbGlkYXRlOiAtMWAgbWFrZXMgdGhlIHdyYXBwZXIgc2VydmUgdGhlIGVudHJ5IGFuZCByZWdlbmVyYXRlIGl0IGluXG4gICAgICAvLyB0aGUgYmFja2dyb3VuZCwgdGhlIGJ1aWx0LWluIGhhbmRsZXIncyBhbnN3ZXIgdG8gYSBzdGFsZSB0YWcuXG4gICAgICByZXR1cm4gY2FjaGVFbnRyeU9mKHN0b3JlZCwgc3RhdGUgPT09IFwic3RhbGVcIiA/IC0xIDogc3RvcmVkLnJldmFsaWRhdGUpO1xuICAgIH0sXG5cbiAgICBhc3luYyBzZXQoXG4gICAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgICAgcGVuZGluZ0VudHJ5OiBQcm9taXNlPENhY2hlRW50cnk+LFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgZG9uZSA9IHBlbmRpbmcuYmVnaW4oY2FjaGVLZXkpO1xuICAgICAgbGV0IHN0b3JlZDogU3RvcmVkRW50cnk7XG4gICAgICB0cnkge1xuICAgICAgICBzdG9yZWQgPSBhd2FpdCBzdG9yZWRFbnRyeU9mKHBlbmRpbmdFbnRyeSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBUaGUgc3RyZWFtIGVycm9yZWQ6IHN0b3JlIG5vdGhpbmcgcmF0aGVyIHRoYW4gYSBwYXJ0aWFsIGVudHJ5LlxuICAgICAgICBkZWJ1ZyhgU0VUIEZBSUxFRCAke2NhY2hlS2V5fWAsIGVycm9yKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNEeW5hbWljRW50cnkoc3RvcmVkKSkge1xuICAgICAgICBkZWJ1ZyhgU0tJUCBkeW5hbWljIGVudHJ5ICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbWVtb3J5LnNldChjYWNoZUtleSwgc3RvcmVkKTtcbiAgICAgIHRhZ3MudHJhY2soc3RvcmVkLnRhZ3MpO1xuICAgICAgLy8gQSBgZ2V0YCB3YWl0aW5nIG9uIHRoaXMgYHNldGAgY2FuIGJlIGFuc3dlcmVkIGZyb20gbWVtb3J5IG5vdzsgb25seVxuICAgICAgLy8gb3RoZXIgaW5zdGFuY2VzIG5lZWQgdGhlIFMzIGNvcHkuXG4gICAgICBkb25lKCk7XG4gICAgICBhd2FpdCB3cml0ZVRvUzMoY2FjaGVLZXksIHN0b3JlZCk7XG4gICAgfSxcblxuICAgIC4uLnRhZ01ldGhvZHModGFncyksXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGxhenlIYW5kbGVyKCgpID0+IGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcigpKTtcbiJdfQ==
@@ -46261,12 +46261,69 @@ var require_dist_cjs20 = __commonJS({
46261
46261
  // src/adapter/use-cache-remote-handler.ts
46262
46262
  var import_client_s32 = __toESM(require_dist_cjs16());
46263
46263
  var import_debug6 = __toESM(require_src());
46264
- import { createHash as createHash6 } from "node:crypto";
46265
46264
 
46266
46265
  // src/adapter/aws-cache-store.ts
46267
46266
  var import_client_dynamodb = __toESM(require_dist_cjs20());
46268
46267
  var import_client_s3 = __toESM(require_dist_cjs16());
46269
46268
  import { join as join5 } from "node:path";
46269
+
46270
+ // src/adapter/cache-utils.ts
46271
+ import { createHash as createHash6 } from "node:crypto";
46272
+ function preprocessValue(value) {
46273
+ if (value == null) {
46274
+ return value;
46275
+ }
46276
+ if (Buffer.isBuffer(value)) {
46277
+ return {
46278
+ __type: "Buffer",
46279
+ base64: value.toString("base64")
46280
+ };
46281
+ }
46282
+ if (value instanceof Map) {
46283
+ const entries = {};
46284
+ for (const [key, val] of value.entries()) {
46285
+ entries[key] = preprocessValue(val);
46286
+ }
46287
+ return {
46288
+ __type: "Map",
46289
+ data: entries
46290
+ };
46291
+ }
46292
+ if (Array.isArray(value)) {
46293
+ return value.map((item) => preprocessValue(item));
46294
+ }
46295
+ if (typeof value === "object") {
46296
+ const processed = {};
46297
+ for (const [key, val] of Object.entries(value)) {
46298
+ processed[key] = preprocessValue(val);
46299
+ }
46300
+ return processed;
46301
+ }
46302
+ return value;
46303
+ }
46304
+ function serializeCacheValue(value) {
46305
+ const processed = preprocessValue(value);
46306
+ return JSON.stringify(processed);
46307
+ }
46308
+ function parseCacheValue(jsonString) {
46309
+ return JSON.parse(jsonString, (_key, val) => {
46310
+ if (val && typeof val === "object" && val.__type === "Map") {
46311
+ return new Map(Object.entries(val.data));
46312
+ }
46313
+ if (val && typeof val === "object" && val.__type === "Buffer") {
46314
+ return typeof val.base64 === "string" ? Buffer.from(val.base64, "base64") : Buffer.from(val.data);
46315
+ }
46316
+ if (val && typeof val === "object" && val.type === "Buffer" && Array.isArray(val.data)) {
46317
+ return Buffer.from(val.data);
46318
+ }
46319
+ return val;
46320
+ });
46321
+ }
46322
+ function sha256Hex(value) {
46323
+ return createHash6("sha256").update(value).digest("hex");
46324
+ }
46325
+
46326
+ // src/adapter/aws-cache-store.ts
46270
46327
  function resolveAwsCacheConfig() {
46271
46328
  return {
46272
46329
  bucketName: process.env.CDK_NEXTJS_CACHE_BUCKET_NAME || "",
@@ -46333,6 +46390,13 @@ function markerOf(item) {
46333
46390
  }
46334
46391
  var BATCH_GET_MAX_KEYS = 100;
46335
46392
  var DEFAULT_TAG_REFRESH_MS = 1e3;
46393
+ function hashedTag(tag) {
46394
+ return `#${sha256Hex(tag)}`;
46395
+ }
46396
+ var MAX_TAG_BYTES = 768;
46397
+ function sortKeyTag(tag) {
46398
+ return Buffer.byteLength(tag) <= MAX_TAG_BYTES ? tag : hashedTag(tag);
46399
+ }
46336
46400
  var TagMarkerTable = class {
46337
46401
  constructor(client, tableName, buildId) {
46338
46402
  this.client = client;
@@ -46355,7 +46419,7 @@ var TagMarkerTable = class {
46355
46419
  TableName: this.tableName,
46356
46420
  Key: {
46357
46421
  pk: { S: this.buildId },
46358
- sk: { S: tag }
46422
+ sk: { S: sortKeyTag(tag) }
46359
46423
  },
46360
46424
  ...markerUpdate(now, durations),
46361
46425
  ReturnValues: "ALL_NEW"
@@ -46375,7 +46439,13 @@ var TagMarkerTable = class {
46375
46439
  const unique = Array.from(new Set(tags));
46376
46440
  const markers = /* @__PURE__ */ new Map();
46377
46441
  for (let i5 = 0; i5 < unique.length; i5 += BATCH_GET_MAX_KEYS) {
46378
- let keys = unique.slice(i5, i5 + BATCH_GET_MAX_KEYS).map((tag) => ({ pk: { S: buildId }, sk: { S: tag } }));
46442
+ const tagBySk = new Map(
46443
+ unique.slice(i5, i5 + BATCH_GET_MAX_KEYS).map((tag) => [sortKeyTag(tag), tag])
46444
+ );
46445
+ let keys = Array.from(
46446
+ tagBySk.keys(),
46447
+ (sk) => ({ pk: { S: buildId }, sk: { S: sk } })
46448
+ );
46379
46449
  for (let attempt = 0; keys?.length && attempt < 3; attempt++) {
46380
46450
  const response = await this.client.send(
46381
46451
  new import_client_dynamodb.BatchGetItemCommand({
@@ -46388,7 +46458,7 @@ var TagMarkerTable = class {
46388
46458
  })
46389
46459
  );
46390
46460
  for (const item of response.Responses?.[tableName] ?? []) {
46391
- const tag = item.sk?.S;
46461
+ const tag = tagBySk.get(item.sk?.S ?? "");
46392
46462
  if (tag !== void 0) {
46393
46463
  markers.set(tag, markerOf(item));
46394
46464
  }
@@ -46426,11 +46496,13 @@ var RevalidationLog = class {
46426
46496
  * to {@link LOG_PUT_ATTEMPTS} times.
46427
46497
  */
46428
46498
  async put(tag, at, marker) {
46499
+ const skTag = sortKeyTag(tag);
46429
46500
  for (let attempt = 1; ; attempt++) {
46430
46501
  const item = {
46431
46502
  pk: { S: this.pk },
46432
- sk: { S: `${logSkPrefix(at)}#${tag}` },
46433
- ttl: { N: String(Math.ceil((at + REVALIDATION_LOG_TTL_MS) / 1e3)) }
46503
+ sk: { S: `${logSkPrefix(at)}#${skTag}` },
46504
+ ttl: { N: String(Math.ceil((at + REVALIDATION_LOG_TTL_MS) / 1e3)) },
46505
+ ...skTag !== tag && { longTag: { S: tag } }
46434
46506
  };
46435
46507
  for (const field of MARKER_FIELDS) {
46436
46508
  const value = marker[field];
@@ -46475,7 +46547,7 @@ var RevalidationLog = class {
46475
46547
  ":pk": { S: this.pk },
46476
46548
  ":since": { S: logSkPrefix(Math.max(0, since)) }
46477
46549
  },
46478
- ProjectionExpression: "sk, revalidatedAt, staleAt, expiredAt",
46550
+ ProjectionExpression: "sk, longTag, revalidatedAt, staleAt, expiredAt",
46479
46551
  ExclusiveStartKey: startKey
46480
46552
  })
46481
46553
  );
@@ -46487,7 +46559,7 @@ var RevalidationLog = class {
46487
46559
  rows.push({
46488
46560
  sk,
46489
46561
  at: Number(sk.slice(0, LOG_SK_DIGITS)),
46490
- tag: sk.slice(LOG_SK_DIGITS + 1),
46562
+ tag: item.longTag?.S ?? sk.slice(LOG_SK_DIGITS + 1),
46491
46563
  marker: markerOf(item)
46492
46564
  });
46493
46565
  }
@@ -47036,58 +47108,6 @@ var CacheBucket = class {
47036
47108
  }
47037
47109
  };
47038
47110
 
47039
- // src/adapter/cache-utils.ts
47040
- function preprocessValue(value) {
47041
- if (value == null) {
47042
- return value;
47043
- }
47044
- if (Buffer.isBuffer(value)) {
47045
- return {
47046
- __type: "Buffer",
47047
- base64: value.toString("base64")
47048
- };
47049
- }
47050
- if (value instanceof Map) {
47051
- const entries = {};
47052
- for (const [key, val] of value.entries()) {
47053
- entries[key] = preprocessValue(val);
47054
- }
47055
- return {
47056
- __type: "Map",
47057
- data: entries
47058
- };
47059
- }
47060
- if (Array.isArray(value)) {
47061
- return value.map((item) => preprocessValue(item));
47062
- }
47063
- if (typeof value === "object") {
47064
- const processed = {};
47065
- for (const [key, val] of Object.entries(value)) {
47066
- processed[key] = preprocessValue(val);
47067
- }
47068
- return processed;
47069
- }
47070
- return value;
47071
- }
47072
- function serializeCacheValue(value) {
47073
- const processed = preprocessValue(value);
47074
- return JSON.stringify(processed);
47075
- }
47076
- function parseCacheValue(jsonString) {
47077
- return JSON.parse(jsonString, (_key, val) => {
47078
- if (val && typeof val === "object" && val.__type === "Map") {
47079
- return new Map(Object.entries(val.data));
47080
- }
47081
- if (val && typeof val === "object" && val.__type === "Buffer") {
47082
- return typeof val.base64 === "string" ? Buffer.from(val.base64, "base64") : Buffer.from(val.data);
47083
- }
47084
- if (val && typeof val === "object" && val.type === "Buffer" && Array.isArray(val.data)) {
47085
- return Buffer.from(val.data);
47086
- }
47087
- return val;
47088
- });
47089
- }
47090
-
47091
47111
  // src/adapter/use-cache-common.ts
47092
47112
  var import_client_dynamodb2 = __toESM(require_dist_cjs20());
47093
47113
  var import_debug5 = __toESM(require_src());
@@ -47293,7 +47313,7 @@ function createRemoteUseCacheHandler(options = {}) {
47293
47313
  );
47294
47314
  const pending = new PendingSets();
47295
47315
  const debug = (0, import_debug6.default)("cdk-nextjs:cache-handler:use-cache:remote");
47296
- const s3Key = (cacheKey) => useCacheS3Key(buildId, createHash6("sha256").update(cacheKey).digest("hex"));
47316
+ const s3Key = (cacheKey) => useCacheS3Key(buildId, sha256Hex(cacheKey));
47297
47317
  async function readFromS3(cacheKey) {
47298
47318
  if (!bucket) {
47299
47319
  return void 0;
package/lib/nextjs-api.js CHANGED
@@ -22,7 +22,7 @@ const API_PATH_PART = /^[a-zA-Z0-9:._\-$]+$/;
22
22
  * Creates an API Gateway REST API for Next.js applications
23
23
  */
24
24
  class NextjsApi extends constructs_1.Construct {
25
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.7.4" };
25
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.7.6" };
26
26
  /**
27
27
  * The API Gateway REST API
28
28
  */
@@ -81,13 +81,6 @@ export interface NextjsFunctionGroupBehavior {
81
81
  * natively, so it can only match the synth machine.
82
82
  */
83
83
  export declare function deploymentArchitecture(props: NextjsBuildProps): Architecture;
84
- /** {@link NextjsBuild.buildId}: Next.js's build ID, suffixed with the app's `deploymentId`. */
85
- export declare function deploymentBuildId(manifest: {
86
- readonly buildId: string;
87
- readonly config: {
88
- readonly deploymentId: string;
89
- };
90
- }): string;
91
84
  export interface PublicDirEntry {
92
85
  readonly name: string;
93
86
  readonly isDirectory: boolean;