cdk-nextjs 0.7.9 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/.jsii +3 -3
  2. package/README.md +1 -1
  3. package/docs/harness-coverage.md +1 -1
  4. package/docs/nextjs-private-apis.md +128 -0
  5. package/lib/adapter/adapter.mjs +276 -24
  6. package/lib/adapter/build-outputs.d.ts +1 -1
  7. package/lib/adapter/build-outputs.js +29 -13
  8. package/lib/adapter/build-outputs.test.js +35 -7
  9. package/lib/adapter/cache-handler.d.ts +1 -1
  10. package/lib/adapter/cache-handler.js +1 -1
  11. package/lib/adapter/cache-kinds.d.ts +12 -1
  12. package/lib/adapter/cache-kinds.js +16 -4
  13. package/lib/adapter/init-cache.js +7 -7
  14. package/lib/adapter/local-file-cache-handler.d.ts +1 -1
  15. package/lib/adapter/local-file-cache-handler.js +1 -1
  16. package/lib/adapter/memory-cache-handler.d.ts +2 -2
  17. package/lib/adapter/memory-cache-handler.js +1 -1
  18. package/lib/adapter/s3-cache-handler.d.ts +2 -2
  19. package/lib/adapter/s3-cache-handler.js +1 -1
  20. package/lib/adapter/use-cache-common.d.ts +1 -1
  21. package/lib/adapter/use-cache-common.js +1 -1
  22. package/lib/adapter/use-cache-common.test.js +1 -1
  23. package/lib/adapter/use-cache-default-handler.d.ts +1 -1
  24. package/lib/adapter/use-cache-default-handler.js +1 -1
  25. package/lib/adapter/use-cache-handlers.test.js +1 -1
  26. package/lib/adapter/use-cache-remote-handler.d.ts +1 -1
  27. package/lib/adapter/use-cache-remote-handler.js +1 -1
  28. package/lib/cdk-nextjs-version.d.ts +10 -0
  29. package/lib/cdk-nextjs-version.js +15 -0
  30. package/lib/nextjs-api.js +1 -1
  31. package/lib/nextjs-build/nextjs-build.js +7 -6
  32. package/lib/nextjs-build/nextjs-build.test.js +16 -3
  33. package/lib/nextjs-cache.js +1 -1
  34. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  35. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  36. package/lib/nextjs-distribution.js +5 -5
  37. package/lib/nextjs-post-deploy.js +1 -1
  38. package/lib/nextjs-static-assets.js +1 -1
  39. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  40. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  41. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  42. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  43. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  44. package/lib/runtime/core.test.js +17 -8
  45. package/lib/runtime/dispatch.js +4 -5
  46. package/lib/runtime/image.js +43 -32
  47. package/lib/runtime/image.test.js +27 -26
  48. package/lib/runtime/lambda.mjs +276 -36
  49. package/lib/runtime/manifest.d.ts +34 -8
  50. package/lib/runtime/manifest.js +7 -5
  51. package/lib/runtime/server.mjs +276 -36
  52. package/package.json +1 -1
  53. package/scripts/capture-adapter-fixture.mjs +13 -1
  54. package/scripts/zero-config-build.mjs +5 -1
@@ -586,4 +586,4 @@ describe("cacheHandlers.default", () => {
586
586
  expect(await read(a, "k")).toBeUndefined();
587
587
  });
588
588
  });
589
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLWhhbmRsZXJzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci91c2UtY2FjaGUtaGFuZGxlcnMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXRDLDhEQU9rQztBQUNsQyxrREFLNEI7QUFLNUIsdURBTTJCO0FBQzNCLHlEQUFnRDtBQUNoRCwyRUFBMkU7QUFDM0UseUVBQXlFO0FBRXpFLGdFQUFnRTtBQUNoRSxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWdCLEVBQUUsSUFBYSxFQUFFLEVBQUU7SUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBaUIsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUNoRCxJQUFJLE9BQU8sWUFBWSw0QkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSw0QkFBZ0IsQ0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELElBQUksT0FBTyxZQUFZLDRCQUFnQixF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QyxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0VBQXdFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEYsTUFBTSxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQWE7WUFDN0MsS0FBSyxDQUFDLFVBQVU7Z0JBQ2QsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtczNcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7XG5cbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVZhbHVlLFxuICBCYXRjaEdldEl0ZW1Db21tYW5kLFxuICBEeW5hbW9EQkNsaWVudCxcbiAgUHV0SXRlbUNvbW1hbmQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIEdldE9iamVjdENvbW1hbmQsXG4gIE5vU3VjaEtleSxcbiAgUHV0T2JqZWN0Q29tbWFuZCxcbiAgUzNDbGllbnQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQ2FjaGVFbnRyeSxcbiAgQ2FjaGVIYW5kbGVyLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9saWIvY2FjaGUtaGFuZGxlcnMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIENhY2hlQnVja2V0LFxuICBSZXZhbGlkYXRpb25Mb2csXG4gIFRBR19SRUZSRVNIX0dSQUNFX01TLFxuICBUYWdNYXJrZXJUYWJsZSxcbiAgVHJhY2tlZFRhZ01hcmtlcnMsXG59IGZyb20gXCIuL2F3cy1jYWNoZS1zdG9yZVwiO1xuaW1wb3J0IHsgcmVhZFN0cmVhbSB9IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcbmltcG9ydCB7IGNyZWF0ZURlZmF1bHRVc2VDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi91c2UtY2FjaGUtZGVmYXVsdC1oYW5kbGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVSZW1vdGVVc2VDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi91c2UtY2FjaGUtcmVtb3RlLWhhbmRsZXJcIjtcblxuLyoqIFRoZSBpbnB1dCBhbiBhdXRvbW9ja2VkIFNESyBjb21tYW5kIHdhcyBjb25zdHJ1Y3RlZCB3aXRoLiAqL1xuY29uc3QgY29tbWFuZElucHV0ID0gKGNvbW1hbmQ6IHVua25vd24sIHR5cGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgbW9jayA9IHR5cGUgYXMgamVzdC5Nb2NrO1xuICByZXR1cm4gbW9jay5tb2NrLmNhbGxzW21vY2subW9jay5pbnN0YW5jZXMuaW5kZXhPZihjb21tYW5kKV1bMF07XG59O1xuXG4vKipcbiAqIFMzIGFzIGEgbWFwLiBFdmVyeSBcImluc3RhbmNlXCIgaW4gdGhlc2UgdGVzdHMgaXMgYSBzZXBhcmF0ZSBoYW5kbGVyIG92ZXIgdGhlXG4gKiBzYW1lIG1hcCwgd2hpY2ggaXMgd2hhdCB0aGUgY2FjaGUgYnVja2V0IGlzIHRvIHNlcGFyYXRlIExhbWJkYSBpbnN0YW5jZXMuXG4gKi9cbmNvbnN0IG9iamVjdHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuY29uc3QgczNTZW5kID0gamVzdC5mbihhc3luYyAoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFB1dE9iamVjdENvbW1hbmQpIHtcbiAgICBjb25zdCB7IEtleSwgQm9keSB9ID0gY29tbWFuZElucHV0KGNvbW1hbmQsIFB1dE9iamVjdENvbW1hbmQpO1xuICAgIG9iamVjdHMuc2V0KEtleSwgQm9keSk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGlmIChjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZCkge1xuICAgIGNvbnN0IHsgS2V5IH0gPSBjb21tYW5kSW5wdXQoY29tbWFuZCwgR2V0T2JqZWN0Q29tbWFuZCk7XG4gICAgY29uc3QgYm9keSA9IG9iamVjdHMuZ2V0KEtleSk7XG4gICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IE5vU3VjaEtleSh7IG1lc3NhZ2U6IFwiTm9TdWNoS2V5XCIsICRtZXRhZGF0YToge30gfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBCb2R5OiB7IHRyYW5zZm9ybVRvU3RyaW5nOiBhc3luYyAoKSA9PiBib2R5IH0sXG4gICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIFMzIGNvbW1hbmRcIik7XG59KTtcblxuLyoqIFRoZSByZXZhbGlkYXRpb24gdGFibGUncyBtYXJrZXIgcm93cywgYXMgYSBtYXAuICovXG5jb25zdCByb3dzID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZVZhbHVlPj4oKTtcbi8qKiBJdHMgcmV2YWxpZGF0aW9uIGxvZyByb3dzLCBieSBzb3J0IGtleS4gKi9cbmNvbnN0IGxvZ1Jvd3MgPSBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgQXR0cmlidXRlVmFsdWU+PigpO1xuY29uc3QgZHluYW1vU2VuZCA9IGplc3QuZm4oYXN5bmMgKGNvbW1hbmQ6IHVua25vd24pID0+IHtcbiAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBVcGRhdGVJdGVtQ29tbWFuZCkge1xuICAgIGNvbnN0IHsgS2V5LCBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIH0gPSBjb21tYW5kSW5wdXQoXG4gICAgICBjb21tYW5kLFxuICAgICAgVXBkYXRlSXRlbUNvbW1hbmQsXG4gICAgKTtcbiAgICBjb25zdCByb3c6IFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZVZhbHVlPiA9IHJvd3MuZ2V0KEtleS5zay5TKSA/PyB7XG4gICAgICBzazogS2V5LnNrLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICByb3dbbmFtZS5zbGljZSgxKV0gPSB2YWx1ZSBhcyBBdHRyaWJ1dGVWYWx1ZTtcbiAgICB9XG4gICAgcm93cy5zZXQoS2V5LnNrLlMsIHJvdyk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGlmIChjb21tYW5kIGluc3RhbmNlb2YgQmF0Y2hHZXRJdGVtQ29tbWFuZCkge1xuICAgIGNvbnN0IHsgUmVxdWVzdEl0ZW1zIH0gPSBjb21tYW5kSW5wdXQoY29tbWFuZCwgQmF0Y2hHZXRJdGVtQ29tbWFuZCk7XG4gICAgY29uc3QgW1t0YWJsZSwgeyBLZXlzIH1dXSA9IE9iamVjdC5lbnRyaWVzKFJlcXVlc3RJdGVtcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgeyBLZXlzOiB7IHNrOiB7IFM6IHN0cmluZyB9IH1bXSB9LFxuICAgIF1bXTtcbiAgICByZXR1cm4ge1xuICAgICAgUmVzcG9uc2VzOiB7XG4gICAgICAgIFt0YWJsZV06IEtleXMubWFwKCh7IHNrIH0pID0+IHJvd3MuZ2V0KHNrLlMpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBQdXRJdGVtQ29tbWFuZCkge1xuICAgIGNvbnN0IHsgSXRlbSB9ID0gY29tbWFuZElucHV0KGNvbW1hbmQsIFB1dEl0ZW1Db21tYW5kKTtcbiAgICBsb2dSb3dzLnNldChJdGVtLnNrLlMsIEl0ZW0pO1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgIGNvbnN0IHsgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyB9ID0gY29tbWFuZElucHV0KGNvbW1hbmQsIFF1ZXJ5Q29tbWFuZCk7XG4gICAgY29uc3Qgc2luY2UgPSBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOnNpbmNlXCJdLlMgYXMgc3RyaW5nO1xuICAgIHJldHVybiB7XG4gICAgICBJdGVtczogQXJyYXkuZnJvbShsb2dSb3dzLmtleXMoKSlcbiAgICAgICAgLmZpbHRlcigoc2spID0+IHNrID49IHNpbmNlKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5tYXAoKHNrKSA9PiBsb2dSb3dzLmdldChzaykpLFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCBEeW5hbW9EQiBjb21tYW5kXCIpO1xufSk7XG5cbihTM0NsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBzZW5kOiBzM1NlbmQgfSkpO1xuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7IHNlbmQ6IGR5bmFtb1NlbmQgfSkpO1xuXG5jb25zdCBzM0NhbGxzID0gKHR5cGU6IHVua25vd24pID0+XG4gIHMzU2VuZC5tb2NrLmNhbGxzLmZpbHRlcigoW2NvbW1hbmRdKSA9PiBjb21tYW5kIGluc3RhbmNlb2YgKHR5cGUgYXMgbmV2ZXIpKVxuICAgIC5sZW5ndGg7XG5jb25zdCBkeW5hbW9DYWxscyA9ICh0eXBlOiB1bmtub3duKSA9PlxuICBkeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgIChbY29tbWFuZF0pID0+IGNvbW1hbmQgaW5zdGFuY2VvZiAodHlwZSBhcyBuZXZlciksXG4gICkubGVuZ3RoO1xuXG4vKiogT25lIGNvbXB1dGUgaW5zdGFuY2UncyB2aWV3IG9mIHRoZSBzaGFyZWQgdGFibGUuICovXG5mdW5jdGlvbiB0YWdNYW5pZmVzdChyZWZyZXNoSW50ZXJ2YWxNcyA9IDApIHtcbiAgcmV0dXJuIG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgbWFya2VyczogbmV3IFRhZ01hcmtlclRhYmxlKG5ldyBEeW5hbW9EQkNsaWVudCh7fSksIFwidGFibGVcIiwgXCJidWlsZFwiKSxcbiAgICBsb2c6IG5ldyBSZXZhbGlkYXRpb25Mb2cobmV3IER5bmFtb0RCQ2xpZW50KHt9KSwgXCJ0YWJsZVwiLCBcImJ1aWxkXCIpLFxuICAgIHJlZnJlc2hJbnRlcnZhbE1zLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVja2V0KCkge1xuICByZXR1cm4gbmV3IENhY2hlQnVja2V0KG5ldyBTM0NsaWVudCh7fSksIFwiYnVja2V0XCIpO1xufVxuXG5mdW5jdGlvbiByZW1vdGVJbnN0YW5jZSh0YWdzID0gdGFnTWFuaWZlc3QoKSkge1xuICByZXR1cm4gY3JlYXRlUmVtb3RlVXNlQ2FjaGVIYW5kbGVyKHtcbiAgICBidWNrZXQ6IGJ1Y2tldCgpLFxuICAgIGJ1aWxkSWQ6IFwiYnVpbGRcIixcbiAgICB0YWdzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEluc3RhbmNlKHRhZ3MgPSB0YWdNYW5pZmVzdCgpKSB7XG4gIHJldHVybiBjcmVhdGVEZWZhdWx0VXNlQ2FjaGVIYW5kbGVyKHsgdGFncyB9KTtcbn1cblxuZnVuY3Rpb24gc3RyZWFtT2YodGV4dDogc3RyaW5nKTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHRleHQpKTtcbiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZW50cnkodGV4dDogc3RyaW5nLCBleHRyYTogUGFydGlhbDxDYWNoZUVudHJ5PiA9IHt9KTogQ2FjaGVFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHN0cmVhbU9mKHRleHQpLFxuICAgIHRhZ3M6IFtcInBvc3RzXCJdLFxuICAgIHN0YWxlOiAzMDAsXG4gICAgdGltZXN0YW1wOiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCksXG4gICAgZXhwaXJlOiAzNjAwLFxuICAgIHJldmFsaWRhdGU6IDkwMCxcbiAgICAuLi5leHRyYSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdGV4dE9mKHJlc3VsdDogQ2FjaGVFbnRyeSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gcmVzdWx0XG4gICAgPyBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYXdhaXQgcmVhZFN0cmVhbShyZXN1bHQudmFsdWUpKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEhvbGQgZXZlcnkgcmV2YWxpZGF0aW9uIGxvZyBgUXVlcnlgIHVudGlsIGByZWxlYXNlYDsgYHJlc3RvcmVgIHB1dHMgdGhlXG4gKiB0YWJsZSBiYWNrIGFzIGl0IHdhcy5cbiAqL1xuZnVuY3Rpb24gaG9sZFF1ZXJpZXMoKSB7XG4gIGxldCByZWxlYXNlITogKCkgPT4gdm9pZDtcbiAgY29uc3QgaGVsZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAocmVsZWFzZSA9IHJlc29sdmUpKTtcbiAgY29uc3Qgc2VuZCA9IGR5bmFtb1NlbmQuZ2V0TW9ja0ltcGxlbWVudGF0aW9uKCkhO1xuICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoY29tbWFuZCkgPT4ge1xuICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kKSB7XG4gICAgICBhd2FpdCBoZWxkO1xuICAgIH1cbiAgICByZXR1cm4gc2VuZChjb21tYW5kKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcmVsZWFzZSxcbiAgICByZXN0b3JlOiAoKSA9PiB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihzZW5kKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKiogV2hldGhlciBgcHJvbWlzZWAgaXMgc3RpbGwgcGVuZGluZyBvbmNlIHBlbmRpbmcgSS9PIGhhcyBoYWQgYSB0dXJuLiAqL1xuYXN5bmMgZnVuY3Rpb24gcGVuZGluZyhwcm9taXNlOiBQcm9taXNlPHVua25vd24+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gIHZvaWQgcHJvbWlzZS5maW5hbGx5KCgpID0+IChzZXR0bGVkID0gdHJ1ZSkpO1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgcmV0dXJuICFzZXR0bGVkO1xufVxuXG4vKiogQSByZXF1ZXN0J3Mgd29ydGggb2Ygd2hhdCBOZXh0LmpzIGRvZXMgYmVmb3JlIHJlYWRpbmcgYW4gZW50cnkuICovXG5hc3luYyBmdW5jdGlvbiByZWFkKGhhbmRsZXI6IENhY2hlSGFuZGxlciwga2V5OiBzdHJpbmcpIHtcbiAgYXdhaXQgaGFuZGxlci5yZWZyZXNoVGFncygpO1xuICByZXR1cm4gdGV4dE9mKGF3YWl0IGhhbmRsZXIuZ2V0KGtleSwgW10pKTtcbn1cblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIG9iamVjdHMuY2xlYXIoKTtcbiAgcm93cy5jbGVhcigpO1xuICBsb2dSb3dzLmNsZWFyKCk7XG59KTtcblxuZGVzY3JpYmUoXCJjYWNoZUhhbmRsZXJzLnJlbW90ZVwiLCAoKSA9PiB7XG4gIGl0KFwiYW5zd2VycyBldmVyeSBpbnN0YW5jZSBmcm9tIHRoZSBlbnRyeSBhbnkgb25lIG9mIHRoZW0gc3RvcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBjb25zdCBiID0gcmVtb3RlSW5zdGFuY2UoKTtcblxuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJmcm9tLWFcIikpKTtcblxuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcImZyb20tYVwiKTtcbiAgICBleHBlY3QoQXJyYXkuZnJvbShvYmplY3RzLmtleXMoKSkpLnRvRXF1YWwoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eYnVpbGRcXC9fdXNlLWNhY2hlXFwvWzAtOWEtZl17NjR9XFwuZW50cnkkLyksXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIGEgcmVwZWF0IHJlYWQgZnJvbSBtZW1vcnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGIgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGF3YWl0IHJlbW90ZUluc3RhbmNlKCkuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIpKSk7XG4gICAgYXdhaXQgcmVhZChiLCBcImtcIik7XG4gICAgczNTZW5kLm1vY2tDbGVhcigpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcInZcIik7XG4gICAgZXhwZWN0KHMzQ2FsbHMoR2V0T2JqZWN0Q29tbWFuZCkpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZXhwaXJlcyB0aGUgZW50cnkgb24gZXZlcnkgaW5zdGFuY2Ugd2hlbiBhIHRhZyBpcyByZXZhbGlkYXRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgYXdhaXQgYS5zZXQoXG4gICAgICBcImtcIixcbiAgICAgIFByb21pc2UucmVzb2x2ZShlbnRyeShcIm9sZFwiLCB7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSAtIDEwMDAgfSkpLFxuICAgICk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlKFwib2xkXCIpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcIm9sZFwiKTtcblxuICAgIGF3YWl0IGEudXBkYXRlVGFncyhbXCJwb3N0c1wiXSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChhLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAvLyBBIGZyZXNoIGluc3RhbmNlIHJlYWRpbmcgdGhlIHN0YWxlIG9iamVjdCBmcm9tIFMzIG1pc3NlcyB0b28uXG4gICAgZXhwZWN0KGF3YWl0IHJlYWQocmVtb3RlSW5zdGFuY2UoKSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwid2FpdHMgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBjb25zdCBiID0gcmVtb3RlSW5zdGFuY2UodGFnTWFuaWZlc3QoMTAwMCkpO1xuICAgIGF3YWl0IGEuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJvbGRcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcIm9sZFwiKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0pO1xuXG4gICAgLy8gQW4gZW50cnkgcmVhZCBmcm9tIFMzIG1heSBwcmVkYXRlIHRoZSBpbnN0YW5jZSwgc28gaXRzIHJlZnJlc2ggaXNcbiAgICAvLyB3YWl0ZWQgZm9yIGV2ZW4gd2hpbGUgdGhlIGluc3RhbmNlIGtlZXBzIHVwLlxuICAgIGNvbnN0IG5vdyA9IGplc3Quc3B5T24oRGF0ZSwgXCJub3dcIikubW9ja1JldHVyblZhbHVlKERhdGUubm93KCkgKyAxMDAwKTtcbiAgICBjb25zdCBxdWVyaWVzID0gaG9sZFF1ZXJpZXMoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5zd2VyID0gcmVhZChiLCBcImtcIik7XG4gICAgICBleHBlY3QoYXdhaXQgcGVuZGluZyhhbnN3ZXIpKS50b0JlKHRydWUpO1xuICAgICAgcXVlcmllcy5yZWxlYXNlKCk7XG4gICAgICBleHBlY3QoYXdhaXQgYW5zd2VyKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJpZXMucmVzdG9yZSgpO1xuICAgICAgbm93Lm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInNlcnZlcyBhIHByb2ZpbGUtcmV2YWxpZGF0ZWQgZW50cnkgc3RhbGUsIGZvciBOZXh0LmpzIHRvIHJlZ2VuZXJhdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGEuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJvbGRcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IGEudXBkYXRlVGFncyhbXCJwb3N0c1wiXSwgeyBleHBpcmU6IDM2MDAgfSk7XG5cbiAgICBjb25zdCBiID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBhd2FpdCBiLnJlZnJlc2hUYWdzKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYi5nZXQoXCJrXCIsIFtdKTtcbiAgICBleHBlY3QocmVzdWx0Py5yZXZhbGlkYXRlKS50b0JlKC0xKTtcbiAgICBleHBlY3QoYXdhaXQgdGV4dE9mKHJlc3VsdCkpLnRvQmUoXCJvbGRcIik7XG4gIH0pO1xuXG4gIGl0KFwicGlja3MgdXAgYW5vdGhlciBpbnN0YW5jZSdzIHJlZ2VuZXJhdGVkIGVudHJ5IG9uY2UgaXRzIG93biBpcyBzdGFsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgY29uc3QgcGFzdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSAtIDEwXzAwMDtcbiAgICBhd2FpdCBhLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidjFcIiwgeyB0aW1lc3RhbXA6IHBhc3QsIHJldmFsaWRhdGU6IDEgfSkpLFxuICAgICk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlKFwidjFcIik7XG5cbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidjJcIikpKTtcbiAgICAvLyBgYmAncyBtZW1vcnkgY29weSBpcyBwYXN0IGByZXZhbGlkYXRlYCwgc28gUzMgaXMgYXNrZWQgZm9yIGEgbmV3ZXIgb25lLlxuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcInYyXCIpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHNlcnZlIGFuIGVudHJ5IHBhc3QgaXRzIGV4cGlyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSAtIDEwXzAwMDtcbiAgICBhd2FpdCByZW1vdGVJbnN0YW5jZSgpLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBlbnRyeShcInZcIiwgeyB0aW1lc3RhbXA6IHBhc3QsIHJldmFsaWRhdGU6IDEsIGV4cGlyZTogMiB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChyZW1vdGVJbnN0YW5jZSgpLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJtYWtlcyBhIGdldCB3YWl0IGZvciBhIHBlbmRpbmcgc2V0IG9mIHRoZSBzYW1lIGtleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgbGV0IHJlc29sdmU6ICh2YWx1ZTogQ2FjaGVFbnRyeSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGNvbnN0IHNldCA9IGEuc2V0KFwia1wiLCBuZXcgUHJvbWlzZSgocikgPT4gKHJlc29sdmUgPSByKSkpO1xuICAgIGNvbnN0IGdldCA9IGEuZ2V0KFwia1wiLCBbXSk7XG4gICAgcmVzb2x2ZShlbnRyeShcInZcIikpO1xuICAgIGV4cGVjdChhd2FpdCB0ZXh0T2YoYXdhaXQgZ2V0KSkudG9CZShcInZcIik7XG4gICAgYXdhaXQgc2V0O1xuICB9KTtcblxuICBpdChcInN0b3JlcyBub3RoaW5nIGZyb20gYSBzdHJlYW0gdGhhdCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGZhaWxpbmcgPSBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgICAgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoWzFdKSk7XG4gICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IEVycm9yKFwicmVuZGVyIGZhaWxlZFwiKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoeyAuLi5lbnRyeShcIlwiKSwgdmFsdWU6IGZhaWxpbmcgfSkpO1xuICAgIGV4cGVjdChvYmplY3RzLnNpemUpLnRvQmUoMCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3Qgc3RvcmUgYW4gZW50cnkgTmV4dC5qcyByZWdlbmVyYXRlcyBvbiBldmVyeSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiLCB7IGV4cGlyZTogMCB9KSkpO1xuICAgIGV4cGVjdChvYmplY3RzLnNpemUpLnRvQmUoMCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwibmV2ZXIgc2VydmVzIGFuIG9iamVjdCBzdG9yZWQgZm9yIGFub3RoZXIga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiKSkpO1xuICAgIGNvbnN0IFtrZXldID0gQXJyYXkuZnJvbShvYmplY3RzLmtleXMoKSk7XG4gICAgb2JqZWN0cy5zZXQoa2V5LCBvYmplY3RzLmdldChrZXkpIS5yZXBsYWNlKCdcImtleVwiOlwia1wiJywgJ1wia2V5XCI6XCJvdGhlclwiJykpO1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKHJlbW90ZUluc3RhbmNlKCksIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB3b3JraW5nIGZyb20gbWVtb3J5IHdoZW4gUzMgZmFpbHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgczNTZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTbG93RG93blwiKSk7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgYXdhaXQgYS5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcInZcIikpKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChhLCBcImtcIikpLnRvQmUoXCJ2XCIpO1xuICAgIHMzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiU2xvd0Rvd25cIikpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKHJlbW90ZUluc3RhbmNlKCksIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiaXMgbWVtb3J5LW9ubHkgd2l0aG91dCBhIGJ1Y2tldFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcih7XG4gICAgICBidWNrZXQ6IG51bGwsXG4gICAgICBidWlsZElkOiBcImJ1aWxkXCIsXG4gICAgICB0YWdzOiB0YWdNYW5pZmVzdCgpLFxuICAgIH0pO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlKFwidlwiKTtcbiAgICBleHBlY3QoczNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcInJlYWRzIGFuIFMzIGVudHJ5J3MgdGFncyBiZWZvcmUgdHJ1c3RpbmcgaXQsIG9uY2UgcGVyIGluc3RhbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByZW1vdGVJbnN0YW5jZSgpLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiKSkpO1xuICAgIGNvbnN0IGIgPSByZW1vdGVJbnN0YW5jZSh0YWdNYW5pZmVzdCg2MF8wMDApKTtcbiAgICBkeW5hbW9TZW5kLm1vY2tDbGVhcigpO1xuICAgIGF3YWl0IHJlYWQoYiwgXCJrXCIpO1xuICAgIGF3YWl0IHJlYWQoYiwgXCJrXCIpO1xuICAgIGV4cGVjdChkeW5hbW9DYWxscyhCYXRjaEdldEl0ZW1Db21tYW5kKSkudG9CZSgxKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJjYWNoZUhhbmRsZXJzLnJlbW90ZSwgYWNyb3NzIGEgcmV2YWxpZGF0aW9uIGJlZm9yZSBhbiBpbnN0YW5jZSBzdGFydGVkXCIsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IGplc3QucmVzdG9yZUFsbE1vY2tzKCkpO1xuXG4gIC8vIEEgc3RvcmVzIEsxOyBDIHJldmFsaWRhdGVzIGl0cyB0YWc7IEIgc3RhcnRzIGFmdGVyIEMncyBsb2cgcm93IGlzIGJlaGluZFxuICAvLyBpdHMgY3Vyc29yLCBzdG9yZXMgSzIgd2l0aCB0aGUgc2FtZSB0YWcsIHRoZW4gcmVhZHMgSzEgZnJvbSBTMy5cbiAgaXQoXCJkb2VzIG5vdCBzZXJ2ZSBhbiBvbGRlciBTMyBlbnRyeSBhcyBmcmVzaCBhZnRlciBzdG9yaW5nIGEgbmV3ZXIgb25lIHdpdGggaXRzIHRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgYXdhaXQgYS5zZXQoXG4gICAgICBcImsxXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiZWZvcmVcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IHJlbW90ZUluc3RhbmNlKCkudXBkYXRlVGFncyhbXCJwb3N0c1wiXSwgeyBleHBpcmU6IDAgfSk7XG5cbiAgICBjb25zdCBsYXRlciA9IERhdGUubm93KCkgKyAxMF8wMDA7XG4gICAgamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUobGF0ZXIpO1xuICAgIGNvbnN0IGIgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGIuc2V0KFwiazJcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYWZ0ZXJcIiwgeyB0aW1lc3RhbXA6IGxhdGVyIH0pKSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImsxXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrMlwiKSkudG9CZShcImFmdGVyXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImNhY2hlSGFuZGxlcnMuZGVmYXVsdFwiLCAoKSA9PiB7XG4gIGl0KFwia2VlcHMgZW50cmllcyBpbiBlYWNoIGluc3RhbmNlJ3MgbWVtb3J5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlKFwidlwiKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoczNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImV4cGlyZXMgYW4gZW50cnkgb24gYW4gaW5zdGFuY2UgdGhhdCBkaWQgbm90IHJ1biByZXZhbGlkYXRlVGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSB7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSAtIDEwMDAgfTtcbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYVwiLCBjcmVhdGVkKSkpO1xuICAgIGF3YWl0IGIuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIGNyZWF0ZWQpKSk7XG4gICAgLy8gQ3JlYXRlZCBiZWZvcmUgYGJgIHN0YXJ0ZWQsIHNvIGl0cyBmaXJzdCByZWFkIHJlYWRzIHRoZSB0YWcncyBtYXJrZXIsXG4gICAgLy8gb25jZS5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuXG4gICAgLy8gV2hhdCBOZXh0LmpzIGRvZXMgZm9yIGByZXZhbGlkYXRlVGFnYDogYHVwZGF0ZVRhZ3NgIG9uIGV2ZXJ5IGhhbmRsZXIgb2ZcbiAgICAvLyB0aGUgaW5zdGFuY2UgdGhhdCByYW4gaXQgLSBoZXJlLCBgYWAuXG4gICAgYXdhaXQgYS51cGRhdGVUYWdzKFtcInBvc3RzXCJdLCB7IGV4cGlyZTogMCB9KTtcbiAgICBkeW5hbW9TZW5kLm1vY2tDbGVhcigpO1xuXG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gYGJgIGxlYXJuZWQgb2YgaXQgZnJvbSB0aGUgbG9nLCBub3QgYnkgcmUtcmVhZGluZyBpdHMgdGFncycgbWFya2Vycy5cbiAgICBleHBlY3QoZHluYW1vQ2FsbHMoUXVlcnlDb21tYW5kKSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIGV4cGVjdChkeW5hbW9DYWxscyhCYXRjaEdldEl0ZW1Db21tYW5kKSkudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YWl0cyBvbiBubyBtYXJrZXIgcmVhZCB0byBqdWRnZSBhbiBlbnRyeSBzdG9yZWQgc2luY2UgdGhlIGluc3RhbmNlIHN0YXJ0ZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBiVGFncyA9IHRhZ01hbmlmZXN0KCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZShiVGFncyk7XG4gICAgYXdhaXQgYi5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIikpKTtcblxuICAgIC8vIEhvbGQgZXZlcnkgbWFya2VyIHJlYWQ6IE5leHQuanMgYXdhaXRzIGJvdGggYW5zd2VycyBpbnNpZGUgdGhlXG4gICAgLy8gYCd1c2UgY2FjaGUnYCBsb29rdXAsIGFuZCBhIHBhdGggdGhlIGluc3RhbmNlIGhhcyBub3Qgc2VydmVkIGJlZm9yZSBoYXNcbiAgICAvLyBpbXBsaWNpdCB0YWdzIGl0IGhhcyBuZXZlciByZWFkLlxuICAgIGxldCByZWxlYXNlITogKCkgPT4gdm9pZDtcbiAgICBjb25zdCBoZWxkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChyZWxlYXNlID0gcmVzb2x2ZSkpO1xuICAgIGNvbnN0IHNlbmQgPSBkeW5hbW9TZW5kLmdldE1vY2tJbXBsZW1lbnRhdGlvbigpITtcbiAgICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoY29tbWFuZCkgPT4ge1xuICAgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBCYXRjaEdldEl0ZW1Db21tYW5kKSB7XG4gICAgICAgIGF3YWl0IGhlbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZChjb21tYW5kKTtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgZXhwZWN0KGF3YWl0IGIuZ2V0RXhwaXJhdGlvbihbXCJfTl9UXy9uZXctcGF0aFwiXSkpLnRvQmUoSW5maW5pdHkpO1xuICAgICAgYXdhaXQgYi5yZWZyZXNoVGFncygpO1xuICAgICAgZXhwZWN0KGF3YWl0IHRleHRPZihhd2FpdCBiLmdldChcImtcIiwgW1wiX05fVF8vbmV3LXBhdGhcIl0pKSkudG9CZShcImJcIik7XG4gICAgICAvLyBTdGlsbCByZWFkLCBpbiB0aGUgYmFja2dyb3VuZCwgc28gdGhlIHRhZ3Mgam9pbiB0aGUgcm9sbGluZyByZS1yZWFkLlxuICAgICAgZXhwZWN0KGR5bmFtb0NhbGxzKEJhdGNoR2V0SXRlbUNvbW1hbmQpKS50b0JlR3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIC8vIEFub3RoZXIgaW5zdGFuY2UncyByZXZhbGlkYXRpb24gc3RpbGwgcmVhY2hlcyBpdCwgdGhyb3VnaCB0aGUgbG9nLlxuICAgICAgYXdhaXQgYS51cGRhdGVUYWdzKFtcInBvc3RzXCJdKTtcbiAgICAgIGF3YWl0IGJUYWdzLnJlZnJlc2goKTtcbiAgICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihzZW5kKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVhZHMgdGhlIGltcGxpY2l0IHRhZ3MgZmlyc3QgZm9yIGFuIGVudHJ5IG9sZGVyIHRoYW4gdGhlIG1hbmlmZXN0J3Mga25vd2xlZGdlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgYXdhaXQgYi5zZXQoXG4gICAgICBcImtcIixcbiAgICAgIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IGIuc2V0KFwibmV3XCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcIm5ld1wiKSkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgIHJvd3Muc2V0KFwiX05fVF8vb2xkLXBhdGhcIiwge1xuICAgICAgc2s6IHsgUzogXCJfTl9UXy9vbGQtcGF0aFwiIH0sXG4gICAgICByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhEYXRlLm5vdygpIC0gNTAwKSB9LFxuICAgIH0pO1xuICAgIC8vIEp1ZGdlZCBwZXIgZW50cnk6IHRoZSBuZXcgb25lIGlzIG5vdCBoZWxkIHVwIGJ5IHRoZSBvbGQgb25lLlxuICAgIGR5bmFtb1NlbmQubW9ja0NsZWFyKCk7XG4gICAgZXhwZWN0KGF3YWl0IHRleHRPZihhd2FpdCBiLmdldChcIm5ld1wiLCBbXCJfTl9UXy9uZXctcGF0aFwiXSkpKS50b0JlKFwibmV3XCIpO1xuICAgIGV4cGVjdChhd2FpdCB0ZXh0T2YoYXdhaXQgYi5nZXQoXCJrXCIsIFtcIl9OX1RfL29sZC1wYXRoXCJdKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoZHluYW1vQ2FsbHMoQmF0Y2hHZXRJdGVtQ29tbWFuZCkpLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgaG9sZCBhIHJlYWQgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSh0YWdNYW5pZmVzdCgxMDAwKSk7XG4gICAgY29uc3QgY3JlYXRlZCA9IHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9O1xuICAgIGF3YWl0IGIuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIGNyZWF0ZWQpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlKFwiYlwiKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0sIHsgZXhwaXJlOiAwIH0pO1xuXG4gICAgLy8gTmV4dC5qcyBhd2FpdHMgYHJlZnJlc2hUYWdzYCBpbnNpZGUgdGhlIGAndXNlIGNhY2hlJ2AgbG9va3VwLCBzbyBhIHJlYWRcbiAgICAvLyB0aGF0IHdhaXRlZCBmb3IgdGhlIHF1ZXJ5IHdvdWxkIGxlYXZlIHRoZSBzdGF0aWMgc3RhZ2Ugb2YgYSBzdGFnZWRcbiAgICAvLyByZW5kZXIuIFRoaXMgb25lIGFuc3dlcnMgZnJvbSB3aGF0IHRoZSBpbnN0YW5jZSBhbHJlYWR5IGtuZXcuXG4gICAgY29uc3Qgbm93ID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUoRGF0ZS5ub3coKSArIDEwMDApO1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBob2xkUXVlcmllcygpO1xuICAgIHRyeSB7XG4gICAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuICAgICAgZXhwZWN0KGR5bmFtb0NhbGxzKFF1ZXJ5Q29tbWFuZCkpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgcXVlcmllcy5yZWxlYXNlKCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyaWVzLnJlc3RvcmUoKTtcbiAgICAgIG5vdy5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJ3YWl0cyBmb3IgdGhlIHJldmFsaWRhdGlvbiBsb2cgcXVlcnkgYWZ0ZXIgdGhlIGluc3RhbmNlIHNhdCBpZGxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSh0YWdNYW5pZmVzdCgxMDAwKSk7XG4gICAgY29uc3QgY3JlYXRlZCA9IHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9O1xuICAgIGF3YWl0IGIuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIGNyZWF0ZWQpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlKFwiYlwiKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0sIHsgZXhwaXJlOiAwIH0pO1xuXG4gICAgLy8gTm8gbG9nIHF1ZXJ5IGZvciBsb25nZXIgdGhhbiB0aGUgaW50ZXJ2YWwgcGx1cyB0aGUgZ3JhY2UsIGFzIGZvciBhXG4gICAgLy8gTGFtYmRhIGZyb3plbiBiZXR3ZWVuIGludm9jYXRpb25zLlxuICAgIGNvbnN0IGxhdGVyID0gRGF0ZS5ub3coKSArIDEwMDAgKyBUQUdfUkVGUkVTSF9HUkFDRV9NUyArIDUwMDA7XG4gICAgY29uc3Qgbm93ID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUobGF0ZXIpO1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBob2xkUXVlcmllcygpO1xuICAgIHRyeSB7XG4gICAgICAvLyBBbnN3ZXJlZCBvbmx5IG9uY2UgdGhlIHF1ZXJ5IHJldHVybnMsIGFuZCB0aGVuIHdpdGhvdXQgdGhlIGVudHJ5IHRoZVxuICAgICAgLy8gb3RoZXIgaW5zdGFuY2UgcmV2YWxpZGF0ZWQgd2hpbGUgdGhpcyBvbmUgc2F0IGlkbGUuXG4gICAgICBjb25zdCBhbnN3ZXIgPSByZWFkKGIsIFwia1wiKTtcbiAgICAgIGV4cGVjdChhd2FpdCBwZW5kaW5nKGFuc3dlcikpLnRvQmUodHJ1ZSk7XG4gICAgICBxdWVyaWVzLnJlbGVhc2UoKTtcbiAgICAgIGV4cGVjdChhd2FpdCBhbnN3ZXIpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllcy5yZXN0b3JlKCk7XG4gICAgICBub3cubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHJldmFsaWRhdGlvbiBsb2cgcXVlcnksIGlkbGUsIHdoaWxlIGl0IGhvbGRzIG5vIGVudHJpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGIgPSBkZWZhdWx0SW5zdGFuY2UodGFnTWFuaWZlc3QoMTAwMCkpO1xuXG4gICAgLy8gQXMgZm9yIHRoZSBmaXJzdCBgJ3VzZSBjYWNoZSdgIGNhbGwgb2YgYSBwcm9jZXNzLCB3aGljaCBjcmVhdGVzIHRoZVxuICAgIC8vIGhhbmRsZXIgaW5zaWRlIHRoZSByZW5kZXI6IG5vdGhpbmcgaGVsZCwgc28gbm90aGluZyB0aGUgcXVlcnkgY291bGRcbiAgICAvLyBleHBpcmUuXG4gICAgY29uc3QgbGF0ZXIgPSBEYXRlLm5vdygpICsgMTAwMCArIFRBR19SRUZSRVNIX0dSQUNFX01TICsgNTAwMDtcbiAgICBjb25zdCBub3cgPSBqZXN0LnNweU9uKERhdGUsIFwibm93XCIpLm1vY2tSZXR1cm5WYWx1ZShsYXRlcik7XG4gICAgY29uc3QgcXVlcmllcyA9IGhvbGRRdWVyaWVzKCk7XG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdChhd2FpdCBwZW5kaW5nKGIucmVmcmVzaFRhZ3MoKSkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGR5bmFtb0NhbGxzKFF1ZXJ5Q29tbWFuZCkpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllcy5yZXN0b3JlKCk7XG4gICAgICBub3cubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHJldmFsaWRhdGlvbiBsb2cgcXVlcnksIGlkbGUsIHdoaWxlIGl0IGhvbGRzIG9ubHkgZXhwaXJlZCBlbnRyaWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKHRhZ01hbmlmZXN0KDEwMDApKTtcbiAgICBjb25zdCBjcmVhdGVkID0gcGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlLm5vdygpIC0gNTAwMDtcbiAgICBhd2FpdCBiLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYlwiLCB7IHRpbWVzdGFtcDogY3JlYXRlZCwgcmV2YWxpZGF0ZTogMSB9KSksXG4gICAgKTtcblxuICAgIGNvbnN0IGxhdGVyID0gRGF0ZS5ub3coKSArIDEwMDAgKyBUQUdfUkVGUkVTSF9HUkFDRV9NUyArIDUwMDA7XG4gICAgY29uc3Qgbm93ID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUobGF0ZXIpO1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBob2xkUXVlcmllcygpO1xuICAgIHRyeSB7XG4gICAgICAvLyBgZ2V0YCB3b3VsZCBkcm9wIGl0OiBub3RoaW5nIHRoZSBxdWVyeSBjb3VsZCBleHBpcmUuXG4gICAgICBleHBlY3QoYXdhaXQgcGVuZGluZyhiLnJlZnJlc2hUYWdzKCkpKS50b0JlKGZhbHNlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllcy5yZXN0b3JlKCk7XG4gICAgICBub3cubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwid2FpdHMgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5IHdoZW4gdG9sZCB0byBhc2sgb24gZXZlcnkgY2hlY2tcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKHRhZ01hbmlmZXN0KDApKTtcbiAgICBjb25zdCBjcmVhdGVkID0geyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH07XG4gICAgYXdhaXQgYi5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIiwgY3JlYXRlZCkpKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuICAgIGF3YWl0IGEudXBkYXRlVGFncyhbXCJwb3N0c1wiXSwgeyBleHBpcmU6IDAgfSk7XG5cbiAgICBjb25zdCBxdWVyaWVzID0gaG9sZFF1ZXJpZXMoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5zd2VyID0gcmVhZChiLCBcImtcIik7XG4gICAgICBleHBlY3QoYXdhaXQgcGVuZGluZyhhbnN3ZXIpKS50b0JlKHRydWUpO1xuICAgICAgcXVlcmllcy5yZWxlYXNlKCk7XG4gICAgICBleHBlY3QoYXdhaXQgYW5zd2VyKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJpZXMucmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBhbiBlbnRyeSdzIHRhZ3MgYXMgaXQgc3RvcmVzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgZHluYW1vU2VuZC5tb2NrQ2xlYXIoKTtcbiAgICBhd2FpdCBiLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYlwiLCB7IHRhZ3M6IFtcInBvc3RzXCJdIH0pKSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldEltbWVkaWF0ZShyZXNvbHZlKSk7XG4gICAgZXhwZWN0KGR5bmFtb0NhbGxzKEJhdGNoR2V0SXRlbUNvbW1hbmQpKS50b0JlKDEpO1xuICB9KTtcblxuICBpdChcImV4cGlyZXMgYW4gZW50cnkgc3RvcmVkIGFmdGVyIGEgcmV2YWxpZGF0aW9uIHdob3NlIGV4cGlyZSBpdCBvdXRsaXZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gUmV2YWxpZGF0ZWQgd2l0aCBhIHByb2ZpbGUgYmVmb3JlIGBiYCBzdGFydGVkLCBvdXRzaWRlIGl0cyBsb2cncyBmaXJzdFxuICAgIC8vIGxvb2tiYWNrOiB0aGUgbWFya2VyIGFsb25lIGtub3dzIHRoZSBlbnRyeSBleHBpcmVzLlxuICAgIGNvbnN0IGV4cGlyZWRBdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSArIDYwXzAwMDtcbiAgICByb3dzLnNldChcInBvc3RzXCIsIHtcbiAgICAgIHNrOiB7IFM6IFwicG9zdHNcIiB9LFxuICAgICAgc3RhbGVBdDogeyBOOiBTdHJpbmcoZXhwaXJlZEF0IC0gMTIwXzAwMCkgfSxcbiAgICAgIGV4cGlyZWRBdDogeyBOOiBTdHJpbmcoZXhwaXJlZEF0KSB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGIgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBhd2FpdCBiLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYlwiKSkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgIGNvbnN0IGNsb2NrID0gamVzdFxuICAgICAgLnNweU9uKHBlcmZvcm1hbmNlLCBcIm5vd1wiKVxuICAgICAgLm1vY2tSZXR1cm5WYWx1ZShleHBpcmVkQXQgLSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgMSk7XG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdChhd2FpdCB0ZXh0T2YoYXdhaXQgYi5nZXQoXCJrXCIsIFtdKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xvY2subW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwid2FpdHMgZm9yIHRoZSByZWZyZXNoIGludGVydmFsIGJlZm9yZSByZS1yZWFkaW5nIHRhZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGIgPSBkZWZhdWx0SW5zdGFuY2UodGFnTWFuaWZlc3QoNjBfMDAwKSk7XG4gICAgYXdhaXQgYi5zZXQoXG4gICAgICBcImtcIixcbiAgICAgIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IHJlYWQoYiwgXCJrXCIpO1xuICAgIGF3YWl0IGRlZmF1bHRJbnN0YW5jZSgpLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0pO1xuICAgIGR5bmFtb1NlbmQubW9ja0NsZWFyKCk7XG5cbiAgICAvLyBJbnNpZGUgdGhlIHdpbmRvdzogc3RpbGwgc2VydmVkLCBhbmQgbm8gcmVhZCBzcGVudCBvbiBpdC5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuICAgIGV4cGVjdChkeW5hbW9DYWxscyhCYXRjaEdldEl0ZW1Db21tYW5kKSkudG9CZSgwKTtcbiAgICBleHBlY3QoZHluYW1vQ2FsbHMoUXVlcnlDb21tYW5kKSkudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoXCJkcm9wcyBhbiBlbnRyeSBwYXN0IHJldmFsaWRhdGUsIGFzIE5leHQuanMncyBpbi1tZW1vcnkgaGFuZGxlciBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgcGFzdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSAtIDEwXzAwMDtcbiAgICBhd2FpdCBhLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiLCB7IHRpbWVzdGFtcDogcGFzdCwgcmV2YWxpZGF0ZTogMSB9KSksXG4gICAgKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChhLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIHN0YWxlIHRhZ3MgYXMgcmV2YWxpZGF0ZSAtMVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGEuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIsIHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9KSksXG4gICAgKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0sIHsgZXhwaXJlOiAzNjAwIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGEuZ2V0KFwia1wiLCBbXSk7XG4gICAgZXhwZWN0KHJlc3VsdD8ucmV2YWxpZGF0ZSkudG9CZSgtMSk7XG4gIH0pO1xuXG4gIGl0KFwiZXhwaXJlcyBhbiBlbnRyeSBieSBhbm90aGVyIGluc3RhbmNlJ3MgcmV2YWxpZGF0ZVBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBiVGFncyA9IHRhZ01hbmlmZXN0KCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZShiVGFncyk7XG4gICAgYXdhaXQgYi5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIikpKTtcbiAgICBhd2FpdCBiLnNldChcIm90aGVyXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcIm90aGVyXCIpKSk7XG4gICAgYXdhaXQgYS51cGRhdGVUYWdzKFtcIl9OX1RfL2Jsb2cvbGF5b3V0XCJdKTtcbiAgICAvLyBGcm9tIHRoZSBsb2csIGFzIHNvb24gYXMgYGJgIGhhcyByZWFkIGl0LlxuICAgIGF3YWl0IGJUYWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYXdhaXQgdGV4dE9mKGF3YWl0IGIuZ2V0KFwib3RoZXJcIiwgW1wiX05fVF8vb3RoZXJcIl0pKSkudG9CZShcIm90aGVyXCIpO1xuICAgIGV4cGVjdChcbiAgICAgIGF3YWl0IHRleHRPZihhd2FpdCBiLmdldChcImtcIiwgW1wiX05fVF8vXCIsIFwiX05fVF8vYmxvZy9sYXlvdXRcIl0pKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBleHBpcmUgYW4gZW50cnkgYnkgYW4gaW1wbGljaXQgdGFnIG1hcmtlZCBvbmx5IHN0YWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGIuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9KSksXG4gICAgKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wiX05fVF8vYmxvZ1wiXSwgeyBleHBpcmU6IDM2MDAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYi5nZXQoXCJrXCIsIFtcIl9OX1RfL2Jsb2dcIl0pO1xuICAgIGV4cGVjdChyZXN1bHQ/LnJldmFsaWRhdGUpLnRvQmUoOTAwKTtcbiAgfSk7XG5cbiAgaXQoXCJzdG9yZXMgbm90aGluZyBmcm9tIGEgc3RyZWFtIHRoYXQgZXJyb3JzLCBhbmQgcmVsZWFzZXMgdGhlIHBlbmRpbmcgZ2V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgZmFpbGluZyA9IG5ldyBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pih7XG4gICAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IEVycm9yKFwicmVuZGVyIGZhaWxlZFwiKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoeyAuLi5lbnRyeShcIlwiKSwgdmFsdWU6IGZhaWxpbmcgfSkpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGEsIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuIl19
589
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLWhhbmRsZXJzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci91c2UtY2FjaGUtaGFuZGxlcnMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXRDLDhEQU9rQztBQUNsQyxrREFLNEI7QUFFNUIsdURBTTJCO0FBQzNCLHlEQUFnRDtBQUNoRCwyRUFBMkU7QUFDM0UseUVBQXlFO0FBRXpFLGdFQUFnRTtBQUNoRSxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWdCLEVBQUUsSUFBYSxFQUFFLEVBQUU7SUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBaUIsQ0FBQztJQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0FBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUNoRCxJQUFJLE9BQU8sWUFBWSw0QkFBZ0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSw0QkFBZ0IsQ0FBQyxDQUFDO1FBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELElBQUksT0FBTyxZQUFZLDRCQUFnQixF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QyxDQUFDLENBQUM7UUFDaEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0VBQXdFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdEYsTUFBTSxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQWE7WUFDN0MsS0FBSyxDQUFDLFVBQVU7Z0JBQ2QsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQy9DLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtczNcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7XG5cbmltcG9ydCB7XG4gIEF0dHJpYnV0ZVZhbHVlLFxuICBCYXRjaEdldEl0ZW1Db21tYW5kLFxuICBEeW5hbW9EQkNsaWVudCxcbiAgUHV0SXRlbUNvbW1hbmQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIEdldE9iamVjdENvbW1hbmQsXG4gIE5vU3VjaEtleSxcbiAgUHV0T2JqZWN0Q29tbWFuZCxcbiAgUzNDbGllbnQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVFbnRyeSwgQ2FjaGVIYW5kbGVyIH0gZnJvbSBcIm5leHQvY2FjaGVcIjtcbmltcG9ydCB7XG4gIENhY2hlQnVja2V0LFxuICBSZXZhbGlkYXRpb25Mb2csXG4gIFRBR19SRUZSRVNIX0dSQUNFX01TLFxuICBUYWdNYXJrZXJUYWJsZSxcbiAgVHJhY2tlZFRhZ01hcmtlcnMsXG59IGZyb20gXCIuL2F3cy1jYWNoZS1zdG9yZVwiO1xuaW1wb3J0IHsgcmVhZFN0cmVhbSB9IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcbmltcG9ydCB7IGNyZWF0ZURlZmF1bHRVc2VDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi91c2UtY2FjaGUtZGVmYXVsdC1oYW5kbGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVSZW1vdGVVc2VDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi91c2UtY2FjaGUtcmVtb3RlLWhhbmRsZXJcIjtcblxuLyoqIFRoZSBpbnB1dCBhbiBhdXRvbW9ja2VkIFNESyBjb21tYW5kIHdhcyBjb25zdHJ1Y3RlZCB3aXRoLiAqL1xuY29uc3QgY29tbWFuZElucHV0ID0gKGNvbW1hbmQ6IHVua25vd24sIHR5cGU6IHVua25vd24pID0+IHtcbiAgY29uc3QgbW9jayA9IHR5cGUgYXMgamVzdC5Nb2NrO1xuICByZXR1cm4gbW9jay5tb2NrLmNhbGxzW21vY2subW9jay5pbnN0YW5jZXMuaW5kZXhPZihjb21tYW5kKV1bMF07XG59O1xuXG4vKipcbiAqIFMzIGFzIGEgbWFwLiBFdmVyeSBcImluc3RhbmNlXCIgaW4gdGhlc2UgdGVzdHMgaXMgYSBzZXBhcmF0ZSBoYW5kbGVyIG92ZXIgdGhlXG4gKiBzYW1lIG1hcCwgd2hpY2ggaXMgd2hhdCB0aGUgY2FjaGUgYnVja2V0IGlzIHRvIHNlcGFyYXRlIExhbWJkYSBpbnN0YW5jZXMuXG4gKi9cbmNvbnN0IG9iamVjdHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuY29uc3QgczNTZW5kID0gamVzdC5mbihhc3luYyAoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFB1dE9iamVjdENvbW1hbmQpIHtcbiAgICBjb25zdCB7IEtleSwgQm9keSB9ID0gY29tbWFuZElucHV0KGNvbW1hbmQsIFB1dE9iamVjdENvbW1hbmQpO1xuICAgIG9iamVjdHMuc2V0KEtleSwgQm9keSk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGlmIChjb21tYW5kIGluc3RhbmNlb2YgR2V0T2JqZWN0Q29tbWFuZCkge1xuICAgIGNvbnN0IHsgS2V5IH0gPSBjb21tYW5kSW5wdXQoY29tbWFuZCwgR2V0T2JqZWN0Q29tbWFuZCk7XG4gICAgY29uc3QgYm9keSA9IG9iamVjdHMuZ2V0KEtleSk7XG4gICAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IE5vU3VjaEtleSh7IG1lc3NhZ2U6IFwiTm9TdWNoS2V5XCIsICRtZXRhZGF0YToge30gfSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBCb2R5OiB7IHRyYW5zZm9ybVRvU3RyaW5nOiBhc3luYyAoKSA9PiBib2R5IH0sXG4gICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsXG4gICAgfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJ1bmV4cGVjdGVkIFMzIGNvbW1hbmRcIik7XG59KTtcblxuLyoqIFRoZSByZXZhbGlkYXRpb24gdGFibGUncyBtYXJrZXIgcm93cywgYXMgYSBtYXAuICovXG5jb25zdCByb3dzID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZVZhbHVlPj4oKTtcbi8qKiBJdHMgcmV2YWxpZGF0aW9uIGxvZyByb3dzLCBieSBzb3J0IGtleS4gKi9cbmNvbnN0IGxvZ1Jvd3MgPSBuZXcgTWFwPHN0cmluZywgUmVjb3JkPHN0cmluZywgQXR0cmlidXRlVmFsdWU+PigpO1xuY29uc3QgZHluYW1vU2VuZCA9IGplc3QuZm4oYXN5bmMgKGNvbW1hbmQ6IHVua25vd24pID0+IHtcbiAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBVcGRhdGVJdGVtQ29tbWFuZCkge1xuICAgIGNvbnN0IHsgS2V5LCBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzIH0gPSBjb21tYW5kSW5wdXQoXG4gICAgICBjb21tYW5kLFxuICAgICAgVXBkYXRlSXRlbUNvbW1hbmQsXG4gICAgKTtcbiAgICBjb25zdCByb3c6IFJlY29yZDxzdHJpbmcsIEF0dHJpYnV0ZVZhbHVlPiA9IHJvd3MuZ2V0KEtleS5zay5TKSA/PyB7XG4gICAgICBzazogS2V5LnNrLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICByb3dbbmFtZS5zbGljZSgxKV0gPSB2YWx1ZSBhcyBBdHRyaWJ1dGVWYWx1ZTtcbiAgICB9XG4gICAgcm93cy5zZXQoS2V5LnNrLlMsIHJvdyk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIGlmIChjb21tYW5kIGluc3RhbmNlb2YgQmF0Y2hHZXRJdGVtQ29tbWFuZCkge1xuICAgIGNvbnN0IHsgUmVxdWVzdEl0ZW1zIH0gPSBjb21tYW5kSW5wdXQoY29tbWFuZCwgQmF0Y2hHZXRJdGVtQ29tbWFuZCk7XG4gICAgY29uc3QgW1t0YWJsZSwgeyBLZXlzIH1dXSA9IE9iamVjdC5lbnRyaWVzKFJlcXVlc3RJdGVtcykgYXMgW1xuICAgICAgc3RyaW5nLFxuICAgICAgeyBLZXlzOiB7IHNrOiB7IFM6IHN0cmluZyB9IH1bXSB9LFxuICAgIF1bXTtcbiAgICByZXR1cm4ge1xuICAgICAgUmVzcG9uc2VzOiB7XG4gICAgICAgIFt0YWJsZV06IEtleXMubWFwKCh7IHNrIH0pID0+IHJvd3MuZ2V0KHNrLlMpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBQdXRJdGVtQ29tbWFuZCkge1xuICAgIGNvbnN0IHsgSXRlbSB9ID0gY29tbWFuZElucHV0KGNvbW1hbmQsIFB1dEl0ZW1Db21tYW5kKTtcbiAgICBsb2dSb3dzLnNldChJdGVtLnNrLlMsIEl0ZW0pO1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBpZiAoY29tbWFuZCBpbnN0YW5jZW9mIFF1ZXJ5Q29tbWFuZCkge1xuICAgIGNvbnN0IHsgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyB9ID0gY29tbWFuZElucHV0KGNvbW1hbmQsIFF1ZXJ5Q29tbWFuZCk7XG4gICAgY29uc3Qgc2luY2UgPSBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzW1wiOnNpbmNlXCJdLlMgYXMgc3RyaW5nO1xuICAgIHJldHVybiB7XG4gICAgICBJdGVtczogQXJyYXkuZnJvbShsb2dSb3dzLmtleXMoKSlcbiAgICAgICAgLmZpbHRlcigoc2spID0+IHNrID49IHNpbmNlKVxuICAgICAgICAuc29ydCgpXG4gICAgICAgIC5tYXAoKHNrKSA9PiBsb2dSb3dzLmdldChzaykpLFxuICAgIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCBEeW5hbW9EQiBjb21tYW5kXCIpO1xufSk7XG5cbihTM0NsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBzZW5kOiBzM1NlbmQgfSkpO1xuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7IHNlbmQ6IGR5bmFtb1NlbmQgfSkpO1xuXG5jb25zdCBzM0NhbGxzID0gKHR5cGU6IHVua25vd24pID0+XG4gIHMzU2VuZC5tb2NrLmNhbGxzLmZpbHRlcigoW2NvbW1hbmRdKSA9PiBjb21tYW5kIGluc3RhbmNlb2YgKHR5cGUgYXMgbmV2ZXIpKVxuICAgIC5sZW5ndGg7XG5jb25zdCBkeW5hbW9DYWxscyA9ICh0eXBlOiB1bmtub3duKSA9PlxuICBkeW5hbW9TZW5kLm1vY2suY2FsbHMuZmlsdGVyKFxuICAgIChbY29tbWFuZF0pID0+IGNvbW1hbmQgaW5zdGFuY2VvZiAodHlwZSBhcyBuZXZlciksXG4gICkubGVuZ3RoO1xuXG4vKiogT25lIGNvbXB1dGUgaW5zdGFuY2UncyB2aWV3IG9mIHRoZSBzaGFyZWQgdGFibGUuICovXG5mdW5jdGlvbiB0YWdNYW5pZmVzdChyZWZyZXNoSW50ZXJ2YWxNcyA9IDApIHtcbiAgcmV0dXJuIG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgbWFya2VyczogbmV3IFRhZ01hcmtlclRhYmxlKG5ldyBEeW5hbW9EQkNsaWVudCh7fSksIFwidGFibGVcIiwgXCJidWlsZFwiKSxcbiAgICBsb2c6IG5ldyBSZXZhbGlkYXRpb25Mb2cobmV3IER5bmFtb0RCQ2xpZW50KHt9KSwgXCJ0YWJsZVwiLCBcImJ1aWxkXCIpLFxuICAgIHJlZnJlc2hJbnRlcnZhbE1zLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVja2V0KCkge1xuICByZXR1cm4gbmV3IENhY2hlQnVja2V0KG5ldyBTM0NsaWVudCh7fSksIFwiYnVja2V0XCIpO1xufVxuXG5mdW5jdGlvbiByZW1vdGVJbnN0YW5jZSh0YWdzID0gdGFnTWFuaWZlc3QoKSkge1xuICByZXR1cm4gY3JlYXRlUmVtb3RlVXNlQ2FjaGVIYW5kbGVyKHtcbiAgICBidWNrZXQ6IGJ1Y2tldCgpLFxuICAgIGJ1aWxkSWQ6IFwiYnVpbGRcIixcbiAgICB0YWdzLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEluc3RhbmNlKHRhZ3MgPSB0YWdNYW5pZmVzdCgpKSB7XG4gIHJldHVybiBjcmVhdGVEZWZhdWx0VXNlQ2FjaGVIYW5kbGVyKHsgdGFncyB9KTtcbn1cblxuZnVuY3Rpb24gc3RyZWFtT2YodGV4dDogc3RyaW5nKTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4ge1xuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHRleHQpKTtcbiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZW50cnkodGV4dDogc3RyaW5nLCBleHRyYTogUGFydGlhbDxDYWNoZUVudHJ5PiA9IHt9KTogQ2FjaGVFbnRyeSB7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHN0cmVhbU9mKHRleHQpLFxuICAgIHRhZ3M6IFtcInBvc3RzXCJdLFxuICAgIHN0YWxlOiAzMDAsXG4gICAgdGltZXN0YW1wOiBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCksXG4gICAgZXhwaXJlOiAzNjAwLFxuICAgIHJldmFsaWRhdGU6IDkwMCxcbiAgICAuLi5leHRyYSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdGV4dE9mKHJlc3VsdDogQ2FjaGVFbnRyeSB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gcmVzdWx0XG4gICAgPyBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYXdhaXQgcmVhZFN0cmVhbShyZXN1bHQudmFsdWUpKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEhvbGQgZXZlcnkgcmV2YWxpZGF0aW9uIGxvZyBgUXVlcnlgIHVudGlsIGByZWxlYXNlYDsgYHJlc3RvcmVgIHB1dHMgdGhlXG4gKiB0YWJsZSBiYWNrIGFzIGl0IHdhcy5cbiAqL1xuZnVuY3Rpb24gaG9sZFF1ZXJpZXMoKSB7XG4gIGxldCByZWxlYXNlITogKCkgPT4gdm9pZDtcbiAgY29uc3QgaGVsZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiAocmVsZWFzZSA9IHJlc29sdmUpKTtcbiAgY29uc3Qgc2VuZCA9IGR5bmFtb1NlbmQuZ2V0TW9ja0ltcGxlbWVudGF0aW9uKCkhO1xuICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoY29tbWFuZCkgPT4ge1xuICAgIGlmIChjb21tYW5kIGluc3RhbmNlb2YgUXVlcnlDb21tYW5kKSB7XG4gICAgICBhd2FpdCBoZWxkO1xuICAgIH1cbiAgICByZXR1cm4gc2VuZChjb21tYW5kKTtcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgcmVsZWFzZSxcbiAgICByZXN0b3JlOiAoKSA9PiB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihzZW5kKTtcbiAgICB9LFxuICB9O1xufVxuXG4vKiogV2hldGhlciBgcHJvbWlzZWAgaXMgc3RpbGwgcGVuZGluZyBvbmNlIHBlbmRpbmcgSS9PIGhhcyBoYWQgYSB0dXJuLiAqL1xuYXN5bmMgZnVuY3Rpb24gcGVuZGluZyhwcm9taXNlOiBQcm9taXNlPHVua25vd24+KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxldCBzZXR0bGVkID0gZmFsc2U7XG4gIHZvaWQgcHJvbWlzZS5maW5hbGx5KCgpID0+IChzZXR0bGVkID0gdHJ1ZSkpO1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgcmV0dXJuICFzZXR0bGVkO1xufVxuXG4vKiogQSByZXF1ZXN0J3Mgd29ydGggb2Ygd2hhdCBOZXh0LmpzIGRvZXMgYmVmb3JlIHJlYWRpbmcgYW4gZW50cnkuICovXG5hc3luYyBmdW5jdGlvbiByZWFkKGhhbmRsZXI6IENhY2hlSGFuZGxlciwga2V5OiBzdHJpbmcpIHtcbiAgYXdhaXQgaGFuZGxlci5yZWZyZXNoVGFncygpO1xuICByZXR1cm4gdGV4dE9mKGF3YWl0IGhhbmRsZXIuZ2V0KGtleSwgW10pKTtcbn1cblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIG9iamVjdHMuY2xlYXIoKTtcbiAgcm93cy5jbGVhcigpO1xuICBsb2dSb3dzLmNsZWFyKCk7XG59KTtcblxuZGVzY3JpYmUoXCJjYWNoZUhhbmRsZXJzLnJlbW90ZVwiLCAoKSA9PiB7XG4gIGl0KFwiYW5zd2VycyBldmVyeSBpbnN0YW5jZSBmcm9tIHRoZSBlbnRyeSBhbnkgb25lIG9mIHRoZW0gc3RvcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBjb25zdCBiID0gcmVtb3RlSW5zdGFuY2UoKTtcblxuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJmcm9tLWFcIikpKTtcblxuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcImZyb20tYVwiKTtcbiAgICBleHBlY3QoQXJyYXkuZnJvbShvYmplY3RzLmtleXMoKSkpLnRvRXF1YWwoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9eYnVpbGRcXC9fdXNlLWNhY2hlXFwvWzAtOWEtZl17NjR9XFwuZW50cnkkLyksXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwic2VydmVzIGEgcmVwZWF0IHJlYWQgZnJvbSBtZW1vcnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGIgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGF3YWl0IHJlbW90ZUluc3RhbmNlKCkuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIpKSk7XG4gICAgYXdhaXQgcmVhZChiLCBcImtcIik7XG4gICAgczNTZW5kLm1vY2tDbGVhcigpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcInZcIik7XG4gICAgZXhwZWN0KHMzQ2FsbHMoR2V0T2JqZWN0Q29tbWFuZCkpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZXhwaXJlcyB0aGUgZW50cnkgb24gZXZlcnkgaW5zdGFuY2Ugd2hlbiBhIHRhZyBpcyByZXZhbGlkYXRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgYXdhaXQgYS5zZXQoXG4gICAgICBcImtcIixcbiAgICAgIFByb21pc2UucmVzb2x2ZShlbnRyeShcIm9sZFwiLCB7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSAtIDEwMDAgfSkpLFxuICAgICk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlKFwib2xkXCIpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcIm9sZFwiKTtcblxuICAgIGF3YWl0IGEudXBkYXRlVGFncyhbXCJwb3N0c1wiXSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChhLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAvLyBBIGZyZXNoIGluc3RhbmNlIHJlYWRpbmcgdGhlIHN0YWxlIG9iamVjdCBmcm9tIFMzIG1pc3NlcyB0b28uXG4gICAgZXhwZWN0KGF3YWl0IHJlYWQocmVtb3RlSW5zdGFuY2UoKSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwid2FpdHMgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBjb25zdCBiID0gcmVtb3RlSW5zdGFuY2UodGFnTWFuaWZlc3QoMTAwMCkpO1xuICAgIGF3YWl0IGEuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJvbGRcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcIm9sZFwiKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0pO1xuXG4gICAgLy8gQW4gZW50cnkgcmVhZCBmcm9tIFMzIG1heSBwcmVkYXRlIHRoZSBpbnN0YW5jZSwgc28gaXRzIHJlZnJlc2ggaXNcbiAgICAvLyB3YWl0ZWQgZm9yIGV2ZW4gd2hpbGUgdGhlIGluc3RhbmNlIGtlZXBzIHVwLlxuICAgIGNvbnN0IG5vdyA9IGplc3Quc3B5T24oRGF0ZSwgXCJub3dcIikubW9ja1JldHVyblZhbHVlKERhdGUubm93KCkgKyAxMDAwKTtcbiAgICBjb25zdCBxdWVyaWVzID0gaG9sZFF1ZXJpZXMoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5zd2VyID0gcmVhZChiLCBcImtcIik7XG4gICAgICBleHBlY3QoYXdhaXQgcGVuZGluZyhhbnN3ZXIpKS50b0JlKHRydWUpO1xuICAgICAgcXVlcmllcy5yZWxlYXNlKCk7XG4gICAgICBleHBlY3QoYXdhaXQgYW5zd2VyKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJpZXMucmVzdG9yZSgpO1xuICAgICAgbm93Lm1vY2tSZXN0b3JlKCk7XG4gICAgfVxuICB9KTtcblxuICBpdChcInNlcnZlcyBhIHByb2ZpbGUtcmV2YWxpZGF0ZWQgZW50cnkgc3RhbGUsIGZvciBOZXh0LmpzIHRvIHJlZ2VuZXJhdGVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGEuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJvbGRcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IGEudXBkYXRlVGFncyhbXCJwb3N0c1wiXSwgeyBleHBpcmU6IDM2MDAgfSk7XG5cbiAgICBjb25zdCBiID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBhd2FpdCBiLnJlZnJlc2hUYWdzKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYi5nZXQoXCJrXCIsIFtdKTtcbiAgICBleHBlY3QocmVzdWx0Py5yZXZhbGlkYXRlKS50b0JlKC0xKTtcbiAgICBleHBlY3QoYXdhaXQgdGV4dE9mKHJlc3VsdCkpLnRvQmUoXCJvbGRcIik7XG4gIH0pO1xuXG4gIGl0KFwicGlja3MgdXAgYW5vdGhlciBpbnN0YW5jZSdzIHJlZ2VuZXJhdGVkIGVudHJ5IG9uY2UgaXRzIG93biBpcyBzdGFsZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgY29uc3QgcGFzdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSAtIDEwXzAwMDtcbiAgICBhd2FpdCBhLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidjFcIiwgeyB0aW1lc3RhbXA6IHBhc3QsIHJldmFsaWRhdGU6IDEgfSkpLFxuICAgICk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlKFwidjFcIik7XG5cbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidjJcIikpKTtcbiAgICAvLyBgYmAncyBtZW1vcnkgY29weSBpcyBwYXN0IGByZXZhbGlkYXRlYCwgc28gUzMgaXMgYXNrZWQgZm9yIGEgbmV3ZXIgb25lLlxuICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZShcInYyXCIpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHNlcnZlIGFuIGVudHJ5IHBhc3QgaXRzIGV4cGlyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGFzdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSAtIDEwXzAwMDtcbiAgICBhd2FpdCByZW1vdGVJbnN0YW5jZSgpLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICBlbnRyeShcInZcIiwgeyB0aW1lc3RhbXA6IHBhc3QsIHJldmFsaWRhdGU6IDEsIGV4cGlyZTogMiB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChyZW1vdGVJbnN0YW5jZSgpLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJtYWtlcyBhIGdldCB3YWl0IGZvciBhIHBlbmRpbmcgc2V0IG9mIHRoZSBzYW1lIGtleVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgbGV0IHJlc29sdmU6ICh2YWx1ZTogQ2FjaGVFbnRyeSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIGNvbnN0IHNldCA9IGEuc2V0KFwia1wiLCBuZXcgUHJvbWlzZSgocikgPT4gKHJlc29sdmUgPSByKSkpO1xuICAgIGNvbnN0IGdldCA9IGEuZ2V0KFwia1wiLCBbXSk7XG4gICAgcmVzb2x2ZShlbnRyeShcInZcIikpO1xuICAgIGV4cGVjdChhd2FpdCB0ZXh0T2YoYXdhaXQgZ2V0KSkudG9CZShcInZcIik7XG4gICAgYXdhaXQgc2V0O1xuICB9KTtcblxuICBpdChcInN0b3JlcyBub3RoaW5nIGZyb20gYSBzdHJlYW0gdGhhdCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGZhaWxpbmcgPSBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgICAgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoWzFdKSk7XG4gICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IEVycm9yKFwicmVuZGVyIGZhaWxlZFwiKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoeyAuLi5lbnRyeShcIlwiKSwgdmFsdWU6IGZhaWxpbmcgfSkpO1xuICAgIGV4cGVjdChvYmplY3RzLnNpemUpLnRvQmUoMCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3Qgc3RvcmUgYW4gZW50cnkgTmV4dC5qcyByZWdlbmVyYXRlcyBvbiBldmVyeSByZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiLCB7IGV4cGlyZTogMCB9KSkpO1xuICAgIGV4cGVjdChvYmplY3RzLnNpemUpLnRvQmUoMCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwibmV2ZXIgc2VydmVzIGFuIG9iamVjdCBzdG9yZWQgZm9yIGFub3RoZXIga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gcmVtb3RlSW5zdGFuY2UoKTtcbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiKSkpO1xuICAgIGNvbnN0IFtrZXldID0gQXJyYXkuZnJvbShvYmplY3RzLmtleXMoKSk7XG4gICAgb2JqZWN0cy5zZXQoa2V5LCBvYmplY3RzLmdldChrZXkpIS5yZXBsYWNlKCdcImtleVwiOlwia1wiJywgJ1wia2V5XCI6XCJvdGhlclwiJykpO1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKHJlbW90ZUluc3RhbmNlKCksIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB3b3JraW5nIGZyb20gbWVtb3J5IHdoZW4gUzMgZmFpbHNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgczNTZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTbG93RG93blwiKSk7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgYXdhaXQgYS5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcInZcIikpKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChhLCBcImtcIikpLnRvQmUoXCJ2XCIpO1xuICAgIHMzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiU2xvd0Rvd25cIikpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKHJlbW90ZUluc3RhbmNlKCksIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiaXMgbWVtb3J5LW9ubHkgd2l0aG91dCBhIGJ1Y2tldFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcih7XG4gICAgICBidWNrZXQ6IG51bGwsXG4gICAgICBidWlsZElkOiBcImJ1aWxkXCIsXG4gICAgICB0YWdzOiB0YWdNYW5pZmVzdCgpLFxuICAgIH0pO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlKFwidlwiKTtcbiAgICBleHBlY3QoczNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcInJlYWRzIGFuIFMzIGVudHJ5J3MgdGFncyBiZWZvcmUgdHJ1c3RpbmcgaXQsIG9uY2UgcGVyIGluc3RhbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByZW1vdGVJbnN0YW5jZSgpLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiKSkpO1xuICAgIGNvbnN0IGIgPSByZW1vdGVJbnN0YW5jZSh0YWdNYW5pZmVzdCg2MF8wMDApKTtcbiAgICBkeW5hbW9TZW5kLm1vY2tDbGVhcigpO1xuICAgIGF3YWl0IHJlYWQoYiwgXCJrXCIpO1xuICAgIGF3YWl0IHJlYWQoYiwgXCJrXCIpO1xuICAgIGV4cGVjdChkeW5hbW9DYWxscyhCYXRjaEdldEl0ZW1Db21tYW5kKSkudG9CZSgxKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJjYWNoZUhhbmRsZXJzLnJlbW90ZSwgYWNyb3NzIGEgcmV2YWxpZGF0aW9uIGJlZm9yZSBhbiBpbnN0YW5jZSBzdGFydGVkXCIsICgpID0+IHtcbiAgYWZ0ZXJFYWNoKCgpID0+IGplc3QucmVzdG9yZUFsbE1vY2tzKCkpO1xuXG4gIC8vIEEgc3RvcmVzIEsxOyBDIHJldmFsaWRhdGVzIGl0cyB0YWc7IEIgc3RhcnRzIGFmdGVyIEMncyBsb2cgcm93IGlzIGJlaGluZFxuICAvLyBpdHMgY3Vyc29yLCBzdG9yZXMgSzIgd2l0aCB0aGUgc2FtZSB0YWcsIHRoZW4gcmVhZHMgSzEgZnJvbSBTMy5cbiAgaXQoXCJkb2VzIG5vdCBzZXJ2ZSBhbiBvbGRlciBTMyBlbnRyeSBhcyBmcmVzaCBhZnRlciBzdG9yaW5nIGEgbmV3ZXIgb25lIHdpdGggaXRzIHRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IHJlbW90ZUluc3RhbmNlKCk7XG4gICAgYXdhaXQgYS5zZXQoXG4gICAgICBcImsxXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiZWZvcmVcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IHJlbW90ZUluc3RhbmNlKCkudXBkYXRlVGFncyhbXCJwb3N0c1wiXSwgeyBleHBpcmU6IDAgfSk7XG5cbiAgICBjb25zdCBsYXRlciA9IERhdGUubm93KCkgKyAxMF8wMDA7XG4gICAgamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUobGF0ZXIpO1xuICAgIGNvbnN0IGIgPSByZW1vdGVJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGIuc2V0KFwiazJcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYWZ0ZXJcIiwgeyB0aW1lc3RhbXA6IGxhdGVyIH0pKSk7XG5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImsxXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrMlwiKSkudG9CZShcImFmdGVyXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImNhY2hlSGFuZGxlcnMuZGVmYXVsdFwiLCAoKSA9PiB7XG4gIGl0KFwia2VlcHMgZW50cmllcyBpbiBlYWNoIGluc3RhbmNlJ3MgbWVtb3J5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlKFwidlwiKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoczNTZW5kKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImV4cGlyZXMgYW4gZW50cnkgb24gYW4gaW5zdGFuY2UgdGhhdCBkaWQgbm90IHJ1biByZXZhbGlkYXRlVGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGNvbnN0IGNyZWF0ZWQgPSB7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSAtIDEwMDAgfTtcbiAgICBhd2FpdCBhLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYVwiLCBjcmVhdGVkKSkpO1xuICAgIGF3YWl0IGIuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIGNyZWF0ZWQpKSk7XG4gICAgLy8gQ3JlYXRlZCBiZWZvcmUgYGJgIHN0YXJ0ZWQsIHNvIGl0cyBmaXJzdCByZWFkIHJlYWRzIHRoZSB0YWcncyBtYXJrZXIsXG4gICAgLy8gb25jZS5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuXG4gICAgLy8gV2hhdCBOZXh0LmpzIGRvZXMgZm9yIGByZXZhbGlkYXRlVGFnYDogYHVwZGF0ZVRhZ3NgIG9uIGV2ZXJ5IGhhbmRsZXIgb2ZcbiAgICAvLyB0aGUgaW5zdGFuY2UgdGhhdCByYW4gaXQgLSBoZXJlLCBgYWAuXG4gICAgYXdhaXQgYS51cGRhdGVUYWdzKFtcInBvc3RzXCJdLCB7IGV4cGlyZTogMCB9KTtcbiAgICBkeW5hbW9TZW5kLm1vY2tDbGVhcigpO1xuXG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYSwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgLy8gYGJgIGxlYXJuZWQgb2YgaXQgZnJvbSB0aGUgbG9nLCBub3QgYnkgcmUtcmVhZGluZyBpdHMgdGFncycgbWFya2Vycy5cbiAgICBleHBlY3QoZHluYW1vQ2FsbHMoUXVlcnlDb21tYW5kKSkudG9CZUdyZWF0ZXJUaGFuKDApO1xuICAgIGV4cGVjdChkeW5hbW9DYWxscyhCYXRjaEdldEl0ZW1Db21tYW5kKSkudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YWl0cyBvbiBubyBtYXJrZXIgcmVhZCB0byBqdWRnZSBhbiBlbnRyeSBzdG9yZWQgc2luY2UgdGhlIGluc3RhbmNlIHN0YXJ0ZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBiVGFncyA9IHRhZ01hbmlmZXN0KCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZShiVGFncyk7XG4gICAgYXdhaXQgYi5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIikpKTtcblxuICAgIC8vIEhvbGQgZXZlcnkgbWFya2VyIHJlYWQ6IE5leHQuanMgYXdhaXRzIGJvdGggYW5zd2VycyBpbnNpZGUgdGhlXG4gICAgLy8gYCd1c2UgY2FjaGUnYCBsb29rdXAsIGFuZCBhIHBhdGggdGhlIGluc3RhbmNlIGhhcyBub3Qgc2VydmVkIGJlZm9yZSBoYXNcbiAgICAvLyBpbXBsaWNpdCB0YWdzIGl0IGhhcyBuZXZlciByZWFkLlxuICAgIGxldCByZWxlYXNlITogKCkgPT4gdm9pZDtcbiAgICBjb25zdCBoZWxkID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IChyZWxlYXNlID0gcmVzb2x2ZSkpO1xuICAgIGNvbnN0IHNlbmQgPSBkeW5hbW9TZW5kLmdldE1vY2tJbXBsZW1lbnRhdGlvbigpITtcbiAgICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihhc3luYyAoY29tbWFuZCkgPT4ge1xuICAgICAgaWYgKGNvbW1hbmQgaW5zdGFuY2VvZiBCYXRjaEdldEl0ZW1Db21tYW5kKSB7XG4gICAgICAgIGF3YWl0IGhlbGQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2VuZChjb21tYW5kKTtcbiAgICB9KTtcbiAgICB0cnkge1xuICAgICAgZXhwZWN0KGF3YWl0IGIuZ2V0RXhwaXJhdGlvbihbXCJfTl9UXy9uZXctcGF0aFwiXSkpLnRvQmUoSW5maW5pdHkpO1xuICAgICAgYXdhaXQgYi5yZWZyZXNoVGFncygpO1xuICAgICAgZXhwZWN0KGF3YWl0IHRleHRPZihhd2FpdCBiLmdldChcImtcIiwgW1wiX05fVF8vbmV3LXBhdGhcIl0pKSkudG9CZShcImJcIik7XG4gICAgICAvLyBTdGlsbCByZWFkLCBpbiB0aGUgYmFja2dyb3VuZCwgc28gdGhlIHRhZ3Mgam9pbiB0aGUgcm9sbGluZyByZS1yZWFkLlxuICAgICAgZXhwZWN0KGR5bmFtb0NhbGxzKEJhdGNoR2V0SXRlbUNvbW1hbmQpKS50b0JlR3JlYXRlclRoYW4oMCk7XG5cbiAgICAgIC8vIEFub3RoZXIgaW5zdGFuY2UncyByZXZhbGlkYXRpb24gc3RpbGwgcmVhY2hlcyBpdCwgdGhyb3VnaCB0aGUgbG9nLlxuICAgICAgYXdhaXQgYS51cGRhdGVUYWdzKFtcInBvc3RzXCJdKTtcbiAgICAgIGF3YWl0IGJUYWdzLnJlZnJlc2goKTtcbiAgICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICByZWxlYXNlKCk7XG4gICAgICBkeW5hbW9TZW5kLm1vY2tJbXBsZW1lbnRhdGlvbihzZW5kKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwicmVhZHMgdGhlIGltcGxpY2l0IHRhZ3MgZmlyc3QgZm9yIGFuIGVudHJ5IG9sZGVyIHRoYW4gdGhlIG1hbmlmZXN0J3Mga25vd2xlZGdlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgYXdhaXQgYi5zZXQoXG4gICAgICBcImtcIixcbiAgICAgIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IGIuc2V0KFwibmV3XCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcIm5ld1wiKSkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgIHJvd3Muc2V0KFwiX05fVF8vb2xkLXBhdGhcIiwge1xuICAgICAgc2s6IHsgUzogXCJfTl9UXy9vbGQtcGF0aFwiIH0sXG4gICAgICByZXZhbGlkYXRlZEF0OiB7IE46IFN0cmluZyhEYXRlLm5vdygpIC0gNTAwKSB9LFxuICAgIH0pO1xuICAgIC8vIEp1ZGdlZCBwZXIgZW50cnk6IHRoZSBuZXcgb25lIGlzIG5vdCBoZWxkIHVwIGJ5IHRoZSBvbGQgb25lLlxuICAgIGR5bmFtb1NlbmQubW9ja0NsZWFyKCk7XG4gICAgZXhwZWN0KGF3YWl0IHRleHRPZihhd2FpdCBiLmdldChcIm5ld1wiLCBbXCJfTl9UXy9uZXctcGF0aFwiXSkpKS50b0JlKFwibmV3XCIpO1xuICAgIGV4cGVjdChhd2FpdCB0ZXh0T2YoYXdhaXQgYi5nZXQoXCJrXCIsIFtcIl9OX1RfL29sZC1wYXRoXCJdKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QoZHluYW1vQ2FsbHMoQmF0Y2hHZXRJdGVtQ29tbWFuZCkpLnRvQmUoMik7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgaG9sZCBhIHJlYWQgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSh0YWdNYW5pZmVzdCgxMDAwKSk7XG4gICAgY29uc3QgY3JlYXRlZCA9IHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9O1xuICAgIGF3YWl0IGIuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIGNyZWF0ZWQpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlKFwiYlwiKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0sIHsgZXhwaXJlOiAwIH0pO1xuXG4gICAgLy8gTmV4dC5qcyBhd2FpdHMgYHJlZnJlc2hUYWdzYCBpbnNpZGUgdGhlIGAndXNlIGNhY2hlJ2AgbG9va3VwLCBzbyBhIHJlYWRcbiAgICAvLyB0aGF0IHdhaXRlZCBmb3IgdGhlIHF1ZXJ5IHdvdWxkIGxlYXZlIHRoZSBzdGF0aWMgc3RhZ2Ugb2YgYSBzdGFnZWRcbiAgICAvLyByZW5kZXIuIFRoaXMgb25lIGFuc3dlcnMgZnJvbSB3aGF0IHRoZSBpbnN0YW5jZSBhbHJlYWR5IGtuZXcuXG4gICAgY29uc3Qgbm93ID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUoRGF0ZS5ub3coKSArIDEwMDApO1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBob2xkUXVlcmllcygpO1xuICAgIHRyeSB7XG4gICAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuICAgICAgZXhwZWN0KGR5bmFtb0NhbGxzKFF1ZXJ5Q29tbWFuZCkpLnRvQmVHcmVhdGVyVGhhbigwKTtcblxuICAgICAgcXVlcmllcy5yZWxlYXNlKCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0SW1tZWRpYXRlKHJlc29sdmUpKTtcbiAgICAgIGV4cGVjdChhd2FpdCByZWFkKGIsIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBxdWVyaWVzLnJlc3RvcmUoKTtcbiAgICAgIG5vdy5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJ3YWl0cyBmb3IgdGhlIHJldmFsaWRhdGlvbiBsb2cgcXVlcnkgYWZ0ZXIgdGhlIGluc3RhbmNlIHNhdCBpZGxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSh0YWdNYW5pZmVzdCgxMDAwKSk7XG4gICAgY29uc3QgY3JlYXRlZCA9IHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9O1xuICAgIGF3YWl0IGIuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIGNyZWF0ZWQpKSk7XG4gICAgZXhwZWN0KGF3YWl0IHJlYWQoYiwgXCJrXCIpKS50b0JlKFwiYlwiKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0sIHsgZXhwaXJlOiAwIH0pO1xuXG4gICAgLy8gTm8gbG9nIHF1ZXJ5IGZvciBsb25nZXIgdGhhbiB0aGUgaW50ZXJ2YWwgcGx1cyB0aGUgZ3JhY2UsIGFzIGZvciBhXG4gICAgLy8gTGFtYmRhIGZyb3plbiBiZXR3ZWVuIGludm9jYXRpb25zLlxuICAgIGNvbnN0IGxhdGVyID0gRGF0ZS5ub3coKSArIDEwMDAgKyBUQUdfUkVGUkVTSF9HUkFDRV9NUyArIDUwMDA7XG4gICAgY29uc3Qgbm93ID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUobGF0ZXIpO1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBob2xkUXVlcmllcygpO1xuICAgIHRyeSB7XG4gICAgICAvLyBBbnN3ZXJlZCBvbmx5IG9uY2UgdGhlIHF1ZXJ5IHJldHVybnMsIGFuZCB0aGVuIHdpdGhvdXQgdGhlIGVudHJ5IHRoZVxuICAgICAgLy8gb3RoZXIgaW5zdGFuY2UgcmV2YWxpZGF0ZWQgd2hpbGUgdGhpcyBvbmUgc2F0IGlkbGUuXG4gICAgICBjb25zdCBhbnN3ZXIgPSByZWFkKGIsIFwia1wiKTtcbiAgICAgIGV4cGVjdChhd2FpdCBwZW5kaW5nKGFuc3dlcikpLnRvQmUodHJ1ZSk7XG4gICAgICBxdWVyaWVzLnJlbGVhc2UoKTtcbiAgICAgIGV4cGVjdChhd2FpdCBhbnN3ZXIpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllcy5yZXN0b3JlKCk7XG4gICAgICBub3cubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHJldmFsaWRhdGlvbiBsb2cgcXVlcnksIGlkbGUsIHdoaWxlIGl0IGhvbGRzIG5vIGVudHJpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGIgPSBkZWZhdWx0SW5zdGFuY2UodGFnTWFuaWZlc3QoMTAwMCkpO1xuXG4gICAgLy8gQXMgZm9yIHRoZSBmaXJzdCBgJ3VzZSBjYWNoZSdgIGNhbGwgb2YgYSBwcm9jZXNzLCB3aGljaCBjcmVhdGVzIHRoZVxuICAgIC8vIGhhbmRsZXIgaW5zaWRlIHRoZSByZW5kZXI6IG5vdGhpbmcgaGVsZCwgc28gbm90aGluZyB0aGUgcXVlcnkgY291bGRcbiAgICAvLyBleHBpcmUuXG4gICAgY29uc3QgbGF0ZXIgPSBEYXRlLm5vdygpICsgMTAwMCArIFRBR19SRUZSRVNIX0dSQUNFX01TICsgNTAwMDtcbiAgICBjb25zdCBub3cgPSBqZXN0LnNweU9uKERhdGUsIFwibm93XCIpLm1vY2tSZXR1cm5WYWx1ZShsYXRlcik7XG4gICAgY29uc3QgcXVlcmllcyA9IGhvbGRRdWVyaWVzKCk7XG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdChhd2FpdCBwZW5kaW5nKGIucmVmcmVzaFRhZ3MoKSkpLnRvQmUoZmFsc2UpO1xuICAgICAgZXhwZWN0KGR5bmFtb0NhbGxzKFF1ZXJ5Q29tbWFuZCkpLnRvQmVHcmVhdGVyVGhhbigwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllcy5yZXN0b3JlKCk7XG4gICAgICBub3cubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3Qgd2FpdCBmb3IgdGhlIHJldmFsaWRhdGlvbiBsb2cgcXVlcnksIGlkbGUsIHdoaWxlIGl0IGhvbGRzIG9ubHkgZXhwaXJlZCBlbnRyaWVzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKHRhZ01hbmlmZXN0KDEwMDApKTtcbiAgICBjb25zdCBjcmVhdGVkID0gcGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBlcmZvcm1hbmNlLm5vdygpIC0gNTAwMDtcbiAgICBhd2FpdCBiLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYlwiLCB7IHRpbWVzdGFtcDogY3JlYXRlZCwgcmV2YWxpZGF0ZTogMSB9KSksXG4gICAgKTtcblxuICAgIGNvbnN0IGxhdGVyID0gRGF0ZS5ub3coKSArIDEwMDAgKyBUQUdfUkVGUkVTSF9HUkFDRV9NUyArIDUwMDA7XG4gICAgY29uc3Qgbm93ID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrUmV0dXJuVmFsdWUobGF0ZXIpO1xuICAgIGNvbnN0IHF1ZXJpZXMgPSBob2xkUXVlcmllcygpO1xuICAgIHRyeSB7XG4gICAgICAvLyBgZ2V0YCB3b3VsZCBkcm9wIGl0OiBub3RoaW5nIHRoZSBxdWVyeSBjb3VsZCBleHBpcmUuXG4gICAgICBleHBlY3QoYXdhaXQgcGVuZGluZyhiLnJlZnJlc2hUYWdzKCkpKS50b0JlKGZhbHNlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgcXVlcmllcy5yZXN0b3JlKCk7XG4gICAgICBub3cubW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwid2FpdHMgZm9yIHRoZSByZXZhbGlkYXRpb24gbG9nIHF1ZXJ5IHdoZW4gdG9sZCB0byBhc2sgb24gZXZlcnkgY2hlY2tcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKHRhZ01hbmlmZXN0KDApKTtcbiAgICBjb25zdCBjcmVhdGVkID0geyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH07XG4gICAgYXdhaXQgYi5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIiwgY3JlYXRlZCkpKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuICAgIGF3YWl0IGEudXBkYXRlVGFncyhbXCJwb3N0c1wiXSwgeyBleHBpcmU6IDAgfSk7XG5cbiAgICBjb25zdCBxdWVyaWVzID0gaG9sZFF1ZXJpZXMoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5zd2VyID0gcmVhZChiLCBcImtcIik7XG4gICAgICBleHBlY3QoYXdhaXQgcGVuZGluZyhhbnN3ZXIpKS50b0JlKHRydWUpO1xuICAgICAgcXVlcmllcy5yZWxlYXNlKCk7XG4gICAgICBleHBlY3QoYXdhaXQgYW5zd2VyKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHF1ZXJpZXMucmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBhbiBlbnRyeSdzIHRhZ3MgYXMgaXQgc3RvcmVzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBiID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgZHluYW1vU2VuZC5tb2NrQ2xlYXIoKTtcbiAgICBhd2FpdCBiLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYlwiLCB7IHRhZ3M6IFtcInBvc3RzXCJdIH0pKSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldEltbWVkaWF0ZShyZXNvbHZlKSk7XG4gICAgZXhwZWN0KGR5bmFtb0NhbGxzKEJhdGNoR2V0SXRlbUNvbW1hbmQpKS50b0JlKDEpO1xuICB9KTtcblxuICBpdChcImV4cGlyZXMgYW4gZW50cnkgc3RvcmVkIGFmdGVyIGEgcmV2YWxpZGF0aW9uIHdob3NlIGV4cGlyZSBpdCBvdXRsaXZlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gUmV2YWxpZGF0ZWQgd2l0aCBhIHByb2ZpbGUgYmVmb3JlIGBiYCBzdGFydGVkLCBvdXRzaWRlIGl0cyBsb2cncyBmaXJzdFxuICAgIC8vIGxvb2tiYWNrOiB0aGUgbWFya2VyIGFsb25lIGtub3dzIHRoZSBlbnRyeSBleHBpcmVzLlxuICAgIGNvbnN0IGV4cGlyZWRBdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSArIDYwXzAwMDtcbiAgICByb3dzLnNldChcInBvc3RzXCIsIHtcbiAgICAgIHNrOiB7IFM6IFwicG9zdHNcIiB9LFxuICAgICAgc3RhbGVBdDogeyBOOiBTdHJpbmcoZXhwaXJlZEF0IC0gMTIwXzAwMCkgfSxcbiAgICAgIGV4cGlyZWRBdDogeyBOOiBTdHJpbmcoZXhwaXJlZEF0KSB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGIgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBhd2FpdCBiLnNldChcImtcIiwgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwiYlwiKSkpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgIGNvbnN0IGNsb2NrID0gamVzdFxuICAgICAgLnNweU9uKHBlcmZvcm1hbmNlLCBcIm5vd1wiKVxuICAgICAgLm1vY2tSZXR1cm5WYWx1ZShleHBpcmVkQXQgLSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgMSk7XG4gICAgdHJ5IHtcbiAgICAgIGV4cGVjdChhd2FpdCB0ZXh0T2YoYXdhaXQgYi5nZXQoXCJrXCIsIFtdKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xvY2subW9ja1Jlc3RvcmUoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KFwid2FpdHMgZm9yIHRoZSByZWZyZXNoIGludGVydmFsIGJlZm9yZSByZS1yZWFkaW5nIHRhZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGIgPSBkZWZhdWx0SW5zdGFuY2UodGFnTWFuaWZlc3QoNjBfMDAwKSk7XG4gICAgYXdhaXQgYi5zZXQoXG4gICAgICBcImtcIixcbiAgICAgIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIiwgeyB0aW1lc3RhbXA6IERhdGUubm93KCkgLSAxMDAwIH0pKSxcbiAgICApO1xuICAgIGF3YWl0IHJlYWQoYiwgXCJrXCIpO1xuICAgIGF3YWl0IGRlZmF1bHRJbnN0YW5jZSgpLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0pO1xuICAgIGR5bmFtb1NlbmQubW9ja0NsZWFyKCk7XG5cbiAgICAvLyBJbnNpZGUgdGhlIHdpbmRvdzogc3RpbGwgc2VydmVkLCBhbmQgbm8gcmVhZCBzcGVudCBvbiBpdC5cbiAgICBleHBlY3QoYXdhaXQgcmVhZChiLCBcImtcIikpLnRvQmUoXCJiXCIpO1xuICAgIGV4cGVjdChkeW5hbW9DYWxscyhCYXRjaEdldEl0ZW1Db21tYW5kKSkudG9CZSgwKTtcbiAgICBleHBlY3QoZHluYW1vQ2FsbHMoUXVlcnlDb21tYW5kKSkudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoXCJkcm9wcyBhbiBlbnRyeSBwYXN0IHJldmFsaWRhdGUsIGFzIE5leHQuanMncyBpbi1tZW1vcnkgaGFuZGxlciBkb2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgcGFzdCA9IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSAtIDEwXzAwMDtcbiAgICBhd2FpdCBhLnNldChcbiAgICAgIFwia1wiLFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKGVudHJ5KFwidlwiLCB7IHRpbWVzdGFtcDogcGFzdCwgcmV2YWxpZGF0ZTogMSB9KSksXG4gICAgKTtcbiAgICBleHBlY3QoYXdhaXQgcmVhZChhLCBcImtcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIHN0YWxlIHRhZ3MgYXMgcmV2YWxpZGF0ZSAtMVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYSA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGEuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJ2XCIsIHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9KSksXG4gICAgKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wicG9zdHNcIl0sIHsgZXhwaXJlOiAzNjAwIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGEuZ2V0KFwia1wiLCBbXSk7XG4gICAgZXhwZWN0KHJlc3VsdD8ucmV2YWxpZGF0ZSkudG9CZSgtMSk7XG4gIH0pO1xuXG4gIGl0KFwiZXhwaXJlcyBhbiBlbnRyeSBieSBhbm90aGVyIGluc3RhbmNlJ3MgcmV2YWxpZGF0ZVBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBkZWZhdWx0SW5zdGFuY2UoKTtcbiAgICBjb25zdCBiVGFncyA9IHRhZ01hbmlmZXN0KCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZShiVGFncyk7XG4gICAgYXdhaXQgYi5zZXQoXCJrXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcImJcIikpKTtcbiAgICBhd2FpdCBiLnNldChcIm90aGVyXCIsIFByb21pc2UucmVzb2x2ZShlbnRyeShcIm90aGVyXCIpKSk7XG4gICAgYXdhaXQgYS51cGRhdGVUYWdzKFtcIl9OX1RfL2Jsb2cvbGF5b3V0XCJdKTtcbiAgICAvLyBGcm9tIHRoZSBsb2csIGFzIHNvb24gYXMgYGJgIGhhcyByZWFkIGl0LlxuICAgIGF3YWl0IGJUYWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYXdhaXQgdGV4dE9mKGF3YWl0IGIuZ2V0KFwib3RoZXJcIiwgW1wiX05fVF8vb3RoZXJcIl0pKSkudG9CZShcIm90aGVyXCIpO1xuICAgIGV4cGVjdChcbiAgICAgIGF3YWl0IHRleHRPZihhd2FpdCBiLmdldChcImtcIiwgW1wiX05fVF8vXCIsIFwiX05fVF8vYmxvZy9sYXlvdXRcIl0pKSxcbiAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBleHBpcmUgYW4gZW50cnkgYnkgYW4gaW1wbGljaXQgdGFnIG1hcmtlZCBvbmx5IHN0YWxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgYiA9IGRlZmF1bHRJbnN0YW5jZSgpO1xuICAgIGF3YWl0IGIuc2V0KFxuICAgICAgXCJrXCIsXG4gICAgICBQcm9taXNlLnJlc29sdmUoZW50cnkoXCJiXCIsIHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIC0gMTAwMCB9KSksXG4gICAgKTtcbiAgICBhd2FpdCBhLnVwZGF0ZVRhZ3MoW1wiX05fVF8vYmxvZ1wiXSwgeyBleHBpcmU6IDM2MDAgfSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYi5nZXQoXCJrXCIsIFtcIl9OX1RfL2Jsb2dcIl0pO1xuICAgIGV4cGVjdChyZXN1bHQ/LnJldmFsaWRhdGUpLnRvQmUoOTAwKTtcbiAgfSk7XG5cbiAgaXQoXCJzdG9yZXMgbm90aGluZyBmcm9tIGEgc3RyZWFtIHRoYXQgZXJyb3JzLCBhbmQgcmVsZWFzZXMgdGhlIHBlbmRpbmcgZ2V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBhID0gZGVmYXVsdEluc3RhbmNlKCk7XG4gICAgY29uc3QgZmFpbGluZyA9IG5ldyBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5Pih7XG4gICAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IEVycm9yKFwicmVuZGVyIGZhaWxlZFwiKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGF3YWl0IGEuc2V0KFwia1wiLCBQcm9taXNlLnJlc29sdmUoeyAuLi5lbnRyeShcIlwiKSwgdmFsdWU6IGZhaWxpbmcgfSkpO1xuICAgIGV4cGVjdChhd2FpdCByZWFkKGEsIFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuIl19
@@ -1,4 +1,4 @@
1
- import type { CacheHandler } from "next/dist/server/lib/cache-handlers/types";
1
+ import type { CacheHandler } from "next/cache";
2
2
  import { CacheBucket, TrackedTagMarkers } from "./aws-cache-store";
3
3
  export interface RemoteUseCacheHandlerOptions {
4
4
  /**
@@ -184,4 +184,4 @@ function createRemoteUseCacheHandler(options = {}) {
184
184
  };
185
185
  }
186
186
  exports.default = (0, use_cache_common_1.lazyHandler)(() => createRemoteUseCacheHandler());
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBNEZBLGtFQWdLQztBQTVQRDs7Ozs7Ozs7OztFQVVFO0FBQ0Ysc0RBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxrREFBNkI7QUFLN0IsdURBSzJCO0FBQzNCLCtDQUFnRjtBQUNoRix5REFlNEI7QUFxQjVCLFNBQVMsYUFBYTtJQUNwQixJQUFJLElBQUEsK0JBQVksR0FBRSxFQUFFLENBQUM7UUFDbkIsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsdUNBQXFCLEdBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtSEFBbUgsQ0FDcEgsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sSUFBSSw2QkFBVyxDQUFDLElBQUksb0JBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxTQUFTLFlBQVksQ0FBQyxNQUFtQixFQUFFLEVBQVU7SUFDbkQsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQ3pDLFVBQXdDLEVBQUU7SUFFMUMsTUFBTSxNQUFNLEdBQ1YsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMs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IGZvciBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AuXG4gIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvY29uZmlnL25leHQtY29uZmlnLWpzL2NhY2hlSGFuZGxlcnNcblxuICBFbnRyaWVzIGFyZSBzdG9yZWQgaW4gdGhlIGNhY2hlIGJ1Y2tldCwgc28gZXZlcnkgaW5zdGFuY2UgcmVhZHMgd2hhdCBhbnlcbiAgaW5zdGFuY2Ugd3JvdGUsIHdpdGggYSBib3VuZGVkIGluLW1lbW9yeSB0aWVyIGluIGZyb250LiBUYWdzIGdvIHRocm91Z2ggdGhlXG4gIHJldmFsaWRhdGlvbiB0YWJsZSdzIG1hcmtlciByb3dzLCBzaGFyZWQgd2l0aCBwbGFpbiBgJ3VzZSBjYWNoZSdgIGFuZCB3aXRoIHRoZVxuICBpbmNyZW1lbnRhbCBjYWNoZS4gV2l0aG91dCB0aGlzLCBOZXh0LmpzIG1hcHMgYHJlbW90ZWAgdG8gaXRzIGluLW1lbW9yeVxuICBkZWZhdWx0IGhhbmRsZXIsIGFuZCBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AgaXMgbm8gbW9yZSBzaGFyZWQgdGhhblxuICBgJ3VzZSBjYWNoZSdgLlxuKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgdHlwZSB7XG4gIENhY2hlRW50cnksXG4gIENhY2hlSGFuZGxlcixcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2NhY2hlLWhhbmRsZXJzL3R5cGVzXCI7XG5pbXBvcnQge1xuICBDYWNoZUJ1Y2tldCxcbiAgcmVzb2x2ZUF3c0NhY2hlQ29uZmlnLFxuICBUcmFja2VkVGFnTWFya2VycyxcbiAgdXNlQ2FjaGVTM0tleSxcbn0gZnJvbSBcIi4vYXdzLWNhY2hlLXN0b3JlXCI7XG5pbXBvcnQgeyBwYXJzZUNhY2hlVmFsdWUsIHNlcmlhbGl6ZUNhY2hlVmFsdWUsIHNoYTI1NkhleCB9IGZyb20gXCIuL2NhY2hlLXV0aWxzXCI7XG5pbXBvcnQge1xuICBjYWNoZUVudHJ5T2YsXG4gIERFRkFVTFRfTUVNT1JZX0JZVEVTLFxuICBFbnRyeUxydSxcbiAgaXNCdWlsZFBoYXNlLFxuICBpc0R5bmFtaWNFbnRyeSxcbiAgaXNQYXN0UmV2YWxpZGF0ZSxcbiAgbGF6eUhhbmRsZXIsXG4gIG5vdyxcbiAgbnVtYmVyRnJvbUVudixcbiAgUGVuZGluZ1NldHMsXG4gIHNoYXJlZFRhZ01hbmlmZXN0LFxuICBTdG9yZWRFbnRyeSxcbiAgc3RvcmVkRW50cnlPZixcbiAgdGFnTWV0aG9kcyxcbn0gZnJvbSBcIi4vdXNlLWNhY2hlLWNvbW1vblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVVzZUNhY2hlSGFuZGxlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4sIG9yIGBudWxsYCBmb3IgbWVtb3J5IG9ubHkuIEZyb21cbiAgICogYENES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUVgIGJ5IGRlZmF1bHQsIGFuZCBuZXZlciBhdCBidWlsZCB0aW1lLlxuICAgKi9cbiAgYnVja2V0PzogQ2FjaGVCdWNrZXQgfCBudWxsO1xuICAvKiogUHJlZml4ZXMgZXZlcnkgUzMga2V5OyBgQ0RLX05FWFRKU19CVUlMRF9JRGAgYnkgZGVmYXVsdC4gKi9cbiAgYnVpbGRJZD86IHN0cmluZztcbiAgLyoqIFRhZyBzdGF0ZTsgdGhlIHByb2Nlc3Mtd2lkZSBvbmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgYnkgZGVmYXVsdC4gKi9cbiAgdGFncz86IFRyYWNrZWRUYWdNYXJrZXJzO1xufVxuXG4vKiogV2hhdCBpcyB3cml0dGVuIHRvIFMzIGZvciBvbmUgZW50cnkuICovXG5pbnRlcmZhY2UgU2VyaWFsaXplZEVudHJ5IGV4dGVuZHMgT21pdDxTdG9yZWRFbnRyeSwgXCJ2YWx1ZVwiPiB7XG4gIC8qKiBUaGUgZnVsbCBjYWNoZSBrZXksIGNoZWNrZWQgb24gcmVhZDsgdGhlIG9iamVjdCBrZXkgaXMgb25seSBpdHMgaGFzaC4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIGJ1Y2tldEZyb21FbnYoKTogQ2FjaGVCdWNrZXQgfCBudWxsIHtcbiAgaWYgKGlzQnVpbGRQaGFzZSgpKSB7XG4gICAgLy8gTm8gY3JlZGVudGlhbHMsIGFuZCBub3RoaW5nIGEgYnVpbGQtdGltZSBlbnRyeSBjb3VsZCBiZSByZWFkIGJhY2sgYnk6XG4gICAgLy8gcHJlcmVuZGVycyBrZWVwIHdoYXQgdGhleSBuZWVkIGluIHRoZWlyIG93biByZXN1bWUgZGF0YSBjYWNoZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7IGJ1Y2tldE5hbWUsIHJlZ2lvbiB9ID0gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCk7XG4gIGlmICghYnVja2V0TmFtZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJpZXMgYXJlIGxvY2FsIHRvIGVhY2ggaW5zdGFuY2VcIixcbiAgICApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQ2FjaGVCdWNrZXQobmV3IFMzQ2xpZW50KHsgcmVnaW9uIH0pLCBidWNrZXROYW1lKTtcbn1cblxuLyoqIFdoZXRoZXIgYHN0b3JlZGAgaXMgcGFzdCBgZXhwaXJlYCwgYW5kIG1heSBubyBsb25nZXIgYmUgc2VydmVkIGF0IGFsbC4gKi9cbmZ1bmN0aW9uIGlzUGFzdEV4cGlyZShzdG9yZWQ6IFN0b3JlZEVudHJ5LCBhdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdCA+IHN0b3JlZC50aW1lc3RhbXAgKyBzdG9yZWQuZXhwaXJlICogMTAwMDtcbn1cblxuLyoqXG4gKiBBIGAndXNlIGNhY2hlOiByZW1vdGUnYCBoYW5kbGVyOiBTMyBmb3Igc3RvcmFnZSwgbWVtb3J5IGluIGZyb250LCBhbmQgdGhlXG4gKiByZXZhbGlkYXRpb24gdGFibGUgZm9yIHRhZ3MuXG4gKlxuICogVW5saWtlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW4gZW50cnkgaXMgc2VydmVkIHVudGlsIGBleHBpcmVgLCBub3QgZHJvcHBlZCBhdFxuICogYHJldmFsaWRhdGVgOiBhIHJlbW90ZSByZWFkIGlzIHdvcnRoIHNlcnZpbmcgc3RhbGUgd2hpbGUgTmV4dC5qcydzIHdyYXBwZXJcbiAqIHJlZ2VuZXJhdGVzIGl0IGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBpcyB3aGF0IGByZXZhbGlkYXRlYCBpcyBmb3IuIEEgbWVtb3J5XG4gKiBjb3B5IHBhc3QgYHJldmFsaWRhdGVgIGlzIGNoZWNrZWQgYWdhaW5zdCBTMyBmaXJzdCwgc2luY2UgYW5vdGhlciBpbnN0YW5jZSBtYXlcbiAqIGFscmVhZHkgaGF2ZSB3cml0dGVuIHRoZSByZWdlbmVyYXRlZCBlbnRyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcihcbiAgb3B0aW9uczogUmVtb3RlVXNlQ2FjaGVIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKTogQ2FjaGVIYW5kbGVyIHtcbiAgY29uc3QgYnVja2V0ID1cbiAgICBvcHRpb25zLmJ1Y2tldCA9PT0gdW5kZWZpbmVkID8gYnVja2V0RnJvbUVudigpIDogb3B0aW9ucy5idWNrZXQ7XG4gIGNvbnN0IGJ1aWxkSWQgPSBvcHRpb25zLmJ1aWxkSWQgPz8gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCkuYnVpbGRJZDtcbiAgY29uc3QgdGFncyA9IG9wdGlvbnMudGFncyA/PyBzaGFyZWRUYWdNYW5pZmVzdCgpO1xuICBjb25zdCBtZW1vcnkgPSBuZXcgRW50cnlMcnUoXG4gICAgbnVtYmVyRnJvbUVudihcIkNES19ORVhUSlNfVVNFX0NBQ0hFX01FTU9SWV9CWVRFU1wiLCBERUZBVUxUX01FTU9SWV9CWVRFUyksXG4gICk7XG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgUGVuZGluZ1NldHMoKTtcbiAgY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6Y2FjaGUtaGFuZGxlcjp1c2UtY2FjaGU6cmVtb3RlXCIpO1xuXG4gIGNvbnN0IHMzS2V5ID0gKGNhY2hlS2V5OiBzdHJpbmcpID0+XG4gICAgdXNlQ2FjaGVTM0tleShidWlsZElkLCBzaGEyNTZIZXgoY2FjaGVLZXkpKTtcblxuICBhc3luYyBmdW5jdGlvbiByZWFkRnJvbVMzKFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICk6IFByb21pc2U8U3RvcmVkRW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gczNLZXkoY2FjaGVLZXkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmplY3QgPSBhd2FpdCBidWNrZXQuZ2V0KGtleSk7XG4gICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICBkZWJ1ZyhgUzMgTUlTUyAke2NhY2hlS2V5fWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDYWNoZVZhbHVlKG9iamVjdCkgYXMgU2VyaWFsaXplZEVudHJ5O1xuICAgICAgaWYgKHBhcnNlZC5rZXkgIT09IGNhY2hlS2V5KSB7XG4gICAgICAgIC8vIEEgaGFzaCBjb2xsaXNpb24sIG9yIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvdXJzOiBuZXZlciBzZXJ2ZSBpdC5cbiAgICAgICAgY29uc29sZS53YXJuKGAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSBpcyBmb3IgYW5vdGhlciBrZXlgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZ3M6IHBhcnNlZC50YWdzLFxuICAgICAgICBzdGFsZTogcGFyc2VkLnN0YWxlLFxuICAgICAgICB0aW1lc3RhbXA6IHBhcnNlZC50aW1lc3RhbXAsXG4gICAgICAgIGV4cGlyZTogcGFyc2VkLmV4cGlyZSxcbiAgICAgICAgcmV2YWxpZGF0ZTogcGFyc2VkLnJldmFsaWRhdGUsXG4gICAgICAgIHZhbHVlOiBuZXcgVWludDhBcnJheShwYXJzZWQudmFsdWUpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEVycm9yIHJlYWRpbmcgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gZnJvbSBTMzpgLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlVG9TMyhjYWNoZUtleTogc3RyaW5nLCBzdG9yZWQ6IFN0b3JlZEVudHJ5KSB7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gczNLZXkoY2FjaGVLZXkpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRFbnRyeSA9IHtcbiAgICAgIC4uLnN0b3JlZCxcbiAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICB2YWx1ZTogQnVmZmVyLmZyb20oc3RvcmVkLnZhbHVlKSxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBidWNrZXQucHV0SnNvbihrZXksIHNlcmlhbGl6ZUNhY2hlVmFsdWUoc2VyaWFsaXplZCkpO1xuICAgICAgZGVidWcoYFMzIFNFVCAke2NhY2hlS2V5fSAoJHtrZXl9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGUgZW50cnkgaXMgc3RpbGwgaW4gbWVtb3J5IGhlcmU7IG90aGVyIGluc3RhbmNlcyBqdXN0IG1pc3MuXG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3Igd3JpdGluZyAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSB0byBTMzpgLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXQoY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgYXdhaXQgcGVuZGluZy53YWl0KGNhY2hlS2V5KTtcbiAgICAgIGNvbnN0IGF0ID0gbm93KCk7XG5cbiAgICAgIGxldCBzdG9yZWQgPSBtZW1vcnkuZ2V0KGNhY2hlS2V5KTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgYXdhaXQgdGFncy5lbnN1cmUoc3RvcmVkLnRhZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXN0IGByZXZhbGlkYXRlYCwgb3Igc3RhbGUgb3IgZXhwaXJlZCBieSB0YWc6IGFub3RoZXIgaW5zdGFuY2UgbWF5XG4gICAgICAvLyBhbHJlYWR5IGhhdmUgd3JpdHRlbiB0aGUgcmVnZW5lcmF0ZWQgZW50cnksIGFuZCBzZXJ2aW5nIHRoYXQgYmVhdHNcbiAgICAgIC8vIHJlZ2VuZXJhdGluZyBpdCBoZXJlIHRvby4gQW4gZXhwaXJlZCBlbnRyeSBTMyBoYXMgbm90aGluZyBuZXdlciBmb3IgaXNcbiAgICAgIC8vIGRyb3BwZWQgYmVsb3cuXG4gICAgICBpZiAoXG4gICAgICAgICFzdG9yZWQgfHxcbiAgICAgICAgaXNQYXN0UmV2YWxpZGF0ZShzdG9yZWQsIGF0KSB8fFxuICAgICAgICB0YWdzLnN0YXRlKHN0b3JlZC50YWdzLCBzdG9yZWQudGltZXN0YW1wKSAhPT0gXCJmcmVzaFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZnJvbVMzID0gYXdhaXQgcmVhZEZyb21TMyhjYWNoZUtleSk7XG4gICAgICAgIGlmIChmcm9tUzMgJiYgKCFzdG9yZWQgfHwgZnJvbVMzLnRpbWVzdGFtcCA+IHN0b3JlZC50aW1lc3RhbXApKSB7XG4gICAgICAgICAgc3RvcmVkID0gZnJvbVMzO1xuICAgICAgICAgIC8vIEFuIGVudHJ5IHdyaXR0ZW4gYnkgYW5vdGhlciBpbnN0YW5jZTogaXRzIHRhZ3MgbWF5IGhhdmUgYmVlblxuICAgICAgICAgIC8vIHJldmFsaWRhdGVkIGF0IGFueSB0aW1lIHNpbmNlLCBzbyB0aGV5IGFyZSByZWFkIGJlZm9yZSBqdWRnaW5nIGl0LlxuICAgICAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKHN0b3JlZC50YWdzKTtcbiAgICAgICAgICBtZW1vcnkuc2V0KGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RvcmVkKSB7XG4gICAgICAgIGRlYnVnKGBNSVNTICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYXN0RXhwaXJlKHN0b3JlZCwgYXQpKSB7XG4gICAgICAgIGRlYnVnKGBFWFBJUkVEICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIG1lbW9yeS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdGUgPSB0YWdzLnN0YXRlKHN0b3JlZC50YWdzLCBzdG9yZWQudGltZXN0YW1wKTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJleHBpcmVkXCIpIHtcbiAgICAgICAgZGVidWcoYEVYUElSRUQgQlkgVEFHICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIG1lbW9yeS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgZGVidWcoYEhJVCAke2NhY2hlS2V5fSR7c3RhdGUgPT09IFwic3RhbGVcIiA/IFwiIChzdGFsZSB0YWcpXCIgOiBcIlwifWApO1xuICAgICAgLy8gYHJldmFsaWRhdGU6IC0xYCBtYWtlcyB0aGUgd3JhcHBlciBzZXJ2ZSB0aGUgZW50cnkgYW5kIHJlZ2VuZXJhdGUgaXQgaW5cbiAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kLCB0aGUgYnVpbHQtaW4gaGFuZGxlcidzIGFuc3dlciB0byBhIHN0YWxlIHRhZy5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5T2Yoc3RvcmVkLCBzdGF0ZSA9PT0gXCJzdGFsZVwiID8gLTEgOiBzdG9yZWQucmV2YWxpZGF0ZSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNldChcbiAgICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgICBwZW5kaW5nRW50cnk6IFByb21pc2U8Q2FjaGVFbnRyeT4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBkb25lID0gcGVuZGluZy5iZWdpbihjYWNoZUtleSk7XG4gICAgICBsZXQgc3RvcmVkOiBTdG9yZWRFbnRyeTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0b3JlZCA9IGF3YWl0IHN0b3JlZEVudHJ5T2YocGVuZGluZ0VudHJ5KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFRoZSBzdHJlYW0gZXJyb3JlZDogc3RvcmUgbm90aGluZyByYXRoZXIgdGhhbiBhIHBhcnRpYWwgZW50cnkuXG4gICAgICAgIGRlYnVnKGBTRVQgRkFJTEVEICR7Y2FjaGVLZXl9YCwgZXJyb3IpO1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc0R5bmFtaWNFbnRyeShzdG9yZWQpKSB7XG4gICAgICAgIGRlYnVnKGBTS0lQIGR5bmFtaWMgZW50cnkgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZW1vcnkuc2V0KGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgICAgdGFncy50cmFjayhzdG9yZWQudGFncyk7XG4gICAgICAvLyBBIGBnZXRgIHdhaXRpbmcgb24gdGhpcyBgc2V0YCBjYW4gYmUgYW5zd2VyZWQgZnJvbSBtZW1vcnkgbm93OyBvbmx5XG4gICAgICAvLyBvdGhlciBpbnN0YW5jZXMgbmVlZCB0aGUgUzMgY29weS5cbiAgICAgIGRvbmUoKTtcbiAgICAgIGF3YWl0IHdyaXRlVG9TMyhjYWNoZUtleSwgc3RvcmVkKTtcbiAgICB9LFxuXG4gICAgLy8gV2FpdHMgZm9yIHRoZSBsb2cgcXVlcnkgb24gZXZlcnkgcmVxdWVzdDogYW4gZW50cnkgcmVhZCBmcm9tIFMzIG1heVxuICAgIC8vIHByZWRhdGUgdGhpcyBpbnN0YW5jZSwgc28gd2hhdCB0aGUgcXVlcnkgc2F5cyBhcHBsaWVzIHRvIGl0IGF0IG9uY2UuXG4gICAgLi4udGFnTWV0aG9kcyh0YWdzLCB7IGJsb2NraW5nOiB0cnVlIH0pLFxuXG4gICAgYXN5bmMgZ2V0RXhwaXJhdGlvbihpbXBsaWNpdFRhZ3MpIHtcbiAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKGltcGxpY2l0VGFncyk7XG4gICAgICByZXR1cm4gdGFncy5leHBpcmF0aW9uKGltcGxpY2l0VGFncyk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGF6eUhhbmRsZXIoKCkgPT4gY3JlYXRlUmVtb3RlVXNlQ2FjaGVIYW5kbGVyKCkpO1xuIl19
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLXJlbW90ZS1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBeUZBLGtFQWdLQztBQXpQRDs7Ozs7Ozs7OztFQVVFO0FBQ0Ysc0RBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxrREFBNkI7QUFFN0IsdURBSzJCO0FBQzNCLCtDQUFnRjtBQUNoRix5REFlNEI7QUFxQjVCLFNBQVMsYUFBYTtJQUNwQixJQUFJLElBQUEsK0JBQVksR0FBRSxFQUFFLENBQUM7UUFDbkIsd0VBQXdFO1FBQ3hFLGlFQUFpRTtRQUNqRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsdUNBQXFCLEdBQUUsQ0FBQztJQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FDVixtSEFBbUgsQ0FDcEgsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9BQU8sSUFBSSw2QkFBVyxDQUFDLElBQUksb0JBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELDZFQUE2RTtBQUM3RSxTQUFTLFlBQVksQ0FBQyxNQUFtQixFQUFFLEVBQVU7SUFDbkQsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQ3pDLFVBQXdDLEVBQUU7SUFFMUMsTUFBTSxNQUFNLEdBQ1YsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMs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IGZvciBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AuXG4gIFNlZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvY29uZmlnL25leHQtY29uZmlnLWpzL2NhY2hlSGFuZGxlcnNcblxuICBFbnRyaWVzIGFyZSBzdG9yZWQgaW4gdGhlIGNhY2hlIGJ1Y2tldCwgc28gZXZlcnkgaW5zdGFuY2UgcmVhZHMgd2hhdCBhbnlcbiAgaW5zdGFuY2Ugd3JvdGUsIHdpdGggYSBib3VuZGVkIGluLW1lbW9yeSB0aWVyIGluIGZyb250LiBUYWdzIGdvIHRocm91Z2ggdGhlXG4gIHJldmFsaWRhdGlvbiB0YWJsZSdzIG1hcmtlciByb3dzLCBzaGFyZWQgd2l0aCBwbGFpbiBgJ3VzZSBjYWNoZSdgIGFuZCB3aXRoIHRoZVxuICBpbmNyZW1lbnRhbCBjYWNoZS4gV2l0aG91dCB0aGlzLCBOZXh0LmpzIG1hcHMgYHJlbW90ZWAgdG8gaXRzIGluLW1lbW9yeVxuICBkZWZhdWx0IGhhbmRsZXIsIGFuZCBgJ3VzZSBjYWNoZTogcmVtb3RlJ2AgaXMgbm8gbW9yZSBzaGFyZWQgdGhhblxuICBgJ3VzZSBjYWNoZSdgLlxuKi9cbi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgZ2V0RGVidWcgZnJvbSBcImRlYnVnXCI7XG5pbXBvcnQgdHlwZSB7IENhY2hlRW50cnksIENhY2hlSGFuZGxlciB9IGZyb20gXCJuZXh0L2NhY2hlXCI7XG5pbXBvcnQge1xuICBDYWNoZUJ1Y2tldCxcbiAgcmVzb2x2ZUF3c0NhY2hlQ29uZmlnLFxuICBUcmFja2VkVGFnTWFya2VycyxcbiAgdXNlQ2FjaGVTM0tleSxcbn0gZnJvbSBcIi4vYXdzLWNhY2hlLXN0b3JlXCI7XG5pbXBvcnQgeyBwYXJzZUNhY2hlVmFsdWUsIHNlcmlhbGl6ZUNhY2hlVmFsdWUsIHNoYTI1NkhleCB9IGZyb20gXCIuL2NhY2hlLXV0aWxzXCI7XG5pbXBvcnQge1xuICBjYWNoZUVudHJ5T2YsXG4gIERFRkFVTFRfTUVNT1JZX0JZVEVTLFxuICBFbnRyeUxydSxcbiAgaXNCdWlsZFBoYXNlLFxuICBpc0R5bmFtaWNFbnRyeSxcbiAgaXNQYXN0UmV2YWxpZGF0ZSxcbiAgbGF6eUhhbmRsZXIsXG4gIG5vdyxcbiAgbnVtYmVyRnJvbUVudixcbiAgUGVuZGluZ1NldHMsXG4gIHNoYXJlZFRhZ01hbmlmZXN0LFxuICBTdG9yZWRFbnRyeSxcbiAgc3RvcmVkRW50cnlPZixcbiAgdGFnTWV0aG9kcyxcbn0gZnJvbSBcIi4vdXNlLWNhY2hlLWNvbW1vblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbW90ZVVzZUNhY2hlSGFuZGxlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGJ1Y2tldCBlbnRyaWVzIGFyZSBzdG9yZWQgaW4sIG9yIGBudWxsYCBmb3IgbWVtb3J5IG9ubHkuIEZyb21cbiAgICogYENES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUVgIGJ5IGRlZmF1bHQsIGFuZCBuZXZlciBhdCBidWlsZCB0aW1lLlxuICAgKi9cbiAgYnVja2V0PzogQ2FjaGVCdWNrZXQgfCBudWxsO1xuICAvKiogUHJlZml4ZXMgZXZlcnkgUzMga2V5OyBgQ0RLX05FWFRKU19CVUlMRF9JRGAgYnkgZGVmYXVsdC4gKi9cbiAgYnVpbGRJZD86IHN0cmluZztcbiAgLyoqIFRhZyBzdGF0ZTsgdGhlIHByb2Nlc3Mtd2lkZSBvbmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgYnkgZGVmYXVsdC4gKi9cbiAgdGFncz86IFRyYWNrZWRUYWdNYXJrZXJzO1xufVxuXG4vKiogV2hhdCBpcyB3cml0dGVuIHRvIFMzIGZvciBvbmUgZW50cnkuICovXG5pbnRlcmZhY2UgU2VyaWFsaXplZEVudHJ5IGV4dGVuZHMgT21pdDxTdG9yZWRFbnRyeSwgXCJ2YWx1ZVwiPiB7XG4gIC8qKiBUaGUgZnVsbCBjYWNoZSBrZXksIGNoZWNrZWQgb24gcmVhZDsgdGhlIG9iamVjdCBrZXkgaXMgb25seSBpdHMgaGFzaC4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIGJ1Y2tldEZyb21FbnYoKTogQ2FjaGVCdWNrZXQgfCBudWxsIHtcbiAgaWYgKGlzQnVpbGRQaGFzZSgpKSB7XG4gICAgLy8gTm8gY3JlZGVudGlhbHMsIGFuZCBub3RoaW5nIGEgYnVpbGQtdGltZSBlbnRyeSBjb3VsZCBiZSByZWFkIGJhY2sgYnk6XG4gICAgLy8gcHJlcmVuZGVycyBrZWVwIHdoYXQgdGhleSBuZWVkIGluIHRoZWlyIG93biByZXN1bWUgZGF0YSBjYWNoZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB7IGJ1Y2tldE5hbWUsIHJlZ2lvbiB9ID0gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCk7XG4gIGlmICghYnVja2V0TmFtZSkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJpZXMgYXJlIGxvY2FsIHRvIGVhY2ggaW5zdGFuY2VcIixcbiAgICApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQ2FjaGVCdWNrZXQobmV3IFMzQ2xpZW50KHsgcmVnaW9uIH0pLCBidWNrZXROYW1lKTtcbn1cblxuLyoqIFdoZXRoZXIgYHN0b3JlZGAgaXMgcGFzdCBgZXhwaXJlYCwgYW5kIG1heSBubyBsb25nZXIgYmUgc2VydmVkIGF0IGFsbC4gKi9cbmZ1bmN0aW9uIGlzUGFzdEV4cGlyZShzdG9yZWQ6IFN0b3JlZEVudHJ5LCBhdDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdCA+IHN0b3JlZC50aW1lc3RhbXAgKyBzdG9yZWQuZXhwaXJlICogMTAwMDtcbn1cblxuLyoqXG4gKiBBIGAndXNlIGNhY2hlOiByZW1vdGUnYCBoYW5kbGVyOiBTMyBmb3Igc3RvcmFnZSwgbWVtb3J5IGluIGZyb250LCBhbmQgdGhlXG4gKiByZXZhbGlkYXRpb24gdGFibGUgZm9yIHRhZ3MuXG4gKlxuICogVW5saWtlIHRoZSBkZWZhdWx0IGhhbmRsZXIgYW4gZW50cnkgaXMgc2VydmVkIHVudGlsIGBleHBpcmVgLCBub3QgZHJvcHBlZCBhdFxuICogYHJldmFsaWRhdGVgOiBhIHJlbW90ZSByZWFkIGlzIHdvcnRoIHNlcnZpbmcgc3RhbGUgd2hpbGUgTmV4dC5qcydzIHdyYXBwZXJcbiAqIHJlZ2VuZXJhdGVzIGl0IGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBpcyB3aGF0IGByZXZhbGlkYXRlYCBpcyBmb3IuIEEgbWVtb3J5XG4gKiBjb3B5IHBhc3QgYHJldmFsaWRhdGVgIGlzIGNoZWNrZWQgYWdhaW5zdCBTMyBmaXJzdCwgc2luY2UgYW5vdGhlciBpbnN0YW5jZSBtYXlcbiAqIGFscmVhZHkgaGF2ZSB3cml0dGVuIHRoZSByZWdlbmVyYXRlZCBlbnRyeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVVzZUNhY2hlSGFuZGxlcihcbiAgb3B0aW9uczogUmVtb3RlVXNlQ2FjaGVIYW5kbGVyT3B0aW9ucyA9IHt9LFxuKTogQ2FjaGVIYW5kbGVyIHtcbiAgY29uc3QgYnVja2V0ID1cbiAgICBvcHRpb25zLmJ1Y2tldCA9PT0gdW5kZWZpbmVkID8gYnVja2V0RnJvbUVudigpIDogb3B0aW9ucy5idWNrZXQ7XG4gIGNvbnN0IGJ1aWxkSWQgPSBvcHRpb25zLmJ1aWxkSWQgPz8gcmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCkuYnVpbGRJZDtcbiAgY29uc3QgdGFncyA9IG9wdGlvbnMudGFncyA/PyBzaGFyZWRUYWdNYW5pZmVzdCgpO1xuICBjb25zdCBtZW1vcnkgPSBuZXcgRW50cnlMcnUoXG4gICAgbnVtYmVyRnJvbUVudihcIkNES19ORVhUSlNfVVNFX0NBQ0hFX01FTU9SWV9CWVRFU1wiLCBERUZBVUxUX01FTU9SWV9CWVRFUyksXG4gICk7XG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgUGVuZGluZ1NldHMoKTtcbiAgY29uc3QgZGVidWcgPSBnZXREZWJ1ZyhcImNkay1uZXh0anM6Y2FjaGUtaGFuZGxlcjp1c2UtY2FjaGU6cmVtb3RlXCIpO1xuXG4gIGNvbnN0IHMzS2V5ID0gKGNhY2hlS2V5OiBzdHJpbmcpID0+XG4gICAgdXNlQ2FjaGVTM0tleShidWlsZElkLCBzaGEyNTZIZXgoY2FjaGVLZXkpKTtcblxuICBhc3luYyBmdW5jdGlvbiByZWFkRnJvbVMzKFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICk6IFByb21pc2U8U3RvcmVkRW50cnkgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIWJ1Y2tldCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gczNLZXkoY2FjaGVLZXkpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmplY3QgPSBhd2FpdCBidWNrZXQuZ2V0KGtleSk7XG4gICAgICBpZiAoIW9iamVjdCkge1xuICAgICAgICBkZWJ1ZyhgUzMgTUlTUyAke2NhY2hlS2V5fWApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDYWNoZVZhbHVlKG9iamVjdCkgYXMgU2VyaWFsaXplZEVudHJ5O1xuICAgICAgaWYgKHBhcnNlZC5rZXkgIT09IGNhY2hlS2V5KSB7XG4gICAgICAgIC8vIEEgaGFzaCBjb2xsaXNpb24sIG9yIGFuIG9iamVjdCB0aGF0IGlzIG5vdCBvdXJzOiBuZXZlciBzZXJ2ZSBpdC5cbiAgICAgICAgY29uc29sZS53YXJuKGAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSBpcyBmb3IgYW5vdGhlciBrZXlgKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZ3M6IHBhcnNlZC50YWdzLFxuICAgICAgICBzdGFsZTogcGFyc2VkLnN0YWxlLFxuICAgICAgICB0aW1lc3RhbXA6IHBhcnNlZC50aW1lc3RhbXAsXG4gICAgICAgIGV4cGlyZTogcGFyc2VkLmV4cGlyZSxcbiAgICAgICAgcmV2YWxpZGF0ZTogcGFyc2VkLnJldmFsaWRhdGUsXG4gICAgICAgIHZhbHVlOiBuZXcgVWludDhBcnJheShwYXJzZWQudmFsdWUpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYEVycm9yIHJlYWRpbmcgJ3VzZSBjYWNoZTogcmVtb3RlJyBlbnRyeSAke2tleX0gZnJvbSBTMzpgLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHdyaXRlVG9TMyhjYWNoZUtleTogc3RyaW5nLCBzdG9yZWQ6IFN0b3JlZEVudHJ5KSB7XG4gICAgaWYgKCFidWNrZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gczNLZXkoY2FjaGVLZXkpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQ6IFNlcmlhbGl6ZWRFbnRyeSA9IHtcbiAgICAgIC4uLnN0b3JlZCxcbiAgICAgIGtleTogY2FjaGVLZXksXG4gICAgICB2YWx1ZTogQnVmZmVyLmZyb20oc3RvcmVkLnZhbHVlKSxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBidWNrZXQucHV0SnNvbihrZXksIHNlcmlhbGl6ZUNhY2hlVmFsdWUoc2VyaWFsaXplZCkpO1xuICAgICAgZGVidWcoYFMzIFNFVCAke2NhY2hlS2V5fSAoJHtrZXl9KWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUaGUgZW50cnkgaXMgc3RpbGwgaW4gbWVtb3J5IGhlcmU7IG90aGVyIGluc3RhbmNlcyBqdXN0IG1pc3MuXG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgRXJyb3Igd3JpdGluZyAndXNlIGNhY2hlOiByZW1vdGUnIGVudHJ5ICR7a2V5fSB0byBTMzpgLFxuICAgICAgICBlcnJvcixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBnZXQoY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8Q2FjaGVFbnRyeSB8IHVuZGVmaW5lZD4ge1xuICAgICAgYXdhaXQgcGVuZGluZy53YWl0KGNhY2hlS2V5KTtcbiAgICAgIGNvbnN0IGF0ID0gbm93KCk7XG5cbiAgICAgIGxldCBzdG9yZWQgPSBtZW1vcnkuZ2V0KGNhY2hlS2V5KTtcbiAgICAgIGlmIChzdG9yZWQpIHtcbiAgICAgICAgYXdhaXQgdGFncy5lbnN1cmUoc3RvcmVkLnRhZ3MpO1xuICAgICAgfVxuXG4gICAgICAvLyBQYXN0IGByZXZhbGlkYXRlYCwgb3Igc3RhbGUgb3IgZXhwaXJlZCBieSB0YWc6IGFub3RoZXIgaW5zdGFuY2UgbWF5XG4gICAgICAvLyBhbHJlYWR5IGhhdmUgd3JpdHRlbiB0aGUgcmVnZW5lcmF0ZWQgZW50cnksIGFuZCBzZXJ2aW5nIHRoYXQgYmVhdHNcbiAgICAgIC8vIHJlZ2VuZXJhdGluZyBpdCBoZXJlIHRvby4gQW4gZXhwaXJlZCBlbnRyeSBTMyBoYXMgbm90aGluZyBuZXdlciBmb3IgaXNcbiAgICAgIC8vIGRyb3BwZWQgYmVsb3cuXG4gICAgICBpZiAoXG4gICAgICAgICFzdG9yZWQgfHxcbiAgICAgICAgaXNQYXN0UmV2YWxpZGF0ZShzdG9yZWQsIGF0KSB8fFxuICAgICAgICB0YWdzLnN0YXRlKHN0b3JlZC50YWdzLCBzdG9yZWQudGltZXN0YW1wKSAhPT0gXCJmcmVzaFwiXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgZnJvbVMzID0gYXdhaXQgcmVhZEZyb21TMyhjYWNoZUtleSk7XG4gICAgICAgIGlmIChmcm9tUzMgJiYgKCFzdG9yZWQgfHwgZnJvbVMzLnRpbWVzdGFtcCA+IHN0b3JlZC50aW1lc3RhbXApKSB7XG4gICAgICAgICAgc3RvcmVkID0gZnJvbVMzO1xuICAgICAgICAgIC8vIEFuIGVudHJ5IHdyaXR0ZW4gYnkgYW5vdGhlciBpbnN0YW5jZTogaXRzIHRhZ3MgbWF5IGhhdmUgYmVlblxuICAgICAgICAgIC8vIHJldmFsaWRhdGVkIGF0IGFueSB0aW1lIHNpbmNlLCBzbyB0aGV5IGFyZSByZWFkIGJlZm9yZSBqdWRnaW5nIGl0LlxuICAgICAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKHN0b3JlZC50YWdzKTtcbiAgICAgICAgICBtZW1vcnkuc2V0KGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RvcmVkKSB7XG4gICAgICAgIGRlYnVnKGBNSVNTICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYXN0RXhwaXJlKHN0b3JlZCwgYXQpKSB7XG4gICAgICAgIGRlYnVnKGBFWFBJUkVEICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIG1lbW9yeS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdGUgPSB0YWdzLnN0YXRlKHN0b3JlZC50YWdzLCBzdG9yZWQudGltZXN0YW1wKTtcbiAgICAgIGlmIChzdGF0ZSA9PT0gXCJleHBpcmVkXCIpIHtcbiAgICAgICAgZGVidWcoYEVYUElSRUQgQlkgVEFHICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIG1lbW9yeS5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgZGVidWcoYEhJVCAke2NhY2hlS2V5fSR7c3RhdGUgPT09IFwic3RhbGVcIiA/IFwiIChzdGFsZSB0YWcpXCIgOiBcIlwifWApO1xuICAgICAgLy8gYHJldmFsaWRhdGU6IC0xYCBtYWtlcyB0aGUgd3JhcHBlciBzZXJ2ZSB0aGUgZW50cnkgYW5kIHJlZ2VuZXJhdGUgaXQgaW5cbiAgICAgIC8vIHRoZSBiYWNrZ3JvdW5kLCB0aGUgYnVpbHQtaW4gaGFuZGxlcidzIGFuc3dlciB0byBhIHN0YWxlIHRhZy5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5T2Yoc3RvcmVkLCBzdGF0ZSA9PT0gXCJzdGFsZVwiID8gLTEgOiBzdG9yZWQucmV2YWxpZGF0ZSk7XG4gICAgfSxcblxuICAgIGFzeW5jIHNldChcbiAgICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgICBwZW5kaW5nRW50cnk6IFByb21pc2U8Q2FjaGVFbnRyeT4sXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBkb25lID0gcGVuZGluZy5iZWdpbihjYWNoZUtleSk7XG4gICAgICBsZXQgc3RvcmVkOiBTdG9yZWRFbnRyeTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN0b3JlZCA9IGF3YWl0IHN0b3JlZEVudHJ5T2YocGVuZGluZ0VudHJ5KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFRoZSBzdHJlYW0gZXJyb3JlZDogc3RvcmUgbm90aGluZyByYXRoZXIgdGhhbiBhIHBhcnRpYWwgZW50cnkuXG4gICAgICAgIGRlYnVnKGBTRVQgRkFJTEVEICR7Y2FjaGVLZXl9YCwgZXJyb3IpO1xuICAgICAgICBkb25lKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpc0R5bmFtaWNFbnRyeShzdG9yZWQpKSB7XG4gICAgICAgIGRlYnVnKGBTS0lQIGR5bmFtaWMgZW50cnkgJHtjYWNoZUtleX1gKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZW1vcnkuc2V0KGNhY2hlS2V5LCBzdG9yZWQpO1xuICAgICAgdGFncy50cmFjayhzdG9yZWQudGFncyk7XG4gICAgICAvLyBBIGBnZXRgIHdhaXRpbmcgb24gdGhpcyBgc2V0YCBjYW4gYmUgYW5zd2VyZWQgZnJvbSBtZW1vcnkgbm93OyBvbmx5XG4gICAgICAvLyBvdGhlciBpbnN0YW5jZXMgbmVlZCB0aGUgUzMgY29weS5cbiAgICAgIGRvbmUoKTtcbiAgICAgIGF3YWl0IHdyaXRlVG9TMyhjYWNoZUtleSwgc3RvcmVkKTtcbiAgICB9LFxuXG4gICAgLy8gV2FpdHMgZm9yIHRoZSBsb2cgcXVlcnkgb24gZXZlcnkgcmVxdWVzdDogYW4gZW50cnkgcmVhZCBmcm9tIFMzIG1heVxuICAgIC8vIHByZWRhdGUgdGhpcyBpbnN0YW5jZSwgc28gd2hhdCB0aGUgcXVlcnkgc2F5cyBhcHBsaWVzIHRvIGl0IGF0IG9uY2UuXG4gICAgLi4udGFnTWV0aG9kcyh0YWdzLCB7IGJsb2NraW5nOiB0cnVlIH0pLFxuXG4gICAgYXN5bmMgZ2V0RXhwaXJhdGlvbihpbXBsaWNpdFRhZ3MpIHtcbiAgICAgIGF3YWl0IHRhZ3MuZW5zdXJlKGltcGxpY2l0VGFncyk7XG4gICAgICByZXR1cm4gdGFncy5leHBpcmF0aW9uKGltcGxpY2l0VGFncyk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbGF6eUhhbmRsZXIoKCkgPT4gY3JlYXRlUmVtb3RlVXNlQ2FjaGVIYW5kbGVyKCkpO1xuIl19
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The installed cdk-nextjs version, stamped into the adapter manifest so that a
3
+ * build written by one cdk-nextjs is never read by another.
4
+ *
5
+ * `require` rather than `import`: `package.json` is outside `rootDir`. The path
6
+ * resolves to the package root from `src/` (tests), `lib/` (the compiled
7
+ * constructs), and the esbuild bundles, which inline it. They're bundled after
8
+ * the release task's `bump`, so they get the released version too.
9
+ */
10
+ export declare const CDK_NEXTJS_VERSION: string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CDK_NEXTJS_VERSION = void 0;
4
+ /**
5
+ * The installed cdk-nextjs version, stamped into the adapter manifest so that a
6
+ * build written by one cdk-nextjs is never read by another.
7
+ *
8
+ * `require` rather than `import`: `package.json` is outside `rootDir`. The path
9
+ * resolves to the package root from `src/` (tests), `lib/` (the compiled
10
+ * constructs), and the esbuild bundles, which inline it. They're bundled after
11
+ * the release task's `bump`, so they get the released version too.
12
+ */
13
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
14
+ exports.CDK_NEXTJS_VERSION = require("../package.json").version;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW5leHRqcy12ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nkay1uZXh0anMtdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7R0FRRztBQUNILGlFQUFpRTtBQUNwRCxRQUFBLGtCQUFrQixHQUFXLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGluc3RhbGxlZCBjZGstbmV4dGpzIHZlcnNpb24sIHN0YW1wZWQgaW50byB0aGUgYWRhcHRlciBtYW5pZmVzdCBzbyB0aGF0IGFcbiAqIGJ1aWxkIHdyaXR0ZW4gYnkgb25lIGNkay1uZXh0anMgaXMgbmV2ZXIgcmVhZCBieSBhbm90aGVyLlxuICpcbiAqIGByZXF1aXJlYCByYXRoZXIgdGhhbiBgaW1wb3J0YDogYHBhY2thZ2UuanNvbmAgaXMgb3V0c2lkZSBgcm9vdERpcmAuIFRoZSBwYXRoXG4gKiByZXNvbHZlcyB0byB0aGUgcGFja2FnZSByb290IGZyb20gYHNyYy9gICh0ZXN0cyksIGBsaWIvYCAodGhlIGNvbXBpbGVkXG4gKiBjb25zdHJ1Y3RzKSwgYW5kIHRoZSBlc2J1aWxkIGJ1bmRsZXMsIHdoaWNoIGlubGluZSBpdC4gVGhleSdyZSBidW5kbGVkIGFmdGVyXG4gKiB0aGUgcmVsZWFzZSB0YXNrJ3MgYGJ1bXBgLCBzbyB0aGV5IGdldCB0aGUgcmVsZWFzZWQgdmVyc2lvbiB0b28uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5leHBvcnQgY29uc3QgQ0RLX05FWFRKU19WRVJTSU9OOiBzdHJpbmcgPSByZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb247XG4iXX0=
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.9" };
25
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.7.11" };
26
26
  /**
27
27
  * The API Gateway REST API
28
28
  */