cdk-nextjs 0.7.11 → 0.7.13
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.
- package/.jsii +310 -100
- package/.jsii.tabl.json +1 -1
- package/API.md +211 -3
- package/README.md +116 -101
- package/docs/breaking-changes.md +36 -2
- package/docs/development-guide.md +10 -0
- package/docs/next-build-output-guide.md +1 -1
- package/lib/adapter/adapter.mjs +4 -1
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +21 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.d.ts +71 -2
- package/lib/nextjs-distribution.js +156 -107
- package/lib/nextjs-distribution.test.js +361 -12
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.d.ts +74 -5
- package/lib/nextjs-static-assets.js +276 -41
- package/lib/nextjs-static-assets.test.js +298 -1
- package/lib/root-constructs/nextjs-base-construct.d.ts +5 -4
- package/lib/root-constructs/nextjs-base-construct.js +17 -8
- package/lib/root-constructs/nextjs-global-containers.d.ts +16 -1
- package/lib/root-constructs/nextjs-global-containers.js +4 -2
- package/lib/root-constructs/nextjs-global-functions.d.ts +16 -1
- package/lib/root-constructs/nextjs-global-functions.js +4 -2
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/image-utils.d.ts +1 -0
- package/lib/runtime/image-utils.js +2 -1
- package/lib/runtime/image-utils.test.js +17 -1
- package/lib/runtime/image.js +5 -2
- package/lib/runtime/image.test.js +21 -1
- package/lib/runtime/lambda.mjs +9 -2
- package/lib/runtime/server.mjs +9 -2
- package/lib/utils/viewer-request-functions.d.ts +53 -0
- package/lib/utils/viewer-request-functions.js +172 -0
- package/lib/utils/viewer-request-functions.test.d.ts +1 -0
- package/lib/utils/viewer-request-functions.test.js +43 -0
- package/package.json +4 -1
- package/scripts/e2e-harness/app.js +7 -2
- package/scripts/render-diagrams.mjs +121 -0
|
@@ -32,6 +32,22 @@ describe("fetchFromS3", () => {
|
|
|
32
32
|
ETag: '"abc123"',
|
|
33
33
|
});
|
|
34
34
|
const keyOf = () => client_s3_1.GetObjectCommand.mock.calls[0][0].Key;
|
|
35
|
+
// What `fetchInternalImage` passes on for a file `next start` serves.
|
|
36
|
+
it("returns the object's Cache-Control", async () => {
|
|
37
|
+
mockSend.mockResolvedValue({
|
|
38
|
+
Body: asyncIterableFrom([Buffer.from("data")]),
|
|
39
|
+
ContentType: "image/png",
|
|
40
|
+
CacheControl: "public, max-age=31536000, immutable",
|
|
41
|
+
ETag: '"abc123"',
|
|
42
|
+
});
|
|
43
|
+
const result = await (0, image_utils_1.fetchFromS3)(s3, "bucket", "/_next/static/media/logo.png", ROOT, 1024);
|
|
44
|
+
expect(result.cacheControl).toBe("public, max-age=31536000, immutable");
|
|
45
|
+
});
|
|
46
|
+
it("returns a null Cache-Control for an object without one", async () => {
|
|
47
|
+
ok();
|
|
48
|
+
const result = await (0, image_utils_1.fetchFromS3)(s3, "bucket", "/logo.png", ROOT, 1024);
|
|
49
|
+
expect(result.cacheControl).toBeNull();
|
|
50
|
+
});
|
|
35
51
|
it("strips the leading slash when the assets sit at the bucket root", async () => {
|
|
36
52
|
ok();
|
|
37
53
|
await (0, image_utils_1.fetchFromS3)(s3, "my-bucket", "/static/foo.png", {
|
|
@@ -246,4 +262,4 @@ describe("resolveErrorResponse", () => {
|
|
|
246
262
|
});
|
|
247
263
|
});
|
|
248
264
|
});
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsK0NBS3VCO0FBRXZCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUVoRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2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QUMvRCxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSx1QkFBdUI7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuXG5pbXBvcnQgeyBHZXRPYmplY3RDb21tYW5kLCBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7IEltYWdlRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RFdGFnLFxuICBmZXRjaEZyb21TMyxcbiAgSW1hZ2VUb29MYXJnZUVycm9yLFxuICByZXNvbHZlRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vaW1hZ2UtdXRpbHNcIjtcblxuZnVuY3Rpb24gYXN5bmNJdGVyYWJsZUZyb20oY2h1bmtzOiBVaW50OEFycmF5W10pOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+IHtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogYXN5bmMgKCkgPT5cbiAgICAgICAgICBpIDwgY2h1bmtzLmxlbmd0aFxuICAgICAgICAgICAgPyB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogY2h1bmtzW2krK10gfVxuICAgICAgICAgICAgOiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIE5vIGFwcCBgYmFzZVBhdGhgLCBhc3NldHMgYXQgdGhlIHJvb3Qgb2YgdGhlIGJ1Y2tldDogdGhlIGRlZmF1bHQuICovXG5jb25zdCBST09UID0geyB1cmxCYXNlUGF0aDogXCJcIiwga2V5UHJlZml4OiBcIlwiIH07XG5cbmRlc2NyaWJlKFwiZmV0Y2hGcm9tUzNcIiwgKCkgPT4ge1xuICBjb25zdCBtb2NrU2VuZCA9IGplc3QuZm4oKTtcbiAgY29uc3QgczMgPSBuZXcgUzNDbGllbnQoe30pIGFzIHVua25vd24gYXMgUzNDbGllbnQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgKHMzIGFzIHVua25vd24gYXMgeyBzZW5kOiB0eXBlb2YgbW9ja1NlbmQgfSkuc2VuZCA9IG1vY2tTZW5kO1xuICAgIG1vY2tTZW5kLm1vY2tSZXNldCgpO1xuICB9KTtcblxuICBjb25zdCBvayA9ICgpID0+XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG4gIGNvbnN0IGtleU9mID0gKCkgPT5cbiAgICAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXS5LZXk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggd2hlbiB0aGUgYXNzZXRzIHNpdCBhdCB0aGUgYnVja2V0IHJvb3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdCgoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXSkudG9FcXVhbChcbiAgICAgIHsgQnVja2V0OiBcIm15LWJ1Y2tldFwiLCBLZXk6IFwic3RhdGljL2Zvby5wbmdcIiB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyB0aGUgYnVja2V0IGtleSBwcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28uanBnXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9zdGF0aWMvZm9vLmpwZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZXBlYXQgdGhlIHByZWZpeCB3aGVuIHRoZSB1cmwgYWxyZWFkeSBjYXJyaWVzIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgLy8gbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgYGJhc2VQYXRoYCBpbnRvIHRoZSBocmVmIG9mIGEgc3RhdGljYWxseSBpbXBvcnRlZFxuICAgIC8vIGltYWdlLCB1bmxpa2UgYSBwbGFpbiBzdHJpbmcgcGF0aC5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Jhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIEdhdGV3YXkgZGVwbG95bWVudCB0eXBlcyBzZXJ2ZSB0aGUgYXBwIHVuZGVyIHRoZSBzdGFnZSBuYW1lLCBzbyB0aGVcbiAgICogYXBwJ3MgYGJhc2VQYXRoYCBpcyBgL3Byb2RgIHdoaWxlIHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZCB0byB0aGUgcm9vdCBvZiB0aGVcbiAgICogYnVja2V0LiBCdWlsZGluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBhc2tzIFMzIGZvciBgcHJvZC8uLi5gLCB3aGljaCBkb2VzXG4gICAqIG5vdCBleGlzdCwgYW5kIGV2ZXJ5IGxvY2FsIGA8SW1hZ2U+YCA0MDBzLlxuICAgKi9cbiAgaXQoXCJzdHJpcHMgYSBiYXNlUGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3Byb2QvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9wcm9kXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJfbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgdXJsIHdpdGhvdXQgYmFzZVBhdGggYWxvbmUgd2hlbiB0aGVyZSBpcyBubyBrZXkgcHJlZml4XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLmpwZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwic3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIFdpdGggYGFzc2V0UHJlZml4OiBcIi9jZG5cImAsIGEgc3RhdGljIGltcG9ydCdzIGhyZWYgaXNcbiAgLy8gYC9jZG4vX25leHQvc3RhdGljL21lZGlhL+KApmAsIHdpdGggYGJhc2VQYXRoYCBub3doZXJlIGluIGl0LlxuICBpdChcInN0cmlwcyBhIHBhdGggYXNzZXRQcmVmaXggaW4gZnJvbnQgb2YgL19uZXh0L1wiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG4vXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHB1YmxpYy8gZmlsZSB1bmRlciBhIGRpcmVjdG9yeSBuYW1lZCBsaWtlIHRoZSBhc3NldFByZWZpeCBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL2xvZ28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJjZG4vbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiaWdub3JlcyBhbiBhYnNvbHV0ZSBhc3NldFByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcImh0dHBzOi8vY2RuLmV4YW1wbGUudGVzdFwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJvbmx5IG1hdGNoZXMgYmFzZVBhdGggb24gYSBwYXRoIGJvdW5kYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9iYXNlbWVudC9sb2dvLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIC8vIENhcnJpZWQgb3ZlciBmcm9tICMyNjcsIHdoaWNoIGZpeGVkIHRoZSBzYW1lIGJ1ZyBpbiB0aGUgcHJlLWFkYXB0ZXIgaW1hZ2VcbiAgLy8gaGFuZGxlcjogYSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIGNhbiBhcnJpdmUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICBpdChcImRvZXNuJ3QgZG91YmxlIHRoZSBzZXBhcmF0b3Igd2hlbiB0aGUga2V5IHByZWZpeCBoYXMgYSB0cmFpbGluZyBzbGFzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvc3RhdGljL2Zvby5qcGdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlL1wiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2Uvc3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCwgd2hvc2UgYHB1YmxpYy9gIGhvbGRzIGJvdGggb2YgdGhlc2UgbmFtZXMuIFRoZVxuICAvLyBzcGFjZSBpcyB3aGF0IGJyb2tlOiB0aGUga2V5IGlzIHRoZSBmaWxlJ3MgcmVhbCBuYW1lLCB0aGUgdXJsIGlzIGEgVVJMIHBhdGguXG4gIGl0LmVhY2goW1xuICAgIFtcIi9oZWxsbyUyMHdvcmxkLmpwZ1wiLCBcImhlbGxvIHdvcmxkLmpwZ1wiXSxcbiAgICBbXCIvw6TDtsO8xaHEjcWZw60ucG5nXCIsIFwiw6TDtsO8xaHEjcWZw60ucG5nXCJdLFxuICAgIFtcIi8lQzMlQTQlQzMlQjYucG5nXCIsIFwiw6TDti5wbmdcIl0sXG4gIF0pKFwiZGVjb2RlcyAlcyBpbnRvIHRoZSBvYmplY3QncyByZWFsIG5hbWVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCB1cmwsIFJPT1QsIEluZmluaXR5KTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIC8vIEEgY2FjaGUtYnVzdGVyIG9uIGEgbG9jYWwgc3JjOiBgbmV4dCBzdGFydGAgcm91dGVzIHRoZSBocmVmIGFzIGEgcmVxdWVzdCwgc29cbiAgLy8gdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGUgZmlsZSBsb29rdXAuXG4gIGl0LmVhY2goW1xuICAgIFtcIi9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvbG9nby5wbmcjdG9wXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2xvZ28ucG5nP3Y9MiN0b3BcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvYmFzZS9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICAvLyBBIGA/YCB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUgYXJyaXZlcyBlbmNvZGVkIGFuZCBpcyBub3QgYSBxdWVyeS5cbiAgICBbXCIvd2hhdCUzRi5wbmc/dj0yXCIsIFwid2hhdD8ucG5nXCJdLFxuICBdKShcImtleXMgJXMgYnkgaXRzIHBhdGggYWxvbmVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgdXJsLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgbmFtZSB0aGF0IGlzbid0IHZhbGlkIHBlcmNlbnQtZW5jb2RpbmcgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvMTAwJS5wbmdcIiwgUk9PVCwgSW5maW5pdHkpO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCIxMDAlLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgYnVmZmVyLCBjb250ZW50IHR5cGUsIGFuZCBldGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL2pwZWdcIixcbiAgICAgIEVUYWc6ICdcInRoZS1ldGFnXCInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28uanBnXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlKFwiaW1hZ2UvanBlZ1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoJ1widGhlLWV0YWdcIicpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgZXRhZyB3aGVuIFMzIGRvZXNuJ3QgcHJvdmlkZSBvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBudWxsLFxuICAgICAgRVRhZzogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZShcIlwiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlcy5cbiAgaXQoXCJyZWZ1c2VzIGFuIG9iamVjdCB3aG9zZSBDb250ZW50TGVuZ3RoIGlzIG92ZXIgdGhlIGxpbWl0LCB1bnJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogeyAuLi5hc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJuZXZlciByZWFkXCIpXSksIGRlc3Ryb3kgfSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDExLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2JpZy5wbmdcIiwgUk9PVCwgMTApLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIGV4cGVjdChkZXN0cm95KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBvbmNlIHRoZSBieXRlcyByZWFkIHBhc3MgdGhlIGxpbWl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iaWcucG5nXCIsIFJPT1QsIDQpLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIC8vIEF0IHRoZSBsaW1pdCBleGFjdGx5IGlzIGZpbmUuXG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50TGVuZ3RoOiA1LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9vay5wbmdcIiwgUk9PVCwgNSk7XG4gICAgZXhwZWN0KHJlc3VsdC5idWZmZXIudG9TdHJpbmcoKSkudG9CZShcImhlbGxvXCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIFMzIHJldHVybnMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoeyBCb2R5OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvbWlzc2luZy5wbmdcIiwgUk9PVCwgSW5maW5pdHkpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FbXB0eSByZXNwb25zZSBmcm9tIFMzLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZXh0cmFjdEV0YWdcIiwgKCkgPT4ge1xuICBjb25zdCBpbWFnZSA9IEJ1ZmZlci5mcm9tKFwibm90IHJlYWxseSBhIHBuZ1wiKTtcblxuICAvLyBXaGF0IG5leHQncyBvd24gYGV4dHJhY3RFdGFnYCByZXR1cm5zIGZvciB0aGVzZSBpbnB1dHMsIHJlY29yZGVkIGZyb21cbiAgLy8gMTYuNCdzIGBpbWFnZS1vcHRpbWl6ZXIvZXh0cmFjdC1ldGFnLmpzYDogYSBsaXRlcmFsLCBzbyB0aGUgdGVzdCBydW5zIG9uXG4gIC8vIGV2ZXJ5IHN1cHBvcnRlZCBgbmV4dGAsIGluY2x1ZGluZyB0aG9zZSB3aXRob3V0IHRoYXQgbW9kdWxlLlxuICBpdChcIm1hdGNoZXMgbmV4dCdzIG93biwgd2l0aCBhbmQgd2l0aG91dCBhbiB1cHN0cmVhbSBldGFnXCIsICgpID0+IHtcbiAgICBleHBlY3QoZXh0cmFjdEV0YWcoJ1cvXCJhYmNcIicsIGltYWdlKSkudG9CZShcIlZ5OGlZV0pqSWdcIik7XG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIFtcIlwiLCBudWxsLCB1bmRlZmluZWRdKSB7XG4gICAgICBleHBlY3QoZXh0cmFjdEV0YWcobWlzc2luZywgaW1hZ2UpKS50b0JlKFxuICAgICAgICBcIjZRRTMwNTNqQk83N3ZuaUx4VFhINkM4bnE3LUFhVkJmdTlpcDNOeFBJQ1FcIixcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBzb3VyY2Ugb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keSB0byBuZXh0IHN0YXJ0J3MgNDEzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgSW1hZ2VUb29MYXJnZUVycm9yKFwiYmlnLnBuZ1wiKSwgSW1hZ2VFcnJvciksXG4gICAgKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsK0NBS3VCO0FBRXZCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUVoRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2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Q0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUVwRSxNQUFNLENBQUMsSUFBQSxrQ0FBb0IsRUFBQyxLQUFLLEVBQUUsK0JBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3RELFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLGdDQUFnQztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLEVBQUU7UUFDM0UsTUFBTSxDQUNKLElBQUEsa0NBQW9CLEVBQUMsSUFBSSxnQ0FBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRSwrQkFBVSxDQUFDLENBQ3BFLENBQUMsT0FBTyxDQUFDO1lBQ1IsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsMkRBQTJEO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDJDQUEyQyxFQUFFLEdBQUcsRUFBRTtRQUNuRCxNQUFNLENBQUMsSUFBQSxrQ0FBb0IsRUFBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSwrQkFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEUsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsdUJBQXVCO1NBQ2pDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFBLGtDQUFvQixFQUFDLGNBQWMsRUFBRSwrQkFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDL0QsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsdUJBQXVCO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcblxuaW1wb3J0IHsgR2V0T2JqZWN0Q29tbWFuZCwgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBJbWFnZUVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCI7XG5pbXBvcnQge1xuICBleHRyYWN0RXRhZyxcbiAgZmV0Y2hGcm9tUzMsXG4gIEltYWdlVG9vTGFyZ2VFcnJvcixcbiAgcmVzb2x2ZUVycm9yUmVzcG9uc2UsXG59IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5cbmZ1bmN0aW9uIGFzeW5jSXRlcmFibGVGcm9tKGNodW5rczogVWludDhBcnJheVtdKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiB7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGFzeW5jICgpID0+XG4gICAgICAgICAgaSA8IGNodW5rcy5sZW5ndGhcbiAgICAgICAgICAgID8geyBkb25lOiBmYWxzZSwgdmFsdWU6IGNodW5rc1tpKytdIH1cbiAgICAgICAgICAgIDogeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBObyBhcHAgYGJhc2VQYXRoYCwgYXNzZXRzIGF0IHRoZSByb290IG9mIHRoZSBidWNrZXQ6IHRoZSBkZWZhdWx0LiAqL1xuY29uc3QgUk9PVCA9IHsgdXJsQmFzZVBhdGg6IFwiXCIsIGtleVByZWZpeDogXCJcIiB9O1xuXG5kZXNjcmliZShcImZldGNoRnJvbVMzXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja1NlbmQgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHMzID0gbmV3IFMzQ2xpZW50KHt9KSBhcyB1bmtub3duIGFzIFMzQ2xpZW50O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIChzMyBhcyB1bmtub3duIGFzIHsgc2VuZDogdHlwZW9mIG1vY2tTZW5kIH0pLnNlbmQgPSBtb2NrU2VuZDtcbiAgICBtb2NrU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb2sgPSAoKSA9PlxuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuICBjb25zdCBrZXlPZiA9ICgpID0+XG4gICAgKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF0uS2V5O1xuXG4gIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgcGFzc2VzIG9uIGZvciBhIGZpbGUgYG5leHQgc3RhcnRgIHNlcnZlcy5cbiAgaXQoXCJyZXR1cm5zIHRoZSBvYmplY3QncyBDYWNoZS1Db250cm9sXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIENhY2hlQ29udHJvbDogXCJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAsIGltbXV0YWJsZVwiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcImJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2xvZ28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgMTAyNCxcbiAgICApO1xuICAgIGV4cGVjdChyZXN1bHQuY2FjaGVDb250cm9sKS50b0JlKFwicHVibGljLCBtYXgtYWdlPTMxNTM2MDAwLCBpbW11dGFibGVcIik7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhIG51bGwgQ2FjaGUtQ29udHJvbCBmb3IgYW4gb2JqZWN0IHdpdGhvdXQgb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcImJ1Y2tldFwiLCBcIi9sb2dvLnBuZ1wiLCBST09ULCAxMDI0KTtcbiAgICBleHBlY3QocmVzdWx0LmNhY2hlQ29udHJvbCkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggd2hlbiB0aGUgYXNzZXRzIHNpdCBhdCB0aGUgYnVja2V0IHJvb3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdCgoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXSkudG9FcXVhbChcbiAgICAgIHsgQnVja2V0OiBcIm15LWJ1Y2tldFwiLCBLZXk6IFwic3RhdGljL2Zvby5wbmdcIiB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyB0aGUgYnVja2V0IGtleSBwcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28uanBnXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9zdGF0aWMvZm9vLmpwZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZXBlYXQgdGhlIHByZWZpeCB3aGVuIHRoZSB1cmwgYWxyZWFkeSBjYXJyaWVzIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgLy8gbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgYGJhc2VQYXRoYCBpbnRvIHRoZSBocmVmIG9mIGEgc3RhdGljYWxseSBpbXBvcnRlZFxuICAgIC8vIGltYWdlLCB1bmxpa2UgYSBwbGFpbiBzdHJpbmcgcGF0aC5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Jhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIEdhdGV3YXkgZGVwbG95bWVudCB0eXBlcyBzZXJ2ZSB0aGUgYXBwIHVuZGVyIHRoZSBzdGFnZSBuYW1lLCBzbyB0aGVcbiAgICogYXBwJ3MgYGJhc2VQYXRoYCBpcyBgL3Byb2RgIHdoaWxlIHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZCB0byB0aGUgcm9vdCBvZiB0aGVcbiAgICogYnVja2V0LiBCdWlsZGluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBhc2tzIFMzIGZvciBgcHJvZC8uLi5gLCB3aGljaCBkb2VzXG4gICAqIG5vdCBleGlzdCwgYW5kIGV2ZXJ5IGxvY2FsIGA8SW1hZ2U+YCA0MDBzLlxuICAgKi9cbiAgaXQoXCJzdHJpcHMgYSBiYXNlUGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3Byb2QvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9wcm9kXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJfbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgdXJsIHdpdGhvdXQgYmFzZVBhdGggYWxvbmUgd2hlbiB0aGVyZSBpcyBubyBrZXkgcHJlZml4XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLmpwZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwic3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIFdpdGggYGFzc2V0UHJlZml4OiBcIi9jZG5cImAsIGEgc3RhdGljIGltcG9ydCdzIGhyZWYgaXNcbiAgLy8gYC9jZG4vX25leHQvc3RhdGljL21lZGlhL+KApmAsIHdpdGggYGJhc2VQYXRoYCBub3doZXJlIGluIGl0LlxuICBpdChcInN0cmlwcyBhIHBhdGggYXNzZXRQcmVmaXggaW4gZnJvbnQgb2YgL19uZXh0L1wiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG4vXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHB1YmxpYy8gZmlsZSB1bmRlciBhIGRpcmVjdG9yeSBuYW1lZCBsaWtlIHRoZSBhc3NldFByZWZpeCBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL2xvZ28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJjZG4vbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiaWdub3JlcyBhbiBhYnNvbHV0ZSBhc3NldFByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcImh0dHBzOi8vY2RuLmV4YW1wbGUudGVzdFwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJvbmx5IG1hdGNoZXMgYmFzZVBhdGggb24gYSBwYXRoIGJvdW5kYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9iYXNlbWVudC9sb2dvLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIC8vIENhcnJpZWQgb3ZlciBmcm9tICMyNjcsIHdoaWNoIGZpeGVkIHRoZSBzYW1lIGJ1ZyBpbiB0aGUgcHJlLWFkYXB0ZXIgaW1hZ2VcbiAgLy8gaGFuZGxlcjogYSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIGNhbiBhcnJpdmUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICBpdChcImRvZXNuJ3QgZG91YmxlIHRoZSBzZXBhcmF0b3Igd2hlbiB0aGUga2V5IHByZWZpeCBoYXMgYSB0cmFpbGluZyBzbGFzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvc3RhdGljL2Zvby5qcGdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlL1wiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2Uvc3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCwgd2hvc2UgYHB1YmxpYy9gIGhvbGRzIGJvdGggb2YgdGhlc2UgbmFtZXMuIFRoZVxuICAvLyBzcGFjZSBpcyB3aGF0IGJyb2tlOiB0aGUga2V5IGlzIHRoZSBmaWxlJ3MgcmVhbCBuYW1lLCB0aGUgdXJsIGlzIGEgVVJMIHBhdGguXG4gIGl0LmVhY2goW1xuICAgIFtcIi9oZWxsbyUyMHdvcmxkLmpwZ1wiLCBcImhlbGxvIHdvcmxkLmpwZ1wiXSxcbiAgICBbXCIvw6TDtsO8xaHEjcWZw60ucG5nXCIsIFwiw6TDtsO8xaHEjcWZw60ucG5nXCJdLFxuICAgIFtcIi8lQzMlQTQlQzMlQjYucG5nXCIsIFwiw6TDti5wbmdcIl0sXG4gIF0pKFwiZGVjb2RlcyAlcyBpbnRvIHRoZSBvYmplY3QncyByZWFsIG5hbWVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCB1cmwsIFJPT1QsIEluZmluaXR5KTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIC8vIEEgY2FjaGUtYnVzdGVyIG9uIGEgbG9jYWwgc3JjOiBgbmV4dCBzdGFydGAgcm91dGVzIHRoZSBocmVmIGFzIGEgcmVxdWVzdCwgc29cbiAgLy8gdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGUgZmlsZSBsb29rdXAuXG4gIGl0LmVhY2goW1xuICAgIFtcIi9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvbG9nby5wbmcjdG9wXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2xvZ28ucG5nP3Y9MiN0b3BcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvYmFzZS9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICAvLyBBIGA/YCB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUgYXJyaXZlcyBlbmNvZGVkIGFuZCBpcyBub3QgYSBxdWVyeS5cbiAgICBbXCIvd2hhdCUzRi5wbmc/dj0yXCIsIFwid2hhdD8ucG5nXCJdLFxuICBdKShcImtleXMgJXMgYnkgaXRzIHBhdGggYWxvbmVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgdXJsLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgbmFtZSB0aGF0IGlzbid0IHZhbGlkIHBlcmNlbnQtZW5jb2RpbmcgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvMTAwJS5wbmdcIiwgUk9PVCwgSW5maW5pdHkpO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCIxMDAlLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgYnVmZmVyLCBjb250ZW50IHR5cGUsIGFuZCBldGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL2pwZWdcIixcbiAgICAgIEVUYWc6ICdcInRoZS1ldGFnXCInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28uanBnXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlKFwiaW1hZ2UvanBlZ1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoJ1widGhlLWV0YWdcIicpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgZXRhZyB3aGVuIFMzIGRvZXNuJ3QgcHJvdmlkZSBvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBudWxsLFxuICAgICAgRVRhZzogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZShcIlwiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlcy5cbiAgaXQoXCJyZWZ1c2VzIGFuIG9iamVjdCB3aG9zZSBDb250ZW50TGVuZ3RoIGlzIG92ZXIgdGhlIGxpbWl0LCB1bnJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogeyAuLi5hc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJuZXZlciByZWFkXCIpXSksIGRlc3Ryb3kgfSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDExLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2JpZy5wbmdcIiwgUk9PVCwgMTApLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIGV4cGVjdChkZXN0cm95KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBvbmNlIHRoZSBieXRlcyByZWFkIHBhc3MgdGhlIGxpbWl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iaWcucG5nXCIsIFJPT1QsIDQpLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIC8vIEF0IHRoZSBsaW1pdCBleGFjdGx5IGlzIGZpbmUuXG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50TGVuZ3RoOiA1LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9vay5wbmdcIiwgUk9PVCwgNSk7XG4gICAgZXhwZWN0KHJlc3VsdC5idWZmZXIudG9TdHJpbmcoKSkudG9CZShcImhlbGxvXCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIFMzIHJldHVybnMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoeyBCb2R5OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvbWlzc2luZy5wbmdcIiwgUk9PVCwgSW5maW5pdHkpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FbXB0eSByZXNwb25zZSBmcm9tIFMzLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZXh0cmFjdEV0YWdcIiwgKCkgPT4ge1xuICBjb25zdCBpbWFnZSA9IEJ1ZmZlci5mcm9tKFwibm90IHJlYWxseSBhIHBuZ1wiKTtcblxuICAvLyBXaGF0IG5leHQncyBvd24gYGV4dHJhY3RFdGFnYCByZXR1cm5zIGZvciB0aGVzZSBpbnB1dHMsIHJlY29yZGVkIGZyb21cbiAgLy8gMTYuNCdzIGBpbWFnZS1vcHRpbWl6ZXIvZXh0cmFjdC1ldGFnLmpzYDogYSBsaXRlcmFsLCBzbyB0aGUgdGVzdCBydW5zIG9uXG4gIC8vIGV2ZXJ5IHN1cHBvcnRlZCBgbmV4dGAsIGluY2x1ZGluZyB0aG9zZSB3aXRob3V0IHRoYXQgbW9kdWxlLlxuICBpdChcIm1hdGNoZXMgbmV4dCdzIG93biwgd2l0aCBhbmQgd2l0aG91dCBhbiB1cHN0cmVhbSBldGFnXCIsICgpID0+IHtcbiAgICBleHBlY3QoZXh0cmFjdEV0YWcoJ1cvXCJhYmNcIicsIGltYWdlKSkudG9CZShcIlZ5OGlZV0pqSWdcIik7XG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIFtcIlwiLCBudWxsLCB1bmRlZmluZWRdKSB7XG4gICAgICBleHBlY3QoZXh0cmFjdEV0YWcobWlzc2luZywgaW1hZ2UpKS50b0JlKFxuICAgICAgICBcIjZRRTMwNTNqQk83N3ZuaUx4VFhINkM4bnE3LUFhVkJmdTlpcDNOeFBJQ1FcIixcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBzb3VyY2Ugb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keSB0byBuZXh0IHN0YXJ0J3MgNDEzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgSW1hZ2VUb29MYXJnZUVycm9yKFwiYmlnLnBuZ1wiKSwgSW1hZ2VFcnJvciksXG4gICAgKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
package/lib/runtime/image.js
CHANGED
|
@@ -163,7 +163,10 @@ class RuntimeImageOptimizer {
|
|
|
163
163
|
return {
|
|
164
164
|
buffer: result.buffer,
|
|
165
165
|
contentType: result.contentType,
|
|
166
|
-
|
|
166
|
+
// The object's own, as `fetchInternalImage` passes on the file's
|
|
167
|
+
// `Cache-Control`: the optimizer keeps the result for its max-age, a
|
|
168
|
+
// year for an immutable `_next/static/media` file.
|
|
169
|
+
cacheControl: result.cacheControl,
|
|
167
170
|
// Encoded as for a route's response: `fetchInternalImage` does too.
|
|
168
171
|
etag: (0, image_utils_1.extractEtag)(result.etag, result.buffer),
|
|
169
172
|
};
|
|
@@ -336,4 +339,4 @@ function loadImageRuntime({ manifest }) {
|
|
|
336
339
|
};
|
|
337
340
|
return { next, nextConfig };
|
|
338
341
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpZEEsc0RBY0M7QUEvZEQsc0RBQXNEO0FBQ3REOzs7Ozs7OztHQVFHO0FBQ0gseUNBQStEO0FBQy9ELHVDQUF5QztBQUl6Qyw4Q0FBdUU7QUFDdkUsK0NBQStFO0FBQy9FLDhEQUEyRDtBQUUzRCxpREFBNEM7QUFDNUMsaUNBQThDO0FBa0Y5QyxNQUFhLHFCQUFxQjtJQUtJO0lBSm5CLEVBQUUsR0FBRyxJQUFBLGVBQVEsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sQ0FBdUM7SUFDN0MsVUFBVSxDQUF1QjtJQUV6QyxZQUFvQyxPQUE4QjtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUFHLENBQUM7SUFFdEU7Ozs7OztPQU1HO0lBQ0ksU0FBUztRQUNkLDRFQUE0RTtRQUM1RSw4Q0FBOEM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEdBQXdCLEVBQ3hCLEdBQXVCLEVBQ3ZCLEdBQVEsRUFDUixTQUE4QztRQUU5Qyw2RUFBNkU7UUFDN0UsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sRUFDSixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsWUFBWSxHQUNiLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUVuQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQy9DLEdBRUksRUFDSixNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFDcEMsVUFBVSxFQUNWLEtBQUssQ0FDTixDQUFDO1lBQ0YsSUFBSSxjQUFjLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzdCLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNwQyxNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsa0JBQXVDLEVBQUUsRUFBRTtnQkFDakUsTUFBTSxRQUFRLEdBQUcsVUFBVTtvQkFDekIsQ0FBQyxDQUFDLE1BQU0sa0JBQWtCLENBQ3RCLElBQUksRUFDSixZQUFZLENBQUMsdUJBQXVCLEVBQ3BDLFlBQVksQ0FBQyxtQkFBbUIsRUFDaEMsWUFBWSxDQUFDLGdCQUFnQixDQUM5QjtvQkFDSCxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUNuQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFVBQVUsRUFDVixZQUFZLENBQUMsbUJBQW1CLEVBQ2hDLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztnQkFFTixNQUFNLFNBQVMsR0FBRyxNQUFNLGNBQWMsQ0FDcEMsUUFBUSxFQUNSLE1BQU0sRUFDTjtvQkFDRSxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7b0JBQ3JDLE1BQU0sRUFBRTt3QkFDTixtQkFBbUIsRUFBRSxZQUFZLENBQUMsbUJBQW1CO3dCQUNyRCxlQUFlLEVBQUUsWUFBWSxDQUFDLGVBQWU7cUJBQzlDO2lCQUNGLEVBQ0QsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLENBQ3JDLENBQUM7Z0JBRUYsa0VBQWtFO2dCQUNsRSxzRUFBc0U7Z0JBQ3RFLHdFQUF3RTtnQkFDeEUsdURBQXVEO2dCQUN2RCxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLEtBQUssQ0FDWCxzQkFBc0IsSUFBSSxxQ0FBcUMsRUFDL0QsU0FBUyxDQUFDLEtBQUssQ0FDaEIsQ0FBQztnQkFDSixDQUFDO2dCQUNELE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUMsQ0FBQztZQUVGLHNFQUFzRTtZQUN0RSx5RUFBeUU7WUFDekUseUVBQXlFO1lBQ3pFLHVFQUF1RTtZQUN2RSwrREFBK0Q7WUFDL0QsbUVBQW1FO1lBQ25FLDZDQUE2QztZQUM3QyxNQUFNLElBQUksR0FBRyxDQUNYLFNBQWlCLEVBQ2pCLE1BQWMsRUFDZCxJQUFZLEVBQ1osTUFBZ0MsRUFDaEMsTUFBYyxFQUNkLEVBQUU7Z0JBQ0YsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7Z0JBQ3JCLFlBQVksQ0FDVixHQUFvRCxFQUNwRCxJQUFBLDJCQUFnQixFQUFDLEdBQUcsQ0FBQyxFQUNyQixJQUFJLEVBQ0osU0FBUyxFQUNULE1BQU0sRUFDTixJQUFJLEVBQ0osTUFBTSxDQUFDLFFBQVEsRUFDZixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLENBQ04sQ0FBQztZQUNKLENBQUMsQ0FBQztZQUVGLDREQUE0RDtZQUM1RCxvRUFBb0U7WUFDcEUseUVBQXlFO1lBQ3pFLHNFQUFzRTtZQUN0RSx3RUFBd0U7WUFDeEUsMEVBQTBFO1lBQzFFLHdFQUF3RTtZQUN4RSw4REFBOEQ7WUFDOUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNyQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQ3ZDLEtBQUssRUFBRSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsR0FDdkQsTUFBTSxRQUFRLENBQUMsa0JBQXdDLENBQUMsQ0FBQztnQkFDM0QsT0FBTztvQkFDTCxLQUFLLEVBQUU7d0JBQ0wsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU07d0JBQ04sSUFBSTt3QkFDSixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTt3QkFDM0QsWUFBWTtxQkFDYjtvQkFDRCxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUU7aUJBQ3hELENBQUM7WUFDSixDQUFDLEVBQ0Q7Z0JBQ0UsU0FBUyxFQUFFLFVBQVU7Z0JBQ3JCLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztnQkFDdEQsVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLHFFQUFxRTtnQkFDckUsdUVBQXVFO2dCQUN2RSxTQUFTO2FBQ2tELENBQzlELENBQUM7WUFDRix5RUFBeUU7WUFDekUsdUVBQXVFO1lBQ3ZFLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FRUixDQUFDO1lBQ2QsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUNELElBQUksQ0FDRixLQUFLLENBQUMsU0FBUyxFQUNmLEtBQUssQ0FBQyxNQUFNLEVBQ1osS0FBSyxDQUFDLElBQUksRUFDVixLQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUN6RCxLQUFNLENBQUMsWUFBWSxFQUFFLFVBQVUsSUFBSSxDQUFDLENBQ3JDLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBQSxrQ0FBb0IsRUFBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDeEUsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELFFBQVEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLFNBQVMsQ0FDZixNQUEyQztRQUUzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO2dCQUNmLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQzlCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVLENBQ3RCLEdBQXdCLEVBQ3hCLElBQVksRUFDWixVQUE2RCxFQUM3RCxtQkFBMkIsRUFDM0IsU0FBd0M7UUFFeEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQy9DLDJFQUEyRTtRQUMzRSxvRUFBb0U7UUFDcEUsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQztnQkFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEseUJBQVcsRUFDOUIsSUFBSSxDQUFDLEVBQUUsRUFDUCxNQUFNLEVBQ04sSUFBSSxFQUNKO29CQUNFLFdBQVcsRUFBRSxVQUFVLENBQUMsUUFBUTtvQkFDaEMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZTtvQkFDdkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2lCQUNwQyxFQUNELG1CQUFtQixDQUNwQixDQUFDO2dCQUNGLE9BQU87b0JBQ0wsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO29CQUNyQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7b0JBQy9CLFlBQVksRUFBRSxJQUFJO29CQUNsQixvRUFBb0U7b0JBQ3BFLElBQUksRUFBRSxJQUFBLHlCQUFXLEVBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDO2lCQUM5QyxDQUFDO1lBQ0osQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztnQkFDckUsSUFBSSxDQUFDLE9BQU87b0JBQUUsTUFBTSxLQUFLLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCx1RUFBdUU7UUFDdkUsTUFBTSxRQUFRLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JFLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0Qyx3RUFBd0U7WUFDeEUsb0VBQW9FO1lBQ3BFLE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxDQUM1QixHQUFHLEVBQ0gsZ0VBQWdFO2dCQUM5RCwwQkFBMEIsUUFBUSxDQUFDLFVBQVUsc0JBQXNCO2dCQUNuRSx3QkFBd0IsQ0FDM0IsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FDNUIsR0FBRyxFQUNILDJEQUEyRCxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE1BQU0sSUFBSSxTQUFTLENBQUMsVUFBVSxDQUM1QixHQUFHLEVBQ0gsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTztZQUNMLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNyQixXQUFXLEVBQUUsSUFBQSxpQkFBVSxFQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxJQUFJO1lBQ2pFLFlBQVksRUFBRSxJQUFBLGlCQUFVLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLElBQUk7WUFDbkUsSUFBSSxFQUFFLElBQUEseUJBQVcsRUFDZixJQUFBLGlCQUFVLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQ2Q7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBM1JELHNEQTJSQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxHQUFHLE9BQWdDLENBQUM7QUFnQnBEOzs7OztHQUtHO0FBQ0gsS0FBSyxVQUFVLGNBQWMsQ0FDM0IsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBeUIsRUFDakUsTUFBMkM7SUFFM0MsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQTBCO1FBQ3JDLGFBQWEsRUFBRSxJQUFBLHlCQUFVLEVBQUMsMENBQTBDLENBQUM7S0FDdEUsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLElBQUEsZ0JBQUksRUFDbEIsY0FBYyxFQUNkLFFBQVEsQ0FBQyxrQkFBa0IsRUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3hCLENBQUM7SUFDRixJQUFJLFlBQXlELENBQUM7SUFDOUQsSUFBSSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUNuQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNuQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQXdELENBQUM7UUFDekUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUM7UUFDbEQsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQzlCLEdBQUcsRUFBRSxLQUFLO1lBQ1YsV0FBVyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsY0FBYztZQUNuRCxhQUFhLEVBQUUsSUFBQSxnQkFBSSxFQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7WUFDdEMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQjtZQUNqRCxlQUFlLEVBQUUsRUFBRTtZQUNuQixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTztRQUNMLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUMvRCxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDO1lBQzdDLE9BQU87WUFDUCxVQUFVO1lBQ1YsWUFBWTtTQUNiLENBQUM7S0FDSCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxhQUFnRTtJQUVoRSxNQUFNLE1BQU0sR0FBRyxhQUV3QixDQUFDO0lBQ3hDLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsTUFBTSxDQUFFLEdBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sR0FBRyxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sSUFBSSxhQUFhLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxPQUFlLEVBQUUsWUFBb0I7SUFDNUQsT0FBTyxJQUFBLHdCQUFhLEVBQ2xCLElBQUEsc0JBQWMsRUFBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFJLEVBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUMxRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsV0FBVyxDQUNsQixNQUE0QixFQUM1QixTQUE4QztJQUU5QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBeUIsQ0FBQztJQUMvRCxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUE2QyxFQUFFLEVBQUU7UUFDbEUsU0FBUyxDQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUNILENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQ2YsR0FBdUIsRUFDdkIsVUFBa0IsRUFDbEIsSUFBWTtJQUVaLEdBQUcsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQzVCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxjQUFjLENBQ3JCLFFBQXlCO0lBRXpCLElBQUksUUFBUSxDQUFDLGdCQUFnQixLQUFLLHVDQUFrQixFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEtBQUssQ0FDYixpREFBaUQ7WUFDL0MsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLElBQUksV0FBVyx3QkFBd0I7WUFDbkUsY0FBYyx1Q0FBa0Isc0NBQXNDLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQXNDLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLEVBQXlCO0lBQzNELE1BQU0sSUFBSSxHQUFxQjtRQUM3QixTQUFTLEVBQUUsSUFBQSx5QkFBVSxFQUFDLHFDQUFxQyxDQUFDO1FBQzVELFdBQVcsRUFBRSxJQUFBLHlCQUFVLEVBQUMsa0NBQWtDLENBQUM7S0FDNUQsQ0FBQztJQUNGLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFDNUIsTUFBTSxVQUFVLEdBQUc7UUFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixNQUFNLEVBQUUsY0FBYyxDQUFDLFFBQVEsQ0FBQztRQUNoQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLElBQUksU0FBUztRQUM5QyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCO0tBQ3hCLENBQUM7SUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKipcbiAqIGAvX25leHQvaW1hZ2VgLCBmb2xkZWQgaW50byB0aGUgcnVudGltZSBjb3JlLlxuICpcbiAqIFRoZSByZXNwb25zZSBpcyB3cml0dGVuIHRvIGEge0BsaW5rIFNoaW1TZXJ2ZXJSZXNwb25zZX0gcmF0aGVyIHRoYW4gc3RyYWlnaHQgdG9cbiAqIGEgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbSwgc28gaXQgY29tcG9zZXMgd2l0aCByb3V0aW5nOiBkaXNwYXRjaCBvbmx5IGNsYXNzaWZpZXNcbiAqIGEgcmVxdWVzdCBhcyBpbWFnZSBvcHRpbWl6YXRpb24gKmFmdGVyKiBtaWRkbGV3YXJlIGhhcyBoYWQgaXQsIHdoaWNoIGlzIHdoYXRcbiAqIG1ha2VzIGBOZXh0UmVzcG9uc2UucmV3cml0ZSgpYCBvbnRvIGFuIGltYWdlIHdvcmsuIFRoYXQgaXMgYWxzbyB3aHkgdGhlcmUgaXMgbm9cbiAqIGxvbmdlciBhIGRlZGljYXRlZCBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhIOKAlCBtaWRkbGV3YXJlIG5ldmVyIHJhbiBmb3IgaXQuXG4gKi9cbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgaXNBYnNvbHV0ZVBhdGgsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWdDb21wbGV0ZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2NvbmZpZy1zaGFyZWQuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVkUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGUvdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL2h0dHAvcmVxdWVzdFwiO1xuaW1wb3J0IHsgYXNTZXJ2ZXJSZXNwb25zZSwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vaHR0cC9yZXNwb25zZVwiO1xuaW1wb3J0IHsgZXh0cmFjdEV0YWcsIGZldGNoRnJvbVMzLCByZXNvbHZlRXJyb3JSZXNwb25zZSB9IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5pbXBvcnQgeyBDREtfTkVYVEpTX1ZFUlNJT04gfSBmcm9tIFwiLi4vY2RrLW5leHRqcy12ZXJzaW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9tYW5pZmVzdFwiO1xuaW1wb3J0IHsgbmV4dE1vZHVsZSB9IGZyb20gXCIuL25leHQtbW9kdWxlc1wiO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZSwgczNDbGllbnQgfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKlxuICogUmVxdWlyZWQgdGhyb3VnaCB7QGxpbmsgbmV4dE1vZHVsZX0gcmF0aGVyIHRoYW4gaW1wb3J0ZWQsIGJlY2F1c2UgYG5leHRgIGlzXG4gKiBleHRlcm5hbCB0byB0aGUgc2hlbGwgYnVuZGxlcyBhbmQgZG9lcyBub3QgcmVzb2x2ZSBmcm9tIHdoZXJlIHRoZXkgc2l0LiBFdmVyeVxuICogdHlwZSBoZXJlIGlzIHN0aWxsIHRoZSByZWFsIG9uZTogYHR5cGVvZiBpbXBvcnQoLi4uKWAgaXMgZXJhc2VkLlxuICovXG5pbnRlcmZhY2UgTmV4dEltYWdlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IG9wdGltaXplcjogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpO1xuICByZWFkb25seSBzZXJ2ZVN0YXRpYzogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIpO1xufVxuXG4vKiogVGhlIG1vZHVsZXMgb25seSB0aGUgaW1hZ2UgY2FjaGUgbmVlZHMsIGxvYWRlZCB3aXRoIGl0LiAqL1xuaW50ZXJmYWNlIE5leHRJbWFnZUNhY2hlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IHJlc3BvbnNlQ2FjaGU6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpO1xufVxuXG4vKiogQSBgY2FjaGVIYW5kbGVyYCBjbGFzcywgYXMgYG5leHQuY29uZmlnYCdzIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBleHBvcnRzIGl0LiAqL1xudHlwZSBDYWNoZUhhbmRsZXJDbGFzcyA9IG5ldyAoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSA9PiBOb25OdWxsYWJsZTxcbiAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgIE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl1bXCJJbWFnZU9wdGltaXplckNhY2hlXCJdXG4gID5bMF1bXCJjYWNoZUhhbmRsZXJcIl1cbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VPcHRpbWl6ZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVwbG95bWVudFJvb3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdDtcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfQlVDS0VUX05BTUVgLiBFbXB0eSB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrXG4gICAqIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIHdoaWNoIHNlbmRzIGV2ZXJ5IG9uZSB0byBgZmV0Y2hJbnRlcm5hbGAuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfS0VZX1BSRUZJWGAuIEVtcHR5IHdoZW4gdGhlIGFzc2V0cyBzaXQgYXQgdGhlIHJvb3RcbiAgICogb2YgdGhlIGJ1Y2tldCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXRLZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcXVlc3RzIGEgbG9jYWwgc291cmNlIGZyb20gdGhlIGFwcCdzIG93biByb3V0ZXMsIGZvciBvbmUgUzMgaGFzIG5vIGZpbGVcbiAgICogZm9yOiBgPEltYWdlIHNyYz1cIi9hcGkvYXZhdGFyP2lkPTQyXCI+YCwgc2VydmVkIGJ5IGEgcm91dGUgaGFuZGxlci4gYG5leHRcbiAgICogc3RhcnRgIGZldGNoZXMgZXZlcnkgbG9jYWwgc291cmNlIHRoYXQgd2F5IChgZmV0Y2hJbnRlcm5hbEltYWdlYCk7IGhlcmUgaXRcbiAgICogaXMgdGhlIGZhbGxiYWNrLCBzaW5jZSBuZWFybHkgZXZlcnkgc291cmNlIGlzIGEgZmlsZSwgYW5kIGEgYEdldE9iamVjdGAgaXNcbiAgICogZmFyIGNoZWFwZXIgdGhhbiBhIHJvdXRlIGludm9jYXRpb24uXG4gICAqXG4gICAqIEdpdmVuIHRoZSByZXF1ZXN0IGJlaW5nIG9wdGltaXplZCwgZm9yIGl0cyBhdXRob3JpdHk7IGxpa2UgYG5leHQgc3RhcnRgLFxuICAgKiB0aGUgdmlld2VyJ3MgY29va2llcyBhbmQgb3RoZXIgaGVhZGVycyBhcmUgbm90IHRoZSBpbXBsZW1lbnRhdGlvbidzIHRvXG4gICAqIGZvcndhcmQuIEFuZCBnaXZlbiBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCBwYXN0IHdoaWNoIGl0IHN0b3BzXG4gICAqIHJlYWRpbmcgYW5kIGFuc3dlcnMge0BsaW5rIEludGVybmFsSW1hZ2VSZXNwb25zZS50b29MYXJnZX0uXG4gICAqL1xuICByZWFkb25seSBmZXRjaEludGVybmFsOiAoXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICkgPT4gUHJvbWlzZTxJbnRlcm5hbEltYWdlUmVzcG9uc2U+O1xuICAvKipcbiAgICogTG9hZHMgdGhlIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBmcm9tIGl0cyBmaWxlIFVSTC4gQSBzZWFtIGZvciB0ZXN0cywgd2hpY2hcbiAgICogcnVuIGFzIENvbW1vbkpTIGFuZCBjYW5ub3QgYGltcG9ydCgpYCBhIFVSTC5cbiAgICogQGRlZmF1bHQgLSBgaW1wb3J0KClgXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRNb2R1bGU/OiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKiBUaGUgcmVzcG9uc2Uge0BsaW5rIEltYWdlT3B0aW1pemVyT3B0aW9ucy5mZXRjaEludGVybmFsfSBnb3QuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsSW1hZ2VSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVhZGVyczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+PjtcbiAgcmVhZG9ubHkgYm9keTogQnVmZmVyO1xuICAvKipcbiAgICogVGhlIGBmdW5jdGlvbkdyb3Vwc2AgZ3JvdXAgd2hvc2UgcGFja2FnZSBoYXMgdGhlIHJvdXRlIHRoYXQgc2VydmVzIHRoZVxuICAgKiBzb3VyY2UsIHdoZW4gaXQgaXMgbm90IHRoaXMgZnVuY3Rpb24nczogdGhlcmUgaXMgbm8gcmVzcG9uc2UgdG8gdXNlLCBhbmRcbiAgICogdGhlIG9wdGltaXplciBhbnN3ZXJzIGFuIGV4cGxpY2l0IDUwMiByYXRoZXIgdGhhbiBhIFwibm90IGEgdmFsaWQgaW1hZ2VcIi5cbiAgICovXG4gIHJlYWRvbmx5IG90aGVyR3JvdXA/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm9keSBwYXNzZWQgYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgc28gaXQgd2FzIGN1dCBvZmY6IGEgNDEzLCBhc1xuICAgKiBgbmV4dCBzdGFydGAgYW5zd2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHRvb0xhcmdlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFJ1bnRpbWVJbWFnZU9wdGltaXplciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgczMgPSBzM0NsaWVudCgpO1xuICBwcml2YXRlIGxvYWRlZD86IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+O1xuICBwcml2YXRlIGltYWdlQ2FjaGU/OiBQcm9taXNlPEltYWdlQ2FjaGU+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEltYWdlT3B0aW1pemVyT3B0aW9ucykge31cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgYXBwIHNlcnZlcyBgL19uZXh0L2ltYWdlYCBhdCBhbGwuIGBuZXh0IHN0YXJ0YCBhbnN3ZXJzIDQwNFxuICAgKiB3aGVuIGBpbWFnZXMudW5vcHRpbWl6ZWRgIGlzIHNldCBvciBhIG5vbi1kZWZhdWx0IGBsb2FkZXJgIGlzIGNvbmZpZ3VyZWRcbiAgICogKGBuZXh0LXNlcnZlci5qc2ApLCBhbmQgc28gZG9lcyB0aGUgcnVudGltZTogb3RoZXJ3aXNlIGFueW9uZSBjYW4gbWFrZSB0aGVcbiAgICogY29tcHV0ZSBydW4gc2hhcnAgYW5kIHdyaXRlIHRoZSBpbWFnZSBjYWNoZSBvbiBhbiBlbmRwb2ludCB0aGUgYXBwIHR1cm5lZFxuICAgKiBvZmYuXG4gICAqL1xuICBwdWJsaWMgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIEZyb20gdGhlIG1hbmlmZXN0IGFsb25lOiBhbiBhcHAgdGhhdCB0dXJuZWQgaW1hZ2VzIG9mZiBzaG91bGRuJ3QgbG9hZCB0aGVcbiAgICAvLyBvcHRpbWl6ZXIgKGFuZCBgc2hhcnBgKSBqdXN0IHRvIGFuc3dlciA0MDQuXG4gICAgY29uc3QgaW1hZ2VzID0gbWFuaWZlc3RJbWFnZXModGhpcy5vcHRpb25zLm1hbmlmZXN0KTtcbiAgICByZXR1cm4gaW1hZ2VzLmxvYWRlciA9PT0gXCJkZWZhdWx0XCIgJiYgIWltYWdlcy51bm9wdGltaXplZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGUoXG4gICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogU2hpbVNlcnZlclJlc3BvbnNlLFxuICAgIHVybDogVVJMLFxuICAgIHdhaXRVbnRpbDogKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4pID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlc29sdmVkIG9uIHRoZSBmaXJzdCBpbWFnZSByZXF1ZXN0IHJhdGhlciB0aGFuIGF0IGNvbGQgc3RhcnQ6IGFuIGFwcCB3aXRoXG4gICAgLy8gbm8gYDxJbWFnZT5gIHNob3VsZCBub3QgcGF5IGZvciB0aGUgYG5leHRgIG1vZHVsZSBsb2Fkcy5cbiAgICB0aGlzLmxvYWRlZCA/Pz0gbG9hZEltYWdlUnVudGltZSh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgbmV4dCwgbmV4dENvbmZpZyB9ID0gdGhpcy5sb2FkZWQ7XG4gICAgY29uc3QgaW1hZ2VzQ29uZmlnID0gbmV4dENvbmZpZy5pbWFnZXM7XG4gICAgY29uc3Qge1xuICAgICAgSW1hZ2VFcnJvcixcbiAgICAgIEltYWdlT3B0aW1pemVyQ2FjaGUsXG4gICAgICBmZXRjaEV4dGVybmFsSW1hZ2UsXG4gICAgICBpbWFnZU9wdGltaXplcixcbiAgICAgIHNlbmRSZXNwb25zZSxcbiAgICB9ID0gbmV4dC5vcHRpbWl6ZXI7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1zID0gSW1hZ2VPcHRpbWl6ZXJDYWNoZS52YWxpZGF0ZVBhcmFtcyhcbiAgICAgICAgcmVxIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxcbiAgICAgICAgICB0eXBlb2YgSW1hZ2VPcHRpbWl6ZXJDYWNoZS52YWxpZGF0ZVBhcmFtc1xuICAgICAgICA+WzBdLFxuICAgICAgICBPYmplY3QuZnJvbUVudHJpZXModXJsLnNlYXJjaFBhcmFtcyksXG4gICAgICAgIG5leHRDb25maWcsXG4gICAgICAgIGZhbHNlLFxuICAgICAgKTtcbiAgICAgIGlmIChcImVycm9yTWVzc2FnZVwiIGluIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gc2VuZFRleHQocmVzLCA0MDAsIHBhcmFtcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGhyZWYsIGlzQWJzb2x1dGUgfSA9IHBhcmFtcztcbiAgICAgIGNvbnN0IG9wdGltaXplID0gYXN5bmMgKHByZXZpb3VzQ2FjaGVFbnRyeT86IFByZXZpb3VzSW1hZ2VFbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCB1cHN0cmVhbSA9IGlzQWJzb2x1dGVcbiAgICAgICAgICA/IGF3YWl0IGZldGNoRXh0ZXJuYWxJbWFnZShcbiAgICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLmRhbmdlcm91c2x5QWxsb3dMb2NhbElQLFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcubWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLm1heGltdW1SZWRpcmVjdHMsXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBhd2FpdCB0aGlzLmZldGNoTG9jYWwoXG4gICAgICAgICAgICAgIHJlcSxcbiAgICAgICAgICAgICAgaHJlZixcbiAgICAgICAgICAgICAgbmV4dENvbmZpZyxcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLm1heGltdW1SZXNwb25zZUJvZHksXG4gICAgICAgICAgICAgIG5leHQub3B0aW1pemVyLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBvcHRpbWl6ZWQgPSBhd2FpdCBpbWFnZU9wdGltaXplcihcbiAgICAgICAgICB1cHN0cmVhbSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhwZXJpbWVudGFsOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbCxcbiAgICAgICAgICAgIGltYWdlczoge1xuICAgICAgICAgICAgICBkYW5nZXJvdXNseUFsbG93U1ZHOiBpbWFnZXNDb25maWcuZGFuZ2Vyb3VzbHlBbGxvd1NWRyxcbiAgICAgICAgICAgICAgbWluaW11bUNhY2hlVFRMOiBpbWFnZXNDb25maWcubWluaW11bUNhY2hlVFRMLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgaXNEZXY6IGZhbHNlLCBwcmV2aW91c0NhY2hlRW50cnkgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBgaW1hZ2VPcHRpbWl6ZXJgIHJlcG9ydHMgYSBmYWlsZWQgb3B0aW1pemF0aW9uIGJ5IHJldHVybmluZyB0aGVcbiAgICAgICAgLy8gdW50b3VjaGVkIHVwc3RyZWFtIGltYWdlIGFsb25nc2lkZSBgZXJyb3JgIHJhdGhlciB0aGFuIHRocm93aW5nLCBzb1xuICAgICAgICAvLyB3aXRob3V0IHRoaXMgYSBicm9rZW4gYHNoYXJwYCBpbnN0YWxsIHNlcnZlcyBmdWxsLXNpemUgb3JpZ2luYWxzIHdpdGhcbiAgICAgICAgLy8gYSAyMDAgaW5kZWZpbml0ZWx5IGFuZCBub3RoaW5nIGluIHRoZSBsb2dzIHNheXMgd2h5LlxuICAgICAgICBpZiAob3B0aW1pemVkLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gb3B0aW1pemUgJHtocmVmfSwgc2VydmluZyB0aGUgdW5vcHRpbWl6ZWQgb3JpZ2luYWw6YCxcbiAgICAgICAgICAgIG9wdGltaXplZC5lcnJvcixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpbWl6ZWQ7XG4gICAgICB9O1xuXG4gICAgICAvLyBOZXh0J3Mgb3duIHJlc3BvbnNlIHdyaXRlciwgcmF0aGVyIHRoYW4gYSByZXN0YXRlbWVudCBvZiBpdCwgc28gdGhlXG4gICAgICAvLyBoZWFkZXJzIGBuZXh0IHN0YXJ0YCBzZW5kcyBjb21lIHdpdGggaXQ6IHRoZSB5ZWFyLWxvbmcgYGltbXV0YWJsZWAgZm9yXG4gICAgICAvLyBhIGAvX25leHQvc3RhdGljL21lZGlhYCBzcmMsIGBJZi1Ob25lLU1hdGNoYCBhcyBgZnJlc2hgIHJlYWRzIGl0ICh3ZWFrXG4gICAgICAvLyBhbmQgbGlzdGVkIHRhZ3MsIGBDYWNoZS1Db250cm9sOiBuby1jYWNoZWApLCBhIGBDb250ZW50LURpc3Bvc2l0aW9uYFxuICAgICAgLy8gdGhhdCBSRkMgNTk4Ny1lbmNvZGVzIGEgZmlsZW5hbWUgYHdyaXRlSGVhZGAgd291bGQgcmVqZWN0IGFzXG4gICAgICAvLyBub24tbGF0aW4xLCBgQ29udGVudC1MZW5ndGhgLCBhbmQgbm8gYm9keSBmb3IgSEVBRC4gVGhlIHJlc3RhdGVkXG4gICAgICAvLyB2ZXJzaW9uIGhhZCBkcmlmdGVkIG9uIGV2ZXJ5IG9uZSBvZiB0aG9zZS5cbiAgICAgIGNvbnN0IHNlbmQgPSAoXG4gICAgICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgICAgICBidWZmZXI6IEJ1ZmZlcixcbiAgICAgICAgZXRhZzogc3RyaW5nLFxuICAgICAgICB4Q2FjaGU6IFwiTUlTU1wiIHwgXCJISVRcIiB8IFwiU1RBTEVcIixcbiAgICAgICAgbWF4QWdlOiBudW1iZXIsXG4gICAgICApID0+IHtcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSAyMDA7XG4gICAgICAgIHNlbmRSZXNwb25zZShcbiAgICAgICAgICByZXEgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBzZW5kUmVzcG9uc2U+WzBdLFxuICAgICAgICAgIGFzU2VydmVyUmVzcG9uc2UocmVzKSxcbiAgICAgICAgICBocmVmLFxuICAgICAgICAgIGV4dGVuc2lvbixcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgZXRhZyxcbiAgICAgICAgICBwYXJhbXMuaXNTdGF0aWMsXG4gICAgICAgICAgeENhY2hlLFxuICAgICAgICAgIGltYWdlc0NvbmZpZyxcbiAgICAgICAgICBtYXhBZ2UsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICAvLyBgbmV4dCBzdGFydGAncyBgaGFuZGxlTmV4dEltYWdlUmVxdWVzdGAsIHN0ZXAgZm9yIHN0ZXA6IGFcbiAgICAgIC8vIGBSZXNwb25zZUNhY2hlYCBvdmVyIGFuIGBJbWFnZU9wdGltaXplckNhY2hlYCBiYWNrZWQgYnkgdGhlIGFwcCdzXG4gICAgICAvLyBgY2FjaGVIYW5kbGVyYCwgc28gYSBoaXQgc2tpcHMgdGhlIGZldGNoIGFuZCBgc2hhcnBgLCBhIHN0YWxlIGVudHJ5IGlzXG4gICAgICAvLyBzZXJ2ZWQgd2hpbGUgaXQgaXMgcmVnZW5lcmF0ZWQsIGFuZCBjb25jdXJyZW50IG1pc3NlcyBmb3Igb25lIGltYWdlXG4gICAgICAvLyBvcHRpbWl6ZSBpdCBvbmNlLiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAgaXMgdGhlIFMzIGNhY2hlLCB3aGljaCB0aGVcbiAgICAgIC8vIGFkYXB0ZXIgdHVybnMgb24gd2l0aCBgaW1hZ2VzLmN1c3RvbUNhY2hlSGFuZGxlcmA6IHdpdGggbm8gQ0ROIGluIGZyb250XG4gICAgICAvLyAodGhlIFJlZ2lvbmFsIHR5cGVzKSBldmVyeSByZXF1ZXN0IHdvdWxkIG90aGVyd2lzZSBydW4gYHNoYXJwYCBhZ2FpbixcbiAgICAgIC8vIGFuZCBiZWhpbmQgQ2xvdWRGcm9udCBlYWNoIGVkZ2UgbWlzcyBpcyBhbiBTMyByZWFkIGluc3RlYWQuXG4gICAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKHRoaXMubG9hZGVkKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgY2FjaGUucmVzcG9uc2VzLmdldChcbiAgICAgICAgSW1hZ2VPcHRpbWl6ZXJDYWNoZS5nZXRDYWNoZUtleShwYXJhbXMpLFxuICAgICAgICBhc3luYyAoeyBwcmV2aW91c0NhY2hlRW50cnkgfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgYnVmZmVyLCBjb250ZW50VHlwZSwgbWF4QWdlLCBldGFnLCB1cHN0cmVhbUV0YWcgfSA9XG4gICAgICAgICAgICBhd2FpdCBvcHRpbWl6ZShwcmV2aW91c0NhY2hlRW50cnkgYXMgUHJldmlvdXNJbWFnZUVudHJ5KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAga2luZDogSU1BR0VfS0lORCxcbiAgICAgICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgICAgICBldGFnLFxuICAgICAgICAgICAgICBleHRlbnNpb246IG5leHQuc2VydmVTdGF0aWMuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKSA/PyBcIlwiLFxuICAgICAgICAgICAgICB1cHN0cmVhbUV0YWcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FjaGVDb250cm9sOiB7IHJldmFsaWRhdGU6IG1heEFnZSwgZXhwaXJlOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcm91dGVLaW5kOiBJTUFHRV9LSU5ELFxuICAgICAgICAgIGluY3JlbWVudGFsQ2FjaGU6IGRlZmVyV3JpdGVzKGNhY2hlLmltYWdlcywgd2FpdFVudGlsKSxcbiAgICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgICAgICAvLyBBIHN0YWxlIGVudHJ5IGlzIHNlcnZlZCBhdCBvbmNlIGFuZCByZWdlbmVyYXRlZCBpbiB0aGUgYmFja2dyb3VuZDtcbiAgICAgICAgICAvLyB3aXRob3V0IHRoaXMsIGEgTGFtYmRhIGNvdWxkIGZyZWV6ZSB3aXRoIHRoZSByZWdlbmVyYXRpb24gaGFsZiBkb25lLlxuICAgICAgICAgIHdhaXRVbnRpbCxcbiAgICAgICAgfSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8SW1hZ2VDYWNoZVtcInJlc3BvbnNlc1wiXVtcImdldFwiXT5bMl0sXG4gICAgICApO1xuICAgICAgLy8gQSBmYWlsZWQgcmVuZGVyLCBmcm9tIG5leHQgMTYuNDsgYG5leHQtc2VydmVyLmpzYCByZXRocm93cyBpdCB0aGUgc2FtZVxuICAgICAgLy8gd2F5LiBUaGUgZ2VuZXJhdG9yIGFib3ZlIHRocm93cyBpbnN0ZWFkLCBzbyB0aGlzIGlzIHRoZSB0eXBlJ3MgY2FzZS5cbiAgICAgIGlmIChlbnRyeSAmJiBcImVycm9yXCIgaW4gZW50cnkpIHtcbiAgICAgICAgdGhyb3cgZW50cnkuZXJyb3I7XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZSA9IGVudHJ5Py52YWx1ZSBhc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIGtpbmQ6IHN0cmluZztcbiAgICAgICAgICAgIGV4dGVuc2lvbjogc3RyaW5nO1xuICAgICAgICAgICAgYnVmZmVyOiBCdWZmZXI7XG4gICAgICAgICAgICBldGFnOiBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB8IG51bGxcbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWU/LmtpbmQgIT09IElNQUdFX0tJTkQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGltYWdlIGNhY2hlIHJldHVybmVkIG5vIGltYWdlIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgc2VuZChcbiAgICAgICAgdmFsdWUuZXh0ZW5zaW9uLFxuICAgICAgICB2YWx1ZS5idWZmZXIsXG4gICAgICAgIHZhbHVlLmV0YWcsXG4gICAgICAgIGVudHJ5IS5pc01pc3MgPyBcIk1JU1NcIiA6IGVudHJ5IS5pc1N0YWxlID8gXCJTVEFMRVwiIDogXCJISVRcIixcbiAgICAgICAgZW50cnkhLmNhY2hlQ29udHJvbD8ucmV2YWxpZGF0ZSB8fCAwLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0gPSByZXNvbHZlRXJyb3JSZXNwb25zZShlcnJvciwgSW1hZ2VFcnJvcik7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA+PSA1MDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkltYWdlIG9wdGltaXphdGlvbiBmYWlsZWQ6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHNlbmRUZXh0KHJlcywgc3RhdHVzQ29kZSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0ZWQgb24gZmFpbHVyZSwgYXMgYEVudHJ5cG9pbnRSZWdpc3RyeS5sb2FkYCBldmljdHMgYSBmYWlsZWQgbW9kdWxlIGxvYWQ6XG4gICAqIGEgdHJhbnNpZW50IGZhaWx1cmUgaW1wb3J0aW5nIHRoZSBgY2FjaGVIYW5kbGVyYCAoRU1GSUxFIHVuZGVyIGEgY29sZC1zdGFydFxuICAgKiBidXJzdCkgd291bGQgb3RoZXJ3aXNlIDUwMCBldmVyeSBpbWFnZSByZXF1ZXN0IHVudGlsIHRoZSBzYW5kYm94IHJlY3ljbGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkQ2FjaGUoXG4gICAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbiAgKTogUHJvbWlzZTxJbWFnZUNhY2hlPiB7XG4gICAgaWYgKCF0aGlzLmltYWdlQ2FjaGUpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gbG9hZEltYWdlQ2FjaGUodGhpcy5vcHRpb25zLCBsb2FkZWQpO1xuICAgICAgdGhpcy5pbWFnZUNhY2hlID0gY2FjaGU7XG4gICAgICBjYWNoZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlQ2FjaGUgPT09IGNhY2hlKSB7XG4gICAgICAgICAgdGhpcy5pbWFnZUNhY2hlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hMb2NhbChcbiAgICByZXE6IFNoaW1JbmNvbWluZ01lc3NhZ2UsXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIG5leHRDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+W1wibmV4dENvbmZpZ1wiXSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICAgb3B0aW1pemVyOiBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdLFxuICApIHtcbiAgICBjb25zdCB7IGJ1Y2tldCwgZmV0Y2hJbnRlcm5hbCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIC8vIE5vIGJ1Y2tldCB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIGFuZFxuICAgIC8vIHRoZSByb3V0ZXMgc2VydmUgdGhvc2UgYXMgdGhleSBzZXJ2ZSBhbnl0aGluZyBTMyBoYXMgbm8gZmlsZSBmb3IuXG4gICAgaWYgKGJ1Y2tldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICAgICAgdGhpcy5zMyxcbiAgICAgICAgICBidWNrZXQsXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmxCYXNlUGF0aDogbmV4dENvbmZpZy5iYXNlUGF0aCxcbiAgICAgICAgICAgIGtleVByZWZpeDogdGhpcy5vcHRpb25zLmJ1Y2tldEtleVByZWZpeCxcbiAgICAgICAgICAgIGFzc2V0UHJlZml4OiBuZXh0Q29uZmlnLmFzc2V0UHJlZml4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBidWZmZXI6IHJlc3VsdC5idWZmZXIsXG4gICAgICAgICAgY29udGVudFR5cGU6IHJlc3VsdC5jb250ZW50VHlwZSxcbiAgICAgICAgICBjYWNoZUNvbnRyb2w6IG51bGwsXG4gICAgICAgICAgLy8gRW5jb2RlZCBhcyBmb3IgYSByb3V0ZSdzIHJlc3BvbnNlOiBgZmV0Y2hJbnRlcm5hbEltYWdlYCBkb2VzIHRvby5cbiAgICAgICAgICBldGFnOiBleHRyYWN0RXRhZyhyZXN1bHQuZXRhZywgcmVzdWx0LmJ1ZmZlciksXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vU3VjaEtleVwiO1xuICAgICAgICBpZiAoIW1pc3NpbmcpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgY2hlY2tzLCBhbmQgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVzcG9uc2UuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEludGVybmFsKGhyZWYsIHJlcSwgbWF4aW11bVJlc3BvbnNlQm9keSk7XG4gICAgaWYgKHJlc3BvbnNlLm90aGVyR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSBkZXBsb3ltZW50IHByb2JsZW0sIG5vdCBhIGJhZCBgdXJsYDogbGVhdmUgdGhlIHJvdXRlIGluIHRoZSBkZWZhdWx0XG4gICAgICAvLyBncm91cCwgb3Igc2VydmUgdGhlIGltYWdlIGFzIGEgZmlsZSAocHVibGljLyBvciBhIHN0YXRpYyBpbXBvcnQpLlxuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA1MDIsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaXRzIHNvdXJjZSBpcyBhIHJvdXRlIGluIGFub3RoZXIgJyArXG4gICAgICAgICAgYGZ1bmN0aW9uR3JvdXBzIGdyb3VwIChcIiR7cmVzcG9uc2Uub3RoZXJHcm91cH1cIiksIHdoaWNoIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICBcIm9wdGltaXplciBjYW5ub3QgZmV0Y2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS50b29MYXJnZSkge1xuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA0MTMsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLnN0YXR1c0NvZGUgfHwgcmVzcG9uc2UuYm9keS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBvcHRpbWl6ZXIuSW1hZ2VFcnJvcihcbiAgICAgICAgNDAwLFxuICAgICAgICAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgdmFsaWQgYnV0IGludGVybmFsIHJlc3BvbnNlIGlzIGludmFsaWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcjogcmVzcG9uc2UuYm9keSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmaXJzdFZhbHVlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pID8/IG51bGwsXG4gICAgICBjYWNoZUNvbnRyb2w6IGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pID8/IG51bGwsXG4gICAgICBldGFnOiBleHRyYWN0RXRhZyhcbiAgICAgICAgZmlyc3RWYWx1ZShyZXNwb25zZS5oZWFkZXJzLmV0YWcpID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlLmJvZHksXG4gICAgICApLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBgQ2FjaGVkUm91dGVLaW5kLklNQUdFYCwgd2hpY2ggaXMgYWxzbyBgUm91dGVLaW5kLklNQUdFYC4gUmVzdGF0ZWQ6IHRoZSBlbnVtIGlzXG4gKiBhIHJ1bnRpbWUgdmFsdWUgb2YgYG5leHRgLCB3aGljaCB0aGUgYnVuZGxlIGNhbm5vdCBpbXBvcnQuXG4gKi9cbmNvbnN0IElNQUdFX0tJTkQgPSBcIklNQUdFXCIgYXMgQ2FjaGVkUm91dGVLaW5kLklNQUdFO1xuXG4vKiogYGltYWdlT3B0aW1pemVyYCdzIGBwcmV2aW91c0NhY2hlRW50cnlgLiAqL1xudHlwZSBQcmV2aW91c0ltYWdlRW50cnkgPSBQYXJhbWV0ZXJzPFxuICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiaW1hZ2VPcHRpbWl6ZXJcIl1cbj5bM11bXCJwcmV2aW91c0NhY2hlRW50cnlcIl07XG5cbmludGVyZmFjZSBJbWFnZUNhY2hlIHtcbiAgcmVhZG9ubHkgcmVzcG9uc2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl1cbiAgPjtcbiAgcmVhZG9ubHkgaW1hZ2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXVtcIkltYWdlT3B0aW1pemVyQ2FjaGVcIl1cbiAgPjtcbn1cblxuLyoqXG4gKiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAsIGNvbnN0cnVjdGVkIHRoZSB3YXkgYG5leHQgc3RhcnRgIGNvbnN0cnVjdHMgaXQgZm9yXG4gKiBpbWFnZXMgKGBuZXh0LXNlcnZlci5qc2AsIGBoYW5kbGVOZXh0SW1hZ2VSZXF1ZXN0YCk6IG9uY2UsIGFuZCBrZXB0LCBzbyBpdHNcbiAqIGluLW1lbW9yeSBsYXllciBsYXN0cyBhY3Jvc3MgcmVxdWVzdHMuIEl0cyBwYXRoIGluIHRoZSBtYW5pZmVzdCBpcyByZWxhdGl2ZVxuICogdG8gdGhlIGRpc3QgZGlyOyBzZWUge0BsaW5rIGNhY2hlSGFuZGxlclVybH0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZUNhY2hlKFxuICB7IGRlcGxveW1lbnRSb290LCBtYW5pZmVzdCwgaW1wb3J0TW9kdWxlIH06IEltYWdlT3B0aW1pemVyT3B0aW9ucyxcbiAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbik6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IGxvYWRlZDtcbiAgY29uc3QgbW9kdWxlczogTmV4dEltYWdlQ2FjaGVNb2R1bGVzID0ge1xuICAgIHJlc3BvbnNlQ2FjaGU6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpLFxuICB9O1xuICBjb25zdCBkaXN0RGlyID0gam9pbihcbiAgICBkZXBsb3ltZW50Um9vdCxcbiAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgbWFuaWZlc3QuY29uZmlnLmRpc3REaXIsXG4gICk7XG4gIGxldCBjYWNoZUhhbmRsZXI6IEluc3RhbmNlVHlwZTxDYWNoZUhhbmRsZXJDbGFzcz4gfCB1bmRlZmluZWQ7XG4gIGlmIChuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcikge1xuICAgIGNvbnN0IHVybCA9IGNhY2hlSGFuZGxlclVybChkaXN0RGlyLCBuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcik7XG4gICAgY29uc3QgaW1wb3J0ZWQgPSAoYXdhaXQgKGltcG9ydE1vZHVsZVxuICAgICAgPyBpbXBvcnRNb2R1bGUodXJsKVxuICAgICAgOiBpbXBvcnQodXJsKSkpIGFzIHsgZGVmYXVsdD86IENhY2hlSGFuZGxlckNsYXNzIH0gJiBDYWNoZUhhbmRsZXJDbGFzcztcbiAgICBjb25zdCBDYWNoZUhhbmRsZXIgPSBpbXBvcnRlZC5kZWZhdWx0ID8/IGltcG9ydGVkO1xuICAgIGNhY2hlSGFuZGxlciA9IG5ldyBDYWNoZUhhbmRsZXIoe1xuICAgICAgZGV2OiBmYWxzZSxcbiAgICAgIGZsdXNoVG9EaXNrOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbC5pc3JGbHVzaFRvRGlzayxcbiAgICAgIHNlcnZlckRpc3REaXI6IGpvaW4oZGlzdERpciwgXCJzZXJ2ZXJcIiksXG4gICAgICBtYXhNZW1vcnlDYWNoZVNpemU6IG5leHRDb25maWcuY2FjaGVNYXhNZW1vcnlTaXplLFxuICAgICAgcmV2YWxpZGF0ZWRUYWdzOiBbXSxcbiAgICAgIF9yZXF1ZXN0SGVhZGVyczoge30sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZXM6IG5ld0ltYWdlUmVzcG9uc2VDYWNoZShtb2R1bGVzLnJlc3BvbnNlQ2FjaGUuZGVmYXVsdCksXG4gICAgaW1hZ2VzOiBuZXcgbmV4dC5vcHRpbWl6ZXIuSW1hZ2VPcHRpbWl6ZXJDYWNoZSh7XG4gICAgICBkaXN0RGlyLFxuICAgICAgbmV4dENvbmZpZyxcbiAgICAgIGNhY2hlSGFuZGxlcixcbiAgICB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgbmV3IFJlc3BvbnNlQ2FjaGUoLi4uKWAgZm9yIGltYWdlcywgb24gZWl0aGVyIHNpZGUgb2YgbmV4dCAxNi4zLjguIEJlZm9yZVxuICogaXQgdGhlIGNvbnN0cnVjdG9yIHRvb2sgYG1pbmltYWxNb2RlYDsgZnJvbSBpdCwgYHsgbWluaW1hbE1vZGUsIHJvdXRlIH1gLCBhbmRcbiAqIGl0IHRocm93cyB3aXRob3V0IGEgYHJvdXRlYCAtIGBuZXh0LXNlcnZlci5qc2AgcGFzc2VzIGBcImltYWdlXCJgLiBOZWl0aGVyIGZvcm1cbiAqIGNhbiBzdGFuZCBpbiBmb3IgdGhlIG90aGVyOiBhbiBvbGRlciBgbmV4dGAgdGFrZXMgdGhlIG9wdGlvbnMgb2JqZWN0IGFzIGFcbiAqIHRydXRoeSBgbWluaW1hbE1vZGVgLCBhbmQgMTYuMy44IHJlamVjdHMgYSBiYXJlIGBmYWxzZWAuXG4gKlxuICogVG9sZCBhcGFydCBieSB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIHRoZSBvbGRlciBmb3JtIHJhdGhlciB0aGFuIGJ5XG4gKiB0aGUgdmVyc2lvbiwgd2hpY2ggYSBjYW5hcnkgZG9lcyBub3Qgb3JkZXIsIG9yIGJ5IGl0cyBwcml2YXRlIGZpZWxkczogMTYuMy44XG4gKiBkZXN0cnVjdHVyZXMgYSBiYXJlIGBmYWxzZWAgaW50byBubyBgcm91dGVgIGFuZCB0aHJvd3MuIE9ubHkgdGhhdCB0aHJvd1xuICogc2VsZWN0cyB0aGUgbmV3ZXIgZm9ybTsgYW55IG90aGVyIGVycm9yIGZyb20gdGhlIGNvbnN0cnVjdG9yIGlzIHJldGhyb3duXG4gKiByYXRoZXIgdGhhbiByZWFkIGFzIGEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld0ltYWdlUmVzcG9uc2VDYWNoZShcbiAgUmVzcG9uc2VDYWNoZTogTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0sXG4pOiBJbnN0YW5jZVR5cGU8TmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0+IHtcbiAgY29uc3QgTGVnYWN5ID0gUmVzcG9uc2VDYWNoZSBhcyB1bmtub3duIGFzIG5ldyAoXG4gICAgbWluaW1hbE1vZGU6IGJvb2xlYW4sXG4gICkgPT4gSW5zdGFuY2VUeXBlPHR5cGVvZiBSZXNwb25zZUNhY2hlPjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeShmYWxzZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghU3RyaW5nKChlcnIgYXMgRXJyb3IpPy5tZXNzYWdlKS5pbmNsdWRlcyhcInJlcXVpcmVzIGEgc291cmNlIHJvdXRlXCIpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2VDYWNoZSh7IG1pbmltYWxNb2RlOiBmYWxzZSwgcm91dGU6IFwiaW1hZ2VcIiB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGBmb3JtYXREeW5hbWljSW1wb3J0UGF0aGAgZnJvbSBgbmV4dC9kaXN0L2xpYi9mb3JtYXQtZHluYW1pYy1pbXBvcnQtcGF0aC5qc2AsXG4gKiByZXN0YXRlZDogYG5leHQgYnVpbGRgIGRvZXNuJ3QgdHJhY2UgdGhhdCBtb2R1bGUgaW50byB0aGUgZGVwbG95bWVudCwgc29cbiAqIGxvYWRpbmcgaXQgZmFpbGVkIGV2ZXJ5IGltYWdlIHJlcXVlc3Qgd2l0aCB0aGUgY2FjaGUgb24uIE5vIGBmaWxlOi8vYCBjYXNlOlxuICogdGhlIGFkYXB0ZXIgYWxyZWFkeSB0dXJuZWQgb25lIGludG8gYSBwYXRoIChgZGlzdFJlbGF0aXZlQ2FjaGVIYW5kbGVyYCkuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFuZGxlclVybChkaXN0RGlyOiBzdHJpbmcsIGNhY2hlSGFuZGxlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoXG4gICAgaXNBYnNvbHV0ZVBhdGgoY2FjaGVIYW5kbGVyKSA/IGNhY2hlSGFuZGxlciA6IGpvaW4oZGlzdERpciwgY2FjaGVIYW5kbGVyKSxcbiAgKS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIGBpbWFnZXNgLCB3aXRoIGl0cyBgc2V0YCBtb3ZlZCBvZmYgdGhlIHJlc3BvbnNlJ3MgY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBgUmVzcG9uc2VDYWNoZWAgYXdhaXRzIHRoZSB3cml0ZSBvZiBhIGZyZXNobHkgb3B0aW1pemVkIGltYWdlIGJlZm9yZSBpdCBoYW5kc1xuICogdGhlIGltYWdlIGJhY2ssIHNvIGV2ZXJ5IG1pc3MgcGFpZCBhbiBTMyBgUHV0T2JqZWN0YCAofjMwIG1zIG1lYXN1cmVkKSBiZWZvcmVcbiAqIGl0cyBmaXJzdCBieXRlLiBUaGUgd3JpdGUgaXMgcmVnaXN0ZXJlZCB3aXRoIGB3YWl0VW50aWxgIGluc3RlYWQsIHdoaWNoIHRoZVxuICogcnVudGltZSBkcmFpbnMgYmVmb3JlIGEgTGFtYmRhIGludm9jYXRpb24gcmV0dXJucyBvciBhIGNvbnRhaW5lciBzaHV0cyBkb3duLFxuICogc28gaXQgc3RpbGwgbGFuZHMuIEEgZmFpbGVkIHdyaXRlIGlzIGxvZ2dlZDsgdGhlIG5leHQgcmVxdWVzdCBvcHRpbWl6ZXMgdGhlXG4gKiBpbWFnZSBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBpdCB3b3VsZCBoYXZlIGRvbmUgYW55d2F5LlxuICovXG5mdW5jdGlvbiBkZWZlcldyaXRlcyhcbiAgaW1hZ2VzOiBJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdLFxuICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuKTogSW1hZ2VDYWNoZVtcImltYWdlc1wiXSB7XG4gIGNvbnN0IGRlZmVycmVkID0gT2JqZWN0LmNyZWF0ZShpbWFnZXMpIGFzIEltYWdlQ2FjaGVbXCJpbWFnZXNcIl07XG4gIGRlZmVycmVkLnNldCA9ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJpbWFnZXNcIl1bXCJzZXRcIl0+KSA9PiB7XG4gICAgd2FpdFVudGlsKFxuICAgICAgaW1hZ2VzLnNldCguLi5hcmdzKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYWNoZSBhbiBvcHRpbWl6ZWQgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICByZXR1cm4gZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRUZXh0KFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICBib2R5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgcmVzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgcmVzLmVuZChib2R5KTtcbn1cblxuLyoqXG4gKiBgbWFuaWZlc3QuY29uZmlnLmltYWdlc2AsIG9uY2UgdGhlIG1hbmlmZXN0IGlzIGtub3duIHRvIGJlIG9uZSB0aGlzIHJ1bnRpbWVcbiAqIHJlYWRzICh3aXRoIGBleHBlcmltZW50YWxgLCDigKYpLiBUaGUgZmllbGRzIGFyZSB0eXBlZCBgdW5rbm93bmAsIHNvIG9ubHkgdGhlXG4gKiB2ZXJzaW9uIGNhdGNoZXMgYSBtYW5pZmVzdCBhbm90aGVyIGNkay1uZXh0anMgd3JvdGU7IGBOZXh0anNCdWlsZGAgcmVqZWN0cyBvbmVcbiAqIGF0IHN5bnRoLCB3aGljaCBhIGhhbmQtd2lyZWQgZnVuY3Rpb24gc2tpcHMuXG4gKi9cbmZ1bmN0aW9uIG1hbmlmZXN0SW1hZ2VzKFxuICBtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0LFxuKTogTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdIHtcbiAgaWYgKG1hbmlmZXN0LmNka05leHRqc1ZlcnNpb24gIT09IENES19ORVhUSlNfVkVSU0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgYWRhcHRlciBtYW5pZmVzdCB3YXMgd3JpdHRlbiBieSBjZGstbmV4dGpzIGAgK1xuICAgICAgICBgJHttYW5pZmVzdC5jZGtOZXh0anNWZXJzaW9uID8/IFwiKHVua25vd24pXCJ9LCBidXQgdGhpcyBydW50aW1lIGlzIGAgK1xuICAgICAgICBgY2RrLW5leHRqcyAke0NES19ORVhUSlNfVkVSU0lPTn0uIFJlYnVpbGQgdGhlIGFwcCB3aXRoIHRoaXMgdmVyc2lvbi5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1hbmlmZXN0LmNvbmZpZy5pbWFnZXMgYXMgTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpbWl6ZXIncyBgbmV4dENvbmZpZ2AsIGZyb20gdGhlIGFkYXB0ZXIgbWFuaWZlc3QsIHdoaWNoIGNvcGllZCBpdCBvdXRcbiAqIG9mIHRoZSBidWlsZCdzIGBjdHguY29uZmlnYCAoYEFkYXB0ZXJNYW5pZmVzdENvbmZpZy5pbWFnZXNgKTogYWxyZWFkeSByZXNvbHZlZFxuICogYW5kIGRlZmF1bHRlZCwgc28gbmVpdGhlciBgZ2V0TmV4dENvbmZpZ1J1bnRpbWVgIG5vciBgaW1hZ2VDb25maWdEZWZhdWx0YCBpc1xuICogbmVlZGVkLiBPbmx5IHRoZSBmaWVsZHMgTmV4dCdzIGltYWdlIGNvZGUgcmVhZHM7IHRoZSBjYXN0IGlzIGJlY2F1c2UgdGhlXG4gKiBtYW5pZmVzdCBzdG9yZXMgdGhlbSBhcyBKU09OLlxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2VSdW50aW1lKHsgbWFuaWZlc3QgfTogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zKSB7XG4gIGNvbnN0IG5leHQ6IE5leHRJbWFnZU1vZHVsZXMgPSB7XG4gICAgb3B0aW1pemVyOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIiksXG4gICAgc2VydmVTdGF0aWM6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3NlcnZlLXN0YXRpYy5qc1wiKSxcbiAgfTtcbiAgY29uc3QgeyBjb25maWcgfSA9IG1hbmlmZXN0O1xuICBjb25zdCBuZXh0Q29uZmlnID0ge1xuICAgIGJhc2VQYXRoOiBjb25maWcuYmFzZVBhdGgsXG4gICAgYXNzZXRQcmVmaXg6IGNvbmZpZy5hc3NldFByZWZpeCxcbiAgICBpbWFnZXM6IG1hbmlmZXN0SW1hZ2VzKG1hbmlmZXN0KSxcbiAgICBleHBlcmltZW50YWw6IGNvbmZpZy5leHBlcmltZW50YWwsXG4gICAgY2FjaGVIYW5kbGVyOiBjb25maWcuY2FjaGVIYW5kbGVyID8/IHVuZGVmaW5lZCxcbiAgICBjYWNoZU1heE1lbW9yeVNpemU6IGNvbmZpZy5jYWNoZU1heE1lbW9yeVNpemUsXG4gIH0gYXMgTmV4dENvbmZpZ0NvbXBsZXRlO1xuICByZXR1cm4geyBuZXh0LCBuZXh0Q29uZmlnIH07XG59XG4iXX0=
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvZEEsc0RBY0M7QUFsZUQsc0RBQXNEO0FBQ3REOzs7Ozs7OztHQVFHO0FBQ0gseUNBQStEO0FBQy9ELHVDQUF5QztBQUl6Qyw4Q0FBdUU7QUFDdkUsK0NBQStFO0FBQy9FLDhEQUEyRDtBQUUzRCxpREFBNEM7QUFDNUMsaUNBQThDO0FBa0Y5QyxNQUFhLHFCQUFxQjtJQUtJO0lBSm5CLEVBQUUsR0FBRyxJQUFBLGVBQVEsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sQ0FBdUM7SUFDN0MsVUFBVSxDQUF1QjtJQUV6QyxZQUFvQyxPQUE4QjtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUFHLENBQUM7SUFFdEU7Ozs7OztPQU1HO0lBQ0ksU0FBUztRQUNkLDRFQUE0RTtRQUM1RSw4Q0FBOEM7UUFDOUMsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7SUFDNUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQ2pCLEdBQXdCLEVBQ3hCLEdBQXVCLEVBQ3ZCLEdBQVEsRUFDUixTQUE4QztRQUU5Qyw2RUFBNkU7UUFDN0UsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLE1BQU0sRUFDSixVQUFVLEVBQ1YsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixj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LENBQUM7UUFDaEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO1FBQ2pDLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWSxJQUFJLFNBQVM7UUFDOUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtLQUN4QixDQUFDO0lBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyoqXG4gKiBgL19uZXh0L2ltYWdlYCwgZm9sZGVkIGludG8gdGhlIHJ1bnRpbWUgY29yZS5cbiAqXG4gKiBUaGUgcmVzcG9uc2UgaXMgd3JpdHRlbiB0byBhIHtAbGluayBTaGltU2VydmVyUmVzcG9uc2V9IHJhdGhlciB0aGFuIHN0cmFpZ2h0IHRvXG4gKiBhIExhbWJkYSByZXNwb25zZSBzdHJlYW0sIHNvIGl0IGNvbXBvc2VzIHdpdGggcm91dGluZzogZGlzcGF0Y2ggb25seSBjbGFzc2lmaWVzXG4gKiBhIHJlcXVlc3QgYXMgaW1hZ2Ugb3B0aW1pemF0aW9uICphZnRlciogbWlkZGxld2FyZSBoYXMgaGFkIGl0LCB3aGljaCBpcyB3aGF0XG4gKiBtYWtlcyBgTmV4dFJlc3BvbnNlLnJld3JpdGUoKWAgb250byBhbiBpbWFnZSB3b3JrLiBUaGF0IGlzIGFsc28gd2h5IHRoZXJlIGlzIG5vXG4gKiBsb25nZXIgYSBkZWRpY2F0ZWQgaW1hZ2Ugb3B0aW1pemF0aW9uIExhbWJkYSDigJQgbWlkZGxld2FyZSBuZXZlciByYW4gZm9yIGl0LlxuICovXG5pbXBvcnQgeyBpc0Fic29sdXRlIGFzIGlzQWJzb2x1dGVQYXRoLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnQ29tcGxldGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9jb25maWctc2hhcmVkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENhY2hlZFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNoaW1JbmNvbWluZ01lc3NhZ2UgfSBmcm9tIFwiLi9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IGFzU2VydmVyUmVzcG9uc2UsIFNoaW1TZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL2h0dHAvcmVzcG9uc2VcIjtcbmltcG9ydCB7IGV4dHJhY3RFdGFnLCBmZXRjaEZyb21TMywgcmVzb2x2ZUVycm9yUmVzcG9uc2UgfSBmcm9tIFwiLi9pbWFnZS11dGlsc1wiO1xuaW1wb3J0IHsgQ0RLX05FWFRKU19WRVJTSU9OIH0gZnJvbSBcIi4uL2Nkay1uZXh0anMtdmVyc2lvblwiO1xuaW1wb3J0IHsgQWRhcHRlck1hbmlmZXN0IH0gZnJvbSBcIi4vbWFuaWZlc3RcIjtcbmltcG9ydCB7IG5leHRNb2R1bGUgfSBmcm9tIFwiLi9uZXh0LW1vZHVsZXNcIjtcbmltcG9ydCB7IGZpcnN0VmFsdWUsIHMzQ2xpZW50IH0gZnJvbSBcIi4vdXRpbFwiO1xuXG4vKipcbiAqIFJlcXVpcmVkIHRocm91Z2gge0BsaW5rIG5leHRNb2R1bGV9IHJhdGhlciB0aGFuIGltcG9ydGVkLCBiZWNhdXNlIGBuZXh0YCBpc1xuICogZXh0ZXJuYWwgdG8gdGhlIHNoZWxsIGJ1bmRsZXMgYW5kIGRvZXMgbm90IHJlc29sdmUgZnJvbSB3aGVyZSB0aGV5IHNpdC4gRXZlcnlcbiAqIHR5cGUgaGVyZSBpcyBzdGlsbCB0aGUgcmVhbCBvbmU6IGB0eXBlb2YgaW1wb3J0KC4uLilgIGlzIGVyYXNlZC5cbiAqL1xuaW50ZXJmYWNlIE5leHRJbWFnZU1vZHVsZXMge1xuICByZWFkb25seSBvcHRpbWl6ZXI6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiKTtcbiAgcmVhZG9ubHkgc2VydmVTdGF0aWM6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL3NlcnZlLXN0YXRpYy5qc1wiKTtcbn1cblxuLyoqIFRoZSBtb2R1bGVzIG9ubHkgdGhlIGltYWdlIGNhY2hlIG5lZWRzLCBsb2FkZWQgd2l0aCBpdC4gKi9cbmludGVyZmFjZSBOZXh0SW1hZ2VDYWNoZU1vZHVsZXMge1xuICByZWFkb25seSByZXNwb25zZUNhY2hlOiB0eXBlb2YgaW1wb3J0KFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZS9pbmRleC5qc1wiKTtcbn1cblxuLyoqIEEgYGNhY2hlSGFuZGxlcmAgY2xhc3MsIGFzIGBuZXh0LmNvbmZpZ2AncyBgY2FjaGVIYW5kbGVyYCBtb2R1bGUgZXhwb3J0cyBpdC4gKi9cbnR5cGUgQ2FjaGVIYW5kbGVyQ2xhc3MgPSBuZXcgKFxuICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbikgPT4gTm9uTnVsbGFibGU8XG4gIENvbnN0cnVjdG9yUGFyYW1ldGVyczxcbiAgICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiSW1hZ2VPcHRpbWl6ZXJDYWNoZVwiXVxuICA+WzBdW1wiY2FjaGVIYW5kbGVyXCJdXG4+O1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlT3B0aW1pemVyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRlcGxveW1lbnRSb290OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1hbmlmZXN0OiBBZGFwdGVyTWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBgQ0RLX05FWFRKU19TVEFUSUNfQVNTRVRTX0JVQ0tFVF9OQU1FYC4gRW1wdHkgd2hlbiB0aGUgc291cmNlcyBhcmUgb24gZGlza1xuICAgKiAoYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2ApLCB3aGljaCBzZW5kcyBldmVyeSBvbmUgdG8gYGZldGNoSW50ZXJuYWxgLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgQ0RLX05FWFRKU19TVEFUSUNfQVNTRVRTX0tFWV9QUkVGSVhgLiBFbXB0eSB3aGVuIHRoZSBhc3NldHMgc2l0IGF0IHRoZSByb290XG4gICAqIG9mIHRoZSBidWNrZXQsIHdoaWNoIGlzIHRoZSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0S2V5UHJlZml4OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXF1ZXN0cyBhIGxvY2FsIHNvdXJjZSBmcm9tIHRoZSBhcHAncyBvd24gcm91dGVzLCBmb3Igb25lIFMzIGhhcyBubyBmaWxlXG4gICAqIGZvcjogYDxJbWFnZSBzcmM9XCIvYXBpL2F2YXRhcj9pZD00MlwiPmAsIHNlcnZlZCBieSBhIHJvdXRlIGhhbmRsZXIuIGBuZXh0XG4gICAqIHN0YXJ0YCBmZXRjaGVzIGV2ZXJ5IGxvY2FsIHNvdXJjZSB0aGF0IHdheSAoYGZldGNoSW50ZXJuYWxJbWFnZWApOyBoZXJlIGl0XG4gICAqIGlzIHRoZSBmYWxsYmFjaywgc2luY2UgbmVhcmx5IGV2ZXJ5IHNvdXJjZSBpcyBhIGZpbGUsIGFuZCBhIGBHZXRPYmplY3RgIGlzXG4gICAqIGZhciBjaGVhcGVyIHRoYW4gYSByb3V0ZSBpbnZvY2F0aW9uLlxuICAgKlxuICAgKiBHaXZlbiB0aGUgcmVxdWVzdCBiZWluZyBvcHRpbWl6ZWQsIGZvciBpdHMgYXV0aG9yaXR5OyBsaWtlIGBuZXh0IHN0YXJ0YCxcbiAgICogdGhlIHZpZXdlcidzIGNvb2tpZXMgYW5kIG90aGVyIGhlYWRlcnMgYXJlIG5vdCB0aGUgaW1wbGVtZW50YXRpb24ncyB0b1xuICAgKiBmb3J3YXJkLiBBbmQgZ2l2ZW4gYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgcGFzdCB3aGljaCBpdCBzdG9wc1xuICAgKiByZWFkaW5nIGFuZCBhbnN3ZXJzIHtAbGluayBJbnRlcm5hbEltYWdlUmVzcG9uc2UudG9vTGFyZ2V9LlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hJbnRlcm5hbDogKFxuICAgIGhyZWY6IHN0cmluZyxcbiAgICByZXE6IFNoaW1JbmNvbWluZ01lc3NhZ2UsXG4gICAgbWF4aW11bVJlc3BvbnNlQm9keTogbnVtYmVyLFxuICApID0+IFByb21pc2U8SW50ZXJuYWxJbWFnZVJlc3BvbnNlPjtcbiAgLyoqXG4gICAqIExvYWRzIHRoZSBgY2FjaGVIYW5kbGVyYCBtb2R1bGUgZnJvbSBpdHMgZmlsZSBVUkwuIEEgc2VhbSBmb3IgdGVzdHMsIHdoaWNoXG4gICAqIHJ1biBhcyBDb21tb25KUyBhbmQgY2Fubm90IGBpbXBvcnQoKWAgYSBVUkwuXG4gICAqIEBkZWZhdWx0IC0gYGltcG9ydCgpYFxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0TW9kdWxlPzogKHVybDogc3RyaW5nKSA9PiBQcm9taXNlPHVua25vd24+O1xufVxuXG4vKiogVGhlIHJlc3BvbnNlIHtAbGluayBJbWFnZU9wdGltaXplck9wdGlvbnMuZmV0Y2hJbnRlcm5hbH0gZ290LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlcm5hbEltYWdlUmVzcG9uc2Uge1xuICByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IGhlYWRlcnM6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPj47XG4gIHJlYWRvbmx5IGJvZHk6IEJ1ZmZlcjtcbiAgLyoqXG4gICAqIFRoZSBgZnVuY3Rpb25Hcm91cHNgIGdyb3VwIHdob3NlIHBhY2thZ2UgaGFzIHRoZSByb3V0ZSB0aGF0IHNlcnZlcyB0aGVcbiAgICogc291cmNlLCB3aGVuIGl0IGlzIG5vdCB0aGlzIGZ1bmN0aW9uJ3M6IHRoZXJlIGlzIG5vIHJlc3BvbnNlIHRvIHVzZSwgYW5kXG4gICAqIHRoZSBvcHRpbWl6ZXIgYW5zd2VycyBhbiBleHBsaWNpdCA1MDIgcmF0aGVyIHRoYW4gYSBcIm5vdCBhIHZhbGlkIGltYWdlXCIuXG4gICAqL1xuICByZWFkb25seSBvdGhlckdyb3VwPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGJvZHkgcGFzc2VkIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWAsIHNvIGl0IHdhcyBjdXQgb2ZmOiBhIDQxMywgYXNcbiAgICogYG5leHQgc3RhcnRgIGFuc3dlcnMuXG4gICAqL1xuICByZWFkb25seSB0b29MYXJnZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHMzID0gczNDbGllbnQoKTtcbiAgcHJpdmF0ZSBsb2FkZWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPjtcbiAgcHJpdmF0ZSBpbWFnZUNhY2hlPzogUHJvbWlzZTxJbWFnZUNhY2hlPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbWFnZU9wdGltaXplck9wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFwcCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAgYXQgYWxsLiBgbmV4dCBzdGFydGAgYW5zd2VycyA0MDRcbiAgICogd2hlbiBgaW1hZ2VzLnVub3B0aW1pemVkYCBpcyBzZXQgb3IgYSBub24tZGVmYXVsdCBgbG9hZGVyYCBpcyBjb25maWd1cmVkXG4gICAqIChgbmV4dC1zZXJ2ZXIuanNgKSwgYW5kIHNvIGRvZXMgdGhlIHJ1bnRpbWU6IG90aGVyd2lzZSBhbnlvbmUgY2FuIG1ha2UgdGhlXG4gICAqIGNvbXB1dGUgcnVuIHNoYXJwIGFuZCB3cml0ZSB0aGUgaW1hZ2UgY2FjaGUgb24gYW4gZW5kcG9pbnQgdGhlIGFwcCB0dXJuZWRcbiAgICogb2ZmLlxuICAgKi9cbiAgcHVibGljIGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBGcm9tIHRoZSBtYW5pZmVzdCBhbG9uZTogYW4gYXBwIHRoYXQgdHVybmVkIGltYWdlcyBvZmYgc2hvdWxkbid0IGxvYWQgdGhlXG4gICAgLy8gb3B0aW1pemVyIChhbmQgYHNoYXJwYCkganVzdCB0byBhbnN3ZXIgNDA0LlxuICAgIGNvbnN0IGltYWdlcyA9IG1hbmlmZXN0SW1hZ2VzKHRoaXMub3B0aW9ucy5tYW5pZmVzdCk7XG4gICAgcmV0dXJuIGltYWdlcy5sb2FkZXIgPT09IFwiZGVmYXVsdFwiICYmICFpbWFnZXMudW5vcHRpbWl6ZWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaGFuZGxlKFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgICB1cmw6IFVSTCxcbiAgICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBSZXNvbHZlZCBvbiB0aGUgZmlyc3QgaW1hZ2UgcmVxdWVzdCByYXRoZXIgdGhhbiBhdCBjb2xkIHN0YXJ0OiBhbiBhcHAgd2l0aFxuICAgIC8vIG5vIGA8SW1hZ2U+YCBzaG91bGQgbm90IHBheSBmb3IgdGhlIGBuZXh0YCBtb2R1bGUgbG9hZHMuXG4gICAgdGhpcy5sb2FkZWQgPz89IGxvYWRJbWFnZVJ1bnRpbWUodGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IHRoaXMubG9hZGVkO1xuICAgIGNvbnN0IGltYWdlc0NvbmZpZyA9IG5leHRDb25maWcuaW1hZ2VzO1xuICAgIGNvbnN0IHtcbiAgICAgIEltYWdlRXJyb3IsXG4gICAgICBJbWFnZU9wdGltaXplckNhY2hlLFxuICAgICAgZmV0Y2hFeHRlcm5hbEltYWdlLFxuICAgICAgaW1hZ2VPcHRpbWl6ZXIsXG4gICAgICBzZW5kUmVzcG9uc2UsXG4gICAgfSA9IG5leHQub3B0aW1pemVyO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IEltYWdlT3B0aW1pemVyQ2FjaGUudmFsaWRhdGVQYXJhbXMoXG4gICAgICAgIHJlcSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8XG4gICAgICAgICAgdHlwZW9mIEltYWdlT3B0aW1pemVyQ2FjaGUudmFsaWRhdGVQYXJhbXNcbiAgICAgICAgPlswXSxcbiAgICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKHVybC5zZWFyY2hQYXJhbXMpLFxuICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBpZiAoXCJlcnJvck1lc3NhZ2VcIiBpbiBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHNlbmRUZXh0KHJlcywgNDAwLCBwYXJhbXMuZXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBocmVmLCBpc0Fic29sdXRlIH0gPSBwYXJhbXM7XG4gICAgICBjb25zdCBvcHRpbWl6ZSA9IGFzeW5jIChwcmV2aW91c0NhY2hlRW50cnk/OiBQcmV2aW91c0ltYWdlRW50cnkpID0+IHtcbiAgICAgICAgY29uc3QgdXBzdHJlYW0gPSBpc0Fic29sdXRlXG4gICAgICAgICAgPyBhd2FpdCBmZXRjaEV4dGVybmFsSW1hZ2UoXG4gICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5kYW5nZXJvdXNseUFsbG93TG9jYWxJUCxcbiAgICAgICAgICAgICAgaW1hZ2VzQ29uZmlnLm1heGltdW1SZXNwb25zZUJvZHksXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5tYXhpbXVtUmVkaXJlY3RzLFxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogYXdhaXQgdGhpcy5mZXRjaExvY2FsKFxuICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgICAgIG5leHRDb25maWcsXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5tYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgICBuZXh0Lm9wdGltaXplcixcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgb3B0aW1pemVkID0gYXdhaXQgaW1hZ2VPcHRpbWl6ZXIoXG4gICAgICAgICAgdXBzdHJlYW0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4cGVyaW1lbnRhbDogbmV4dENvbmZpZy5leHBlcmltZW50YWwsXG4gICAgICAgICAgICBpbWFnZXM6IHtcbiAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlBbGxvd1NWRzogaW1hZ2VzQ29uZmlnLmRhbmdlcm91c2x5QWxsb3dTVkcsXG4gICAgICAgICAgICAgIG1pbmltdW1DYWNoZVRUTDogaW1hZ2VzQ29uZmlnLm1pbmltdW1DYWNoZVRUTCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGlzRGV2OiBmYWxzZSwgcHJldmlvdXNDYWNoZUVudHJ5IH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gYGltYWdlT3B0aW1pemVyYCByZXBvcnRzIGEgZmFpbGVkIG9wdGltaXphdGlvbiBieSByZXR1cm5pbmcgdGhlXG4gICAgICAgIC8vIHVudG91Y2hlZCB1cHN0cmVhbSBpbWFnZSBhbG9uZ3NpZGUgYGVycm9yYCByYXRoZXIgdGhhbiB0aHJvd2luZywgc29cbiAgICAgICAgLy8gd2l0aG91dCB0aGlzIGEgYnJva2VuIGBzaGFycGAgaW5zdGFsbCBzZXJ2ZXMgZnVsbC1zaXplIG9yaWdpbmFscyB3aXRoXG4gICAgICAgIC8vIGEgMjAwIGluZGVmaW5pdGVseSBhbmQgbm90aGluZyBpbiB0aGUgbG9ncyBzYXlzIHdoeS5cbiAgICAgICAgaWYgKG9wdGltaXplZC5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIG9wdGltaXplICR7aHJlZn0sIHNlcnZpbmcgdGhlIHVub3B0aW1pemVkIG9yaWdpbmFsOmAsXG4gICAgICAgICAgICBvcHRpbWl6ZWQuZXJyb3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW1pemVkO1xuICAgICAgfTtcblxuICAgICAgLy8gTmV4dCdzIG93biByZXNwb25zZSB3cml0ZXIsIHJhdGhlciB0aGFuIGEgcmVzdGF0ZW1lbnQgb2YgaXQsIHNvIHRoZVxuICAgICAgLy8gaGVhZGVycyBgbmV4dCBzdGFydGAgc2VuZHMgY29tZSB3aXRoIGl0OiB0aGUgeWVhci1sb25nIGBpbW11dGFibGVgIGZvclxuICAgICAgLy8gYSBgL19uZXh0L3N0YXRpYy9tZWRpYWAgc3JjLCBgSWYtTm9uZS1NYXRjaGAgYXMgYGZyZXNoYCByZWFkcyBpdCAod2Vha1xuICAgICAgLy8gYW5kIGxpc3RlZCB0YWdzLCBgQ2FjaGUtQ29udHJvbDogbm8tY2FjaGVgKSwgYSBgQ29udGVudC1EaXNwb3NpdGlvbmBcbiAgICAgIC8vIHRoYXQgUkZDIDU5ODctZW5jb2RlcyBhIGZpbGVuYW1lIGB3cml0ZUhlYWRgIHdvdWxkIHJlamVjdCBhc1xuICAgICAgLy8gbm9uLWxhdGluMSwgYENvbnRlbnQtTGVuZ3RoYCwgYW5kIG5vIGJvZHkgZm9yIEhFQUQuIFRoZSByZXN0YXRlZFxuICAgICAgLy8gdmVyc2lvbiBoYWQgZHJpZnRlZCBvbiBldmVyeSBvbmUgb2YgdGhvc2UuXG4gICAgICBjb25zdCBzZW5kID0gKFxuICAgICAgICBleHRlbnNpb246IHN0cmluZyxcbiAgICAgICAgYnVmZmVyOiBCdWZmZXIsXG4gICAgICAgIGV0YWc6IHN0cmluZyxcbiAgICAgICAgeENhY2hlOiBcIk1JU1NcIiB8IFwiSElUXCIgfCBcIlNUQUxFXCIsXG4gICAgICAgIG1heEFnZTogbnVtYmVyLFxuICAgICAgKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gMjAwO1xuICAgICAgICBzZW5kUmVzcG9uc2UoXG4gICAgICAgICAgcmVxIGFzIHVua25vd24gYXMgUGFyYW1ldGVyczx0eXBlb2Ygc2VuZFJlc3BvbnNlPlswXSxcbiAgICAgICAgICBhc1NlcnZlclJlc3BvbnNlKHJlcyksXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICBleHRlbnNpb24sXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGV0YWcsXG4gICAgICAgICAgcGFyYW1zLmlzU3RhdGljLFxuICAgICAgICAgIHhDYWNoZSxcbiAgICAgICAgICBpbWFnZXNDb25maWcsXG4gICAgICAgICAgbWF4QWdlLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgLy8gYG5leHQgc3RhcnRgJ3MgYGhhbmRsZU5leHRJbWFnZVJlcXVlc3RgLCBzdGVwIGZvciBzdGVwOiBhXG4gICAgICAvLyBgUmVzcG9uc2VDYWNoZWAgb3ZlciBhbiBgSW1hZ2VPcHRpbWl6ZXJDYWNoZWAgYmFja2VkIGJ5IHRoZSBhcHAnc1xuICAgICAgLy8gYGNhY2hlSGFuZGxlcmAsIHNvIGEgaGl0IHNraXBzIHRoZSBmZXRjaCBhbmQgYHNoYXJwYCwgYSBzdGFsZSBlbnRyeSBpc1xuICAgICAgLy8gc2VydmVkIHdoaWxlIGl0IGlzIHJlZ2VuZXJhdGVkLCBhbmQgY29uY3VycmVudCBtaXNzZXMgZm9yIG9uZSBpbWFnZVxuICAgICAgLy8gb3B0aW1pemUgaXQgb25jZS4gVGhlIGFwcCdzIGBjYWNoZUhhbmRsZXJgIGlzIHRoZSBTMyBjYWNoZSwgd2hpY2ggdGhlXG4gICAgICAvLyBhZGFwdGVyIHR1cm5zIG9uIHdpdGggYGltYWdlcy5jdXN0b21DYWNoZUhhbmRsZXJgOiB3aXRoIG5vIENETiBpbiBmcm9udFxuICAgICAgLy8gKHRoZSBSZWdpb25hbCB0eXBlcykgZXZlcnkgcmVxdWVzdCB3b3VsZCBvdGhlcndpc2UgcnVuIGBzaGFycGAgYWdhaW4sXG4gICAgICAvLyBhbmQgYmVoaW5kIENsb3VkRnJvbnQgZWFjaCBlZGdlIG1pc3MgaXMgYW4gUzMgcmVhZCBpbnN0ZWFkLlxuICAgICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSh0aGlzLmxvYWRlZCk7XG4gICAgICBjb25zdCBlbnRyeSA9IGF3YWl0IGNhY2hlLnJlc3BvbnNlcy5nZXQoXG4gICAgICAgIEltYWdlT3B0aW1pemVyQ2FjaGUuZ2V0Q2FjaGVLZXkocGFyYW1zKSxcbiAgICAgICAgYXN5bmMgKHsgcHJldmlvdXNDYWNoZUVudHJ5IH0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IGJ1ZmZlciwgY29udGVudFR5cGUsIG1heEFnZSwgZXRhZywgdXBzdHJlYW1FdGFnIH0gPVxuICAgICAgICAgICAgYXdhaXQgb3B0aW1pemUocHJldmlvdXNDYWNoZUVudHJ5IGFzIFByZXZpb3VzSW1hZ2VFbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIGtpbmQ6IElNQUdFX0tJTkQsXG4gICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgZXRhZyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBuZXh0LnNlcnZlU3RhdGljLmdldEV4dGVuc2lvbihjb250ZW50VHlwZSkgPz8gXCJcIixcbiAgICAgICAgICAgICAgdXBzdHJlYW1FdGFnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhY2hlQ29udHJvbDogeyByZXZhbGlkYXRlOiBtYXhBZ2UsIGV4cGlyZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHJvdXRlS2luZDogSU1BR0VfS0lORCxcbiAgICAgICAgICBpbmNyZW1lbnRhbENhY2hlOiBkZWZlcldyaXRlcyhjYWNoZS5pbWFnZXMsIHdhaXRVbnRpbCksXG4gICAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgLy8gQSBzdGFsZSBlbnRyeSBpcyBzZXJ2ZWQgYXQgb25jZSBhbmQgcmVnZW5lcmF0ZWQgaW4gdGhlIGJhY2tncm91bmQ7XG4gICAgICAgICAgLy8gd2l0aG91dCB0aGlzLCBhIExhbWJkYSBjb3VsZCBmcmVlemUgd2l0aCB0aGUgcmVnZW5lcmF0aW9uIGhhbGYgZG9uZS5cbiAgICAgICAgICB3YWl0VW50aWwsXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJyZXNwb25zZXNcIl1bXCJnZXRcIl0+WzJdLFxuICAgICAgKTtcbiAgICAgIC8vIEEgZmFpbGVkIHJlbmRlciwgZnJvbSBuZXh0IDE2LjQ7IGBuZXh0LXNlcnZlci5qc2AgcmV0aHJvd3MgaXQgdGhlIHNhbWVcbiAgICAgIC8vIHdheS4gVGhlIGdlbmVyYXRvciBhYm92ZSB0aHJvd3MgaW5zdGVhZCwgc28gdGhpcyBpcyB0aGUgdHlwZSdzIGNhc2UuXG4gICAgICBpZiAoZW50cnkgJiYgXCJlcnJvclwiIGluIGVudHJ5KSB7XG4gICAgICAgIHRocm93IGVudHJ5LmVycm9yO1xuICAgICAgfVxuICAgICAgY29uc3QgdmFsdWUgPSBlbnRyeT8udmFsdWUgYXNcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBraW5kOiBzdHJpbmc7XG4gICAgICAgICAgICBleHRlbnNpb246IHN0cmluZztcbiAgICAgICAgICAgIGJ1ZmZlcjogQnVmZmVyO1xuICAgICAgICAgICAgZXRhZzogc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfCBudWxsXG4gICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHZhbHVlPy5raW5kICE9PSBJTUFHRV9LSU5EKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBpbWFnZSBjYWNoZSByZXR1cm5lZCBubyBpbWFnZSBlbnRyeVwiKTtcbiAgICAgIH1cbiAgICAgIHNlbmQoXG4gICAgICAgIHZhbHVlLmV4dGVuc2lvbixcbiAgICAgICAgdmFsdWUuYnVmZmVyLFxuICAgICAgICB2YWx1ZS5ldGFnLFxuICAgICAgICBlbnRyeSEuaXNNaXNzID8gXCJNSVNTXCIgOiBlbnRyeSEuaXNTdGFsZSA/IFwiU1RBTEVcIiA6IFwiSElUXCIsXG4gICAgICAgIGVudHJ5IS5jYWNoZUNvbnRyb2w/LnJldmFsaWRhdGUgfHwgMCxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgbWVzc2FnZSB9ID0gcmVzb2x2ZUVycm9yUmVzcG9uc2UoZXJyb3IsIEltYWdlRXJyb3IpO1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPj0gNTAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbWFnZSBvcHRpbWl6YXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgICB9XG4gICAgICBzZW5kVGV4dChyZXMsIHN0YXR1c0NvZGUsIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmljdGVkIG9uIGZhaWx1cmUsIGFzIGBFbnRyeXBvaW50UmVnaXN0cnkubG9hZGAgZXZpY3RzIGEgZmFpbGVkIG1vZHVsZSBsb2FkOlxuICAgKiBhIHRyYW5zaWVudCBmYWlsdXJlIGltcG9ydGluZyB0aGUgYGNhY2hlSGFuZGxlcmAgKEVNRklMRSB1bmRlciBhIGNvbGQtc3RhcnRcbiAgICogYnVyc3QpIHdvdWxkIG90aGVyd2lzZSA1MDAgZXZlcnkgaW1hZ2UgcmVxdWVzdCB1bnRpbCB0aGUgc2FuZGJveCByZWN5Y2xlcy5cbiAgICovXG4gIHByaXZhdGUgbG9hZENhY2hlKFxuICAgIGxvYWRlZDogUmV0dXJuVHlwZTx0eXBlb2YgbG9hZEltYWdlUnVudGltZT4sXG4gICk6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICAgIGlmICghdGhpcy5pbWFnZUNhY2hlKSB7XG4gICAgICBjb25zdCBjYWNoZSA9IGxvYWRJbWFnZUNhY2hlKHRoaXMub3B0aW9ucywgbG9hZGVkKTtcbiAgICAgIHRoaXMuaW1hZ2VDYWNoZSA9IGNhY2hlO1xuICAgICAgY2FjaGUuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbWFnZUNhY2hlID09PSBjYWNoZSkge1xuICAgICAgICAgIHRoaXMuaW1hZ2VDYWNoZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmltYWdlQ2FjaGU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoTG9jYWwoXG4gICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgIGhyZWY6IHN0cmluZyxcbiAgICBuZXh0Q29uZmlnOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPltcIm5leHRDb25maWdcIl0sXG4gICAgbWF4aW11bVJlc3BvbnNlQm9keTogbnVtYmVyLFxuICAgIG9wdGltaXplcjogTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXSxcbiAgKSB7XG4gICAgY29uc3QgeyBidWNrZXQsIGZldGNoSW50ZXJuYWwgfSA9IHRoaXMub3B0aW9ucztcbiAgICAvLyBObyBidWNrZXQgd2hlbiB0aGUgc291cmNlcyBhcmUgb24gZGlzayAoYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2ApLCBhbmRcbiAgICAvLyB0aGUgcm91dGVzIHNlcnZlIHRob3NlIGFzIHRoZXkgc2VydmUgYW55dGhpbmcgUzMgaGFzIG5vIGZpbGUgZm9yLlxuICAgIGlmIChidWNrZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgICAgIHRoaXMuczMsXG4gICAgICAgICAgYnVja2V0LFxuICAgICAgICAgIGhyZWYsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXJsQmFzZVBhdGg6IG5leHRDb25maWcuYmFzZVBhdGgsXG4gICAgICAgICAgICBrZXlQcmVmaXg6IHRoaXMub3B0aW9ucy5idWNrZXRLZXlQcmVmaXgsXG4gICAgICAgICAgICBhc3NldFByZWZpeDogbmV4dENvbmZpZy5hc3NldFByZWZpeCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1heGltdW1SZXNwb25zZUJvZHksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYnVmZmVyOiByZXN1bHQuYnVmZmVyLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiByZXN1bHQuY29udGVudFR5cGUsXG4gICAgICAgICAgLy8gVGhlIG9iamVjdCdzIG93biwgYXMgYGZldGNoSW50ZXJuYWxJbWFnZWAgcGFzc2VzIG9uIHRoZSBmaWxlJ3NcbiAgICAgICAgICAvLyBgQ2FjaGUtQ29udHJvbGA6IHRoZSBvcHRpbWl6ZXIga2VlcHMgdGhlIHJlc3VsdCBmb3IgaXRzIG1heC1hZ2UsIGFcbiAgICAgICAgICAvLyB5ZWFyIGZvciBhbiBpbW11dGFibGUgYF9uZXh0L3N0YXRpYy9tZWRpYWAgZmlsZS5cbiAgICAgICAgICBjYWNoZUNvbnRyb2w6IHJlc3VsdC5jYWNoZUNvbnRyb2wsXG4gICAgICAgICAgLy8gRW5jb2RlZCBhcyBmb3IgYSByb3V0ZSdzIHJlc3BvbnNlOiBgZmV0Y2hJbnRlcm5hbEltYWdlYCBkb2VzIHRvby5cbiAgICAgICAgICBldGFnOiBleHRyYWN0RXRhZyhyZXN1bHQuZXRhZywgcmVzdWx0LmJ1ZmZlciksXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vU3VjaEtleVwiO1xuICAgICAgICBpZiAoIW1pc3NpbmcpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgY2hlY2tzLCBhbmQgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVzcG9uc2UuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEludGVybmFsKGhyZWYsIHJlcSwgbWF4aW11bVJlc3BvbnNlQm9keSk7XG4gICAgaWYgKHJlc3BvbnNlLm90aGVyR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSBkZXBsb3ltZW50IHByb2JsZW0sIG5vdCBhIGJhZCBgdXJsYDogbGVhdmUgdGhlIHJvdXRlIGluIHRoZSBkZWZhdWx0XG4gICAgICAvLyBncm91cCwgb3Igc2VydmUgdGhlIGltYWdlIGFzIGEgZmlsZSAocHVibGljLyBvciBhIHN0YXRpYyBpbXBvcnQpLlxuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA1MDIsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaXRzIHNvdXJjZSBpcyBhIHJvdXRlIGluIGFub3RoZXIgJyArXG4gICAgICAgICAgYGZ1bmN0aW9uR3JvdXBzIGdyb3VwIChcIiR7cmVzcG9uc2Uub3RoZXJHcm91cH1cIiksIHdoaWNoIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICBcIm9wdGltaXplciBjYW5ub3QgZmV0Y2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS50b29MYXJnZSkge1xuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA0MTMsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLnN0YXR1c0NvZGUgfHwgcmVzcG9uc2UuYm9keS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBvcHRpbWl6ZXIuSW1hZ2VFcnJvcihcbiAgICAgICAgNDAwLFxuICAgICAgICAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgdmFsaWQgYnV0IGludGVybmFsIHJlc3BvbnNlIGlzIGludmFsaWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcjogcmVzcG9uc2UuYm9keSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmaXJzdFZhbHVlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pID8/IG51bGwsXG4gICAgICBjYWNoZUNvbnRyb2w6IGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pID8/IG51bGwsXG4gICAgICBldGFnOiBleHRyYWN0RXRhZyhcbiAgICAgICAgZmlyc3RWYWx1ZShyZXNwb25zZS5oZWFkZXJzLmV0YWcpID8/IG51bGwsXG4gICAgICAgIHJlc3BvbnNlLmJvZHksXG4gICAgICApLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBgQ2FjaGVkUm91dGVLaW5kLklNQUdFYCwgd2hpY2ggaXMgYWxzbyBgUm91dGVLaW5kLklNQUdFYC4gUmVzdGF0ZWQ6IHRoZSBlbnVtIGlzXG4gKiBhIHJ1bnRpbWUgdmFsdWUgb2YgYG5leHRgLCB3aGljaCB0aGUgYnVuZGxlIGNhbm5vdCBpbXBvcnQuXG4gKi9cbmNvbnN0IElNQUdFX0tJTkQgPSBcIklNQUdFXCIgYXMgQ2FjaGVkUm91dGVLaW5kLklNQUdFO1xuXG4vKiogYGltYWdlT3B0aW1pemVyYCdzIGBwcmV2aW91c0NhY2hlRW50cnlgLiAqL1xudHlwZSBQcmV2aW91c0ltYWdlRW50cnkgPSBQYXJhbWV0ZXJzPFxuICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiaW1hZ2VPcHRpbWl6ZXJcIl1cbj5bM11bXCJwcmV2aW91c0NhY2hlRW50cnlcIl07XG5cbmludGVyZmFjZSBJbWFnZUNhY2hlIHtcbiAgcmVhZG9ubHkgcmVzcG9uc2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl1cbiAgPjtcbiAgcmVhZG9ubHkgaW1hZ2VzOiBJbnN0YW5jZVR5cGU8XG4gICAgTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXVtcIkltYWdlT3B0aW1pemVyQ2FjaGVcIl1cbiAgPjtcbn1cblxuLyoqXG4gKiBUaGUgYXBwJ3MgYGNhY2hlSGFuZGxlcmAsIGNvbnN0cnVjdGVkIHRoZSB3YXkgYG5leHQgc3RhcnRgIGNvbnN0cnVjdHMgaXQgZm9yXG4gKiBpbWFnZXMgKGBuZXh0LXNlcnZlci5qc2AsIGBoYW5kbGVOZXh0SW1hZ2VSZXF1ZXN0YCk6IG9uY2UsIGFuZCBrZXB0LCBzbyBpdHNcbiAqIGluLW1lbW9yeSBsYXllciBsYXN0cyBhY3Jvc3MgcmVxdWVzdHMuIEl0cyBwYXRoIGluIHRoZSBtYW5pZmVzdCBpcyByZWxhdGl2ZVxuICogdG8gdGhlIGRpc3QgZGlyOyBzZWUge0BsaW5rIGNhY2hlSGFuZGxlclVybH0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZUNhY2hlKFxuICB7IGRlcGxveW1lbnRSb290LCBtYW5pZmVzdCwgaW1wb3J0TW9kdWxlIH06IEltYWdlT3B0aW1pemVyT3B0aW9ucyxcbiAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbik6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IGxvYWRlZDtcbiAgY29uc3QgbW9kdWxlczogTmV4dEltYWdlQ2FjaGVNb2R1bGVzID0ge1xuICAgIHJlc3BvbnNlQ2FjaGU6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpLFxuICB9O1xuICBjb25zdCBkaXN0RGlyID0gam9pbihcbiAgICBkZXBsb3ltZW50Um9vdCxcbiAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgbWFuaWZlc3QuY29uZmlnLmRpc3REaXIsXG4gICk7XG4gIGxldCBjYWNoZUhhbmRsZXI6IEluc3RhbmNlVHlwZTxDYWNoZUhhbmRsZXJDbGFzcz4gfCB1bmRlZmluZWQ7XG4gIGlmIChuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcikge1xuICAgIGNvbnN0IHVybCA9IGNhY2hlSGFuZGxlclVybChkaXN0RGlyLCBuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcik7XG4gICAgY29uc3QgaW1wb3J0ZWQgPSAoYXdhaXQgKGltcG9ydE1vZHVsZVxuICAgICAgPyBpbXBvcnRNb2R1bGUodXJsKVxuICAgICAgOiBpbXBvcnQodXJsKSkpIGFzIHsgZGVmYXVsdD86IENhY2hlSGFuZGxlckNsYXNzIH0gJiBDYWNoZUhhbmRsZXJDbGFzcztcbiAgICBjb25zdCBDYWNoZUhhbmRsZXIgPSBpbXBvcnRlZC5kZWZhdWx0ID8/IGltcG9ydGVkO1xuICAgIGNhY2hlSGFuZGxlciA9IG5ldyBDYWNoZUhhbmRsZXIoe1xuICAgICAgZGV2OiBmYWxzZSxcbiAgICAgIGZsdXNoVG9EaXNrOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbC5pc3JGbHVzaFRvRGlzayxcbiAgICAgIHNlcnZlckRpc3REaXI6IGpvaW4oZGlzdERpciwgXCJzZXJ2ZXJcIiksXG4gICAgICBtYXhNZW1vcnlDYWNoZVNpemU6IG5leHRDb25maWcuY2FjaGVNYXhNZW1vcnlTaXplLFxuICAgICAgcmV2YWxpZGF0ZWRUYWdzOiBbXSxcbiAgICAgIF9yZXF1ZXN0SGVhZGVyczoge30sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZXM6IG5ld0ltYWdlUmVzcG9uc2VDYWNoZShtb2R1bGVzLnJlc3BvbnNlQ2FjaGUuZGVmYXVsdCksXG4gICAgaW1hZ2VzOiBuZXcgbmV4dC5vcHRpbWl6ZXIuSW1hZ2VPcHRpbWl6ZXJDYWNoZSh7XG4gICAgICBkaXN0RGlyLFxuICAgICAgbmV4dENvbmZpZyxcbiAgICAgIGNhY2hlSGFuZGxlcixcbiAgICB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgbmV3IFJlc3BvbnNlQ2FjaGUoLi4uKWAgZm9yIGltYWdlcywgb24gZWl0aGVyIHNpZGUgb2YgbmV4dCAxNi4zLjguIEJlZm9yZVxuICogaXQgdGhlIGNvbnN0cnVjdG9yIHRvb2sgYG1pbmltYWxNb2RlYDsgZnJvbSBpdCwgYHsgbWluaW1hbE1vZGUsIHJvdXRlIH1gLCBhbmRcbiAqIGl0IHRocm93cyB3aXRob3V0IGEgYHJvdXRlYCAtIGBuZXh0LXNlcnZlci5qc2AgcGFzc2VzIGBcImltYWdlXCJgLiBOZWl0aGVyIGZvcm1cbiAqIGNhbiBzdGFuZCBpbiBmb3IgdGhlIG90aGVyOiBhbiBvbGRlciBgbmV4dGAgdGFrZXMgdGhlIG9wdGlvbnMgb2JqZWN0IGFzIGFcbiAqIHRydXRoeSBgbWluaW1hbE1vZGVgLCBhbmQgMTYuMy44IHJlamVjdHMgYSBiYXJlIGBmYWxzZWAuXG4gKlxuICogVG9sZCBhcGFydCBieSB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIHRoZSBvbGRlciBmb3JtIHJhdGhlciB0aGFuIGJ5XG4gKiB0aGUgdmVyc2lvbiwgd2hpY2ggYSBjYW5hcnkgZG9lcyBub3Qgb3JkZXIsIG9yIGJ5IGl0cyBwcml2YXRlIGZpZWxkczogMTYuMy44XG4gKiBkZXN0cnVjdHVyZXMgYSBiYXJlIGBmYWxzZWAgaW50byBubyBgcm91dGVgIGFuZCB0aHJvd3MuIE9ubHkgdGhhdCB0aHJvd1xuICogc2VsZWN0cyB0aGUgbmV3ZXIgZm9ybTsgYW55IG90aGVyIGVycm9yIGZyb20gdGhlIGNvbnN0cnVjdG9yIGlzIHJldGhyb3duXG4gKiByYXRoZXIgdGhhbiByZWFkIGFzIGEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld0ltYWdlUmVzcG9uc2VDYWNoZShcbiAgUmVzcG9uc2VDYWNoZTogTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0sXG4pOiBJbnN0YW5jZVR5cGU8TmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0+IHtcbiAgY29uc3QgTGVnYWN5ID0gUmVzcG9uc2VDYWNoZSBhcyB1bmtub3duIGFzIG5ldyAoXG4gICAgbWluaW1hbE1vZGU6IGJvb2xlYW4sXG4gICkgPT4gSW5zdGFuY2VUeXBlPHR5cGVvZiBSZXNwb25zZUNhY2hlPjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeShmYWxzZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghU3RyaW5nKChlcnIgYXMgRXJyb3IpPy5tZXNzYWdlKS5pbmNsdWRlcyhcInJlcXVpcmVzIGEgc291cmNlIHJvdXRlXCIpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2VDYWNoZSh7IG1pbmltYWxNb2RlOiBmYWxzZSwgcm91dGU6IFwiaW1hZ2VcIiB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGBmb3JtYXREeW5hbWljSW1wb3J0UGF0aGAgZnJvbSBgbmV4dC9kaXN0L2xpYi9mb3JtYXQtZHluYW1pYy1pbXBvcnQtcGF0aC5qc2AsXG4gKiByZXN0YXRlZDogYG5leHQgYnVpbGRgIGRvZXNuJ3QgdHJhY2UgdGhhdCBtb2R1bGUgaW50byB0aGUgZGVwbG95bWVudCwgc29cbiAqIGxvYWRpbmcgaXQgZmFpbGVkIGV2ZXJ5IGltYWdlIHJlcXVlc3Qgd2l0aCB0aGUgY2FjaGUgb24uIE5vIGBmaWxlOi8vYCBjYXNlOlxuICogdGhlIGFkYXB0ZXIgYWxyZWFkeSB0dXJuZWQgb25lIGludG8gYSBwYXRoIChgZGlzdFJlbGF0aXZlQ2FjaGVIYW5kbGVyYCkuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFuZGxlclVybChkaXN0RGlyOiBzdHJpbmcsIGNhY2hlSGFuZGxlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoXG4gICAgaXNBYnNvbHV0ZVBhdGgoY2FjaGVIYW5kbGVyKSA/IGNhY2hlSGFuZGxlciA6IGpvaW4oZGlzdERpciwgY2FjaGVIYW5kbGVyKSxcbiAgKS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIGBpbWFnZXNgLCB3aXRoIGl0cyBgc2V0YCBtb3ZlZCBvZmYgdGhlIHJlc3BvbnNlJ3MgY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBgUmVzcG9uc2VDYWNoZWAgYXdhaXRzIHRoZSB3cml0ZSBvZiBhIGZyZXNobHkgb3B0aW1pemVkIGltYWdlIGJlZm9yZSBpdCBoYW5kc1xuICogdGhlIGltYWdlIGJhY2ssIHNvIGV2ZXJ5IG1pc3MgcGFpZCBhbiBTMyBgUHV0T2JqZWN0YCAofjMwIG1zIG1lYXN1cmVkKSBiZWZvcmVcbiAqIGl0cyBmaXJzdCBieXRlLiBUaGUgd3JpdGUgaXMgcmVnaXN0ZXJlZCB3aXRoIGB3YWl0VW50aWxgIGluc3RlYWQsIHdoaWNoIHRoZVxuICogcnVudGltZSBkcmFpbnMgYmVmb3JlIGEgTGFtYmRhIGludm9jYXRpb24gcmV0dXJucyBvciBhIGNvbnRhaW5lciBzaHV0cyBkb3duLFxuICogc28gaXQgc3RpbGwgbGFuZHMuIEEgZmFpbGVkIHdyaXRlIGlzIGxvZ2dlZDsgdGhlIG5leHQgcmVxdWVzdCBvcHRpbWl6ZXMgdGhlXG4gKiBpbWFnZSBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBpdCB3b3VsZCBoYXZlIGRvbmUgYW55d2F5LlxuICovXG5mdW5jdGlvbiBkZWZlcldyaXRlcyhcbiAgaW1hZ2VzOiBJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdLFxuICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuKTogSW1hZ2VDYWNoZVtcImltYWdlc1wiXSB7XG4gIGNvbnN0IGRlZmVycmVkID0gT2JqZWN0LmNyZWF0ZShpbWFnZXMpIGFzIEltYWdlQ2FjaGVbXCJpbWFnZXNcIl07XG4gIGRlZmVycmVkLnNldCA9ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJpbWFnZXNcIl1bXCJzZXRcIl0+KSA9PiB7XG4gICAgd2FpdFVudGlsKFxuICAgICAgaW1hZ2VzLnNldCguLi5hcmdzKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYWNoZSBhbiBvcHRpbWl6ZWQgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICByZXR1cm4gZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRUZXh0KFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICBib2R5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgcmVzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgcmVzLmVuZChib2R5KTtcbn1cblxuLyoqXG4gKiBgbWFuaWZlc3QuY29uZmlnLmltYWdlc2AsIG9uY2UgdGhlIG1hbmlmZXN0IGlzIGtub3duIHRvIGJlIG9uZSB0aGlzIHJ1bnRpbWVcbiAqIHJlYWRzICh3aXRoIGBleHBlcmltZW50YWxgLCDigKYpLiBUaGUgZmllbGRzIGFyZSB0eXBlZCBgdW5rbm93bmAsIHNvIG9ubHkgdGhlXG4gKiB2ZXJzaW9uIGNhdGNoZXMgYSBtYW5pZmVzdCBhbm90aGVyIGNkay1uZXh0anMgd3JvdGU7IGBOZXh0anNCdWlsZGAgcmVqZWN0cyBvbmVcbiAqIGF0IHN5bnRoLCB3aGljaCBhIGhhbmQtd2lyZWQgZnVuY3Rpb24gc2tpcHMuXG4gKi9cbmZ1bmN0aW9uIG1hbmlmZXN0SW1hZ2VzKFxuICBtYW5pZmVzdDogQWRhcHRlck1hbmlmZXN0LFxuKTogTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdIHtcbiAgaWYgKG1hbmlmZXN0LmNka05leHRqc1ZlcnNpb24gIT09IENES19ORVhUSlNfVkVSU0lPTikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgYWRhcHRlciBtYW5pZmVzdCB3YXMgd3JpdHRlbiBieSBjZGstbmV4dGpzIGAgK1xuICAgICAgICBgJHttYW5pZmVzdC5jZGtOZXh0anNWZXJzaW9uID8/IFwiKHVua25vd24pXCJ9LCBidXQgdGhpcyBydW50aW1lIGlzIGAgK1xuICAgICAgICBgY2RrLW5leHRqcyAke0NES19ORVhUSlNfVkVSU0lPTn0uIFJlYnVpbGQgdGhlIGFwcCB3aXRoIHRoaXMgdmVyc2lvbi5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG1hbmlmZXN0LmNvbmZpZy5pbWFnZXMgYXMgTmV4dENvbmZpZ0NvbXBsZXRlW1wiaW1hZ2VzXCJdO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpbWl6ZXIncyBgbmV4dENvbmZpZ2AsIGZyb20gdGhlIGFkYXB0ZXIgbWFuaWZlc3QsIHdoaWNoIGNvcGllZCBpdCBvdXRcbiAqIG9mIHRoZSBidWlsZCdzIGBjdHguY29uZmlnYCAoYEFkYXB0ZXJNYW5pZmVzdENvbmZpZy5pbWFnZXNgKTogYWxyZWFkeSByZXNvbHZlZFxuICogYW5kIGRlZmF1bHRlZCwgc28gbmVpdGhlciBgZ2V0TmV4dENvbmZpZ1J1bnRpbWVgIG5vciBgaW1hZ2VDb25maWdEZWZhdWx0YCBpc1xuICogbmVlZGVkLiBPbmx5IHRoZSBmaWVsZHMgTmV4dCdzIGltYWdlIGNvZGUgcmVhZHM7IHRoZSBjYXN0IGlzIGJlY2F1c2UgdGhlXG4gKiBtYW5pZmVzdCBzdG9yZXMgdGhlbSBhcyBKU09OLlxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2VSdW50aW1lKHsgbWFuaWZlc3QgfTogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zKSB7XG4gIGNvbnN0IG5leHQ6IE5leHRJbWFnZU1vZHVsZXMgPSB7XG4gICAgb3B0aW1pemVyOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIiksXG4gICAgc2VydmVTdGF0aWM6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3NlcnZlLXN0YXRpYy5qc1wiKSxcbiAgfTtcbiAgY29uc3QgeyBjb25maWcgfSA9IG1hbmlmZXN0O1xuICBjb25zdCBuZXh0Q29uZmlnID0ge1xuICAgIGJhc2VQYXRoOiBjb25maWcuYmFzZVBhdGgsXG4gICAgYXNzZXRQcmVmaXg6IGNvbmZpZy5hc3NldFByZWZpeCxcbiAgICBpbWFnZXM6IG1hbmlmZXN0SW1hZ2VzKG1hbmlmZXN0KSxcbiAgICBleHBlcmltZW50YWw6IGNvbmZpZy5leHBlcmltZW50YWwsXG4gICAgY2FjaGVIYW5kbGVyOiBjb25maWcuY2FjaGVIYW5kbGVyID8/IHVuZGVmaW5lZCxcbiAgICBjYWNoZU1heE1lbW9yeVNpemU6IGNvbmZpZy5jYWNoZU1heE1lbW9yeVNpemUsXG4gIH0gYXMgTmV4dENvbmZpZ0NvbXBsZXRlO1xuICByZXR1cm4geyBuZXh0LCBuZXh0Q29uZmlnIH07XG59XG4iXX0=
|