@milkio/stargate 1.0.0-beta.185 → 1.0.0-beta.186
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/index.d.ts +5 -7
- package/index.js +3 -16
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -33,9 +33,6 @@ export declare function createStargate<Generated extends {
|
|
|
33
33
|
routeSchema: any;
|
|
34
34
|
rejectCode: any;
|
|
35
35
|
}>(stargateOptions: MilkioStargateOptions): Promise<{
|
|
36
|
-
$types: {
|
|
37
|
-
generated: Generated;
|
|
38
|
-
};
|
|
39
36
|
options: MilkioStargateOptions;
|
|
40
37
|
execute<Path extends keyof Generated["routeSchema"]>(path: Path, options: Mixin<ExecuteOptions, {
|
|
41
38
|
params?: Generated["routeSchema"][Path]["types"]["params"];
|
|
@@ -48,10 +45,11 @@ export declare function createStargate<Generated extends {
|
|
|
48
45
|
ping(options?: {
|
|
49
46
|
timeout?: number;
|
|
50
47
|
}): Promise<Ping>;
|
|
51
|
-
types: {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
$types: {
|
|
49
|
+
generated: Generated;
|
|
50
|
+
error: Generated["rejectCode"];
|
|
51
|
+
params: { [Path in keyof Generated["routeSchema"]]: Generated["routeSchema"][Path]["types"]["params"]; };
|
|
52
|
+
results: { [Path in keyof Generated["routeSchema"]]: Generated["routeSchema"][Path]["types"]["\uD83E\uDD5B"] extends boolean ? Generated["routeSchema"][Path]["types"]["result"] : AsyncGenerator<[Partial<Generated["rejectCode"]>, null] | [null, GeneratorGeneric<Generated["routeSchema"][Path]["types"]["result"]>], undefined>; };
|
|
55
53
|
};
|
|
56
54
|
on: <Key extends keyof {
|
|
57
55
|
"milkio:executeBefore": {
|
package/index.js
CHANGED
|
@@ -56,9 +56,6 @@ async function createStargate(stargateOptions) {
|
|
|
56
56
|
const baseUrl = bootstrap();
|
|
57
57
|
const stargate = {
|
|
58
58
|
...eventManager,
|
|
59
|
-
$types: {
|
|
60
|
-
generated: undefined
|
|
61
|
-
},
|
|
62
59
|
options: stargateOptions,
|
|
63
60
|
async execute(path, options) {
|
|
64
61
|
if (options.headers === undefined)
|
|
@@ -359,17 +356,7 @@ async function createStargate(stargateOptions) {
|
|
|
359
356
|
}
|
|
360
357
|
});
|
|
361
358
|
},
|
|
362
|
-
types:
|
|
363
|
-
error(path) {
|
|
364
|
-
throw new Error("This method is used to retrieve types and cannot be actually executed.");
|
|
365
|
-
},
|
|
366
|
-
params(path) {
|
|
367
|
-
throw new Error("This method is used to retrieve types and cannot be actually executed.");
|
|
368
|
-
},
|
|
369
|
-
results(path) {
|
|
370
|
-
throw new Error("This method is used to retrieve types and cannot be actually executed.");
|
|
371
|
-
}
|
|
372
|
-
}
|
|
359
|
+
$types: undefined
|
|
373
360
|
};
|
|
374
361
|
return stargate;
|
|
375
362
|
}
|
|
@@ -502,5 +489,5 @@ export {
|
|
|
502
489
|
createStargate
|
|
503
490
|
};
|
|
504
491
|
|
|
505
|
-
//# debugId=
|
|
506
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1N0YXJnYXRlT3B0aW9ucyA9IHtcclxuICAgIGJhc2VVcmw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XHJcbiAgICBhYm9ydD86IHR5cGVvZiBBYm9ydENvbnRyb2xsZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xyXG5cclxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnMgPSB7XHJcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgYmFzZVVybD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFBpbmcgPVxyXG4gICAgfCBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25uZWN0OiBmYWxzZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgZXJyb3I6IGFueTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG51bGwsXHJcbiAgICBdXHJcbiAgICB8IFtcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29ubmVjdDogdHJ1ZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgc2VydmVyVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZTxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xyXG4gICAgY29uc3QgJGZldGNoID0gc3RhcmdhdGVPcHRpb25zLmZldGNoID8/IGZldGNoO1xyXG4gICAgY29uc3QgJGFib3J0ID0gc3RhcmdhdGVPcHRpb25zLmFib3J0ID8/IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICB0eXBlIFN0YXJnYXRlRXZlbnRzID0ge1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBwYXRoOiBzdHJpbmc7IG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PiB9O1xyXG4gICAgICAgIFwibWlsa2lvOmZldGNoQmVmb3JlXCI6IHsgcGF0aDogc3RyaW5nOyBvcHRpb25zOiBNaXhpbjxFeGVjdXRlT3B0aW9ucywgeyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBiYXNlVXJsOiBzdHJpbmcgfT47IGJvZHk6IHN0cmluZyB9O1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiOiB7XHJcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48RXhlY3V0ZU9wdGlvbnMsIHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYmFzZVVybDogc3RyaW5nIH0+O1xyXG4gICAgICAgICAgICBlcnJvcjogUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPjtcclxuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IDxLIGV4dGVuZHMga2V5b2YgUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPj4oZXJyb3I6IGFueSwga2V5OiBLLCBoYW5kbGVyOiAoZXJyb3I6IFBhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXVtLXT4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUVycm9yOiBhbnkgPSBhc3luYyAoZXJyb3I6IGFueSwga2V5OiBzdHJpbmcsIGhhbmRsZXI6IChlcnJvcjogYW55KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPikgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgaW4gZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZXIoZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVkKSBkZWxldGUgZXJyb3Jba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IF9faW5pdEV2ZW50TWFuYWdlciA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcclxuICAgICAgICBjb25zdCBpbmRleGVkID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IGFueSkgPT4gdm9pZD4+KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcclxuICAgICAgICAgICAgb246IDxLZXkgZXh0ZW5kcyBrZXlvZiBTdGFyZ2F0ZUV2ZW50cywgSGFuZGxlciBleHRlbmRzIChldmVudDogU3RhcmdhdGVFdmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleGVkLnNldChrZXkgYXMgc3RyaW5nLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2ZmOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIFZhbHVlIGV4dGVuZHMgU3RhcmdhdGVFdmVudHNbS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlcjtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XHJcblxyXG4gICAgY29uc3QgYm9vdHN0cmFwID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gc3RhcmdhdGVPcHRpb25zLmJhc2VVcmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBiYXNlVXJsOiBQcm9taXNlPHN0cmluZz4gPSBib290c3RyYXAoKTtcclxuXHJcbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcclxuICAgICAgICAuLi5ldmVudE1hbmFnZXIsXHJcbiAgICAgICAgJHR5cGVzOiB7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlZDogdm9pZCAwIGFzIHVua25vd24gYXMgR2VuZXJhdGVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb3B0aW9uczogc3RhcmdhdGVPcHRpb25zLFxyXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcclxuICAgICAgICAgICAgcGF0aDogUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XHJcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+LFxyXG4gICAgICAgICk6IFByb21pc2U8XHJcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICA/IC8vIGFjdGlvblxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxyXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEFzeW5jR2VuZXJhdG9yPFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsXSB8IFtudWxsLCBHZW5lcmF0b3JHZW5lcmljPEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0+XSwgdW5kZWZpbmVkPiwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXHJcbiAgICAgICAgPiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzID0ge307XHJcblxyXG4gICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVVybC5lbmRzV2l0aChcIi9cIikpIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAocGF0aCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gKGF3YWl0IGJhc2VVcmwpICsgKHBhdGggYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWN0aW9uXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogeyB2YWx1ZTogUmVjb3JkPGFueSwgYW55PiB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChbeyBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dCwgbWVzc2FnZTogYEV4ZWN1dGUgdGltZW91dCBhZnRlciAke3RpbWVvdXR9bXMuYCB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCAoYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5LCBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfSkpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7IHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXNwb25zZSkpIH07XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yPy5bMF0/LlJFUVVFU1RfVElNRU9VVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclBpbmVkID0geyBSRVFVRVNUX0ZBSUw6IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3I6IGVycm9yUGluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlcnJvclBpbmVkLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlLnN1Y2Nlc3MgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JbcmVzdWx0LnZhbHVlLmNvZGVdID0gcmVzdWx0LnZhbHVlLnJlamVjdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiLCB7IGhhbmRsZUVycm9yLCBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGVycm9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiBcInVua25vd25cIiB9XTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIHJlc3VsdC52YWx1ZS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVzdWx0LnZhbHVlLmV4ZWN1dGVJZCB9XSBhcyBhbnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPSBcInRleHQvZXZlbnQtc3RyZWFtXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrczogTWFwPFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8YW55Pj47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICh2YWx1ZTogSXRlcmF0b3JSZXN1bHQ8YW55PikgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPiA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdGFja3NJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0b3JJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RyZWFtUmVzdWx0OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1SZXN1bHRGZXRjaGVkID0gd2l0aFJlc29sdmVyczx1bmRlZmluZWQ+KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHN0YXJnYXRlT3B0aW9ucz8udGltZW91dCA/PyBvcHRpb25zPy50aW1lb3V0ID8/IDYwMDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0LCBtZXNzYWdlOiBgRXhlY3V0ZSB0aW1lb3V0IGFmdGVyICR7dGltZW91dH1tcy5gIH0gfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhcnRzV2l0aChcIkBcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEuc2xpY2UoMSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfRkFJTDogZXJyb3IgfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICsrc3RhY2tzSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5kb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShldmVudC5kYXRhKSkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3VyUmVxdWVzdENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIgPSBuZXcgJGFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIiwgeyBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnkgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyEucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpmZXRjaEJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgYm9keSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgJGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMhLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbnRlbnQtdHlwZSB0byBiZSAke1widGV4dC9ldmVudC1zdHJlYW1cIn0sIEFjdHVhbDogJHtjb250ZW50VHlwZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2V0Qnl0ZXMocmVzcG9uc2UuYm9keSEsIGdldExpbmVzKGdldE1lc3NhZ2VzKG9ubWVzc2FnZSkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHsgUkVRVUVTVF9GQUlMOiBlcnIgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnRocm93KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFtlcnJvciwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1SZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBzdHJlYW1SZXN1bHQ/LmV4ZWN1dGVJZCA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJORVRXT1JLX0VSUk9SXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTmV0d29yayBFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ2xpZW50OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBlcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfaW5kZXgsIHN0YWNrXSBvZiBzdGFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suZG9uZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1SZXN1bHRGZXRjaGVkLnByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBpdGVyYXRvciwgeyBleGVjdXRlSWQ6IHN0cmVhbVJlc3VsdC5leGVjdXRlSWQgfV0gYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfX2Nvb2tib29rOiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogYXN5bmMgKGJhc2VVcmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tzOiBNYXA8XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxhbnk+PjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxhbnk+KSA9PiB2b2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YWNrc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbm1lc3NhZ2UgPSAoZXZlbnQ6IEV2ZW50U291cmNlTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tzLmhhcyhpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJSZXF1ZXN0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlciA9IG5ldyAkYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2goYCR7YmFzZVVybH0vJHN1YnNjcmliZWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGVudFR5cGU/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBjb250ZW50LXR5cGUgdG8gYmUgJHtcInRleHQvZXZlbnQtc3RyZWFtXCJ9LCBBY3R1YWw6ICR7Y29udGVudFR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldEJ5dGVzKHJlc3BvbnNlLmJvZHkhLCBnZXRMaW5lcyhnZXRNZXNzYWdlcyhvbm1lc3NhZ2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgY3VyUmVxdWVzdENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhc3luYyBwaW5nKG9wdGlvbnM/OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8UGluZz4ge1xyXG4gICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8UGluZz4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke2F3YWl0IGJhc2VVcmx9L2dlbmVyYXRlXzIwNGA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc3RhcmdhdGVPcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0c1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQsIG1lc3NhZ2U6IGBFeGVjdXRlIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zLmAgfSB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2godXJsLCB7IG1ldGhvZDogXCJIRUFEXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW3sgY29ubmVjdDogZmFsc2UsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIGVycm9yOiB7IFJFUVVFU1RfRkFJTDogeyByZXNwb25zZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IFwiU3RhdHVzIGNvZGUgbm90IDIwNFwiIH0gfSB9LCBudWxsXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtudWxsLCB7IGNvbm5lY3Q6IHRydWUsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIHNlcnZlclRpbWVzdGFtcDogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpIS5zdWJzdHJpbmcoMTcpKSB9XSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3IgfSwgbnVsbF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdHlwZXM6IHtcclxuICAgICAgICAgICAgZXJyb3I8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihwYXRoOiBQYXRoKTogR2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJldHJpZXZlIHR5cGVzIGFuZCBjYW5ub3QgYmUgYWN0dWFsbHkgZXhlY3V0ZWQuXCIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJhbXM8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihwYXRoOiBQYXRoKTogR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInBhcmFtc1wiXSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJldHJpZXZlIHR5cGVzIGFuZCBjYW5ub3QgYmUgYWN0dWFsbHkgZXhlY3V0ZWQuXCIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZXN1bHRzPFBhdGggZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXT4ocGF0aDogUGF0aCk6IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICAgICAgPyAvLyBhY3Rpb25cclxuICAgICAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl1cclxuICAgICAgICAgICAgICAgIDogLy8gc3RyZWFtXHJcbiAgICAgICAgICAgICAgICBBc3luY0dlbmVyYXRvcjxbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbF0gfCBbbnVsbCwgR2VuZXJhdG9yR2VuZXJpYzxHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdPl0sIHVuZGVmaW5lZD4ge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZXRyaWV2ZSB0eXBlcyBhbmQgY2Fubm90IGJlIGFjdHVhbGx5IGV4ZWN1dGVkLlwiKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gc3RhcmdhdGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJldml2ZUpTT05QYXJzZTxUPihqc29uOiBUKTogVCB7XHJcbiAgICBjb25zdCBpc29EYXRlUGF0dGVybiA9IC9eKFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezEsM30pPykoWnxbKy1dXFxkezJ9Oj9cXGR7Mn0pPyQvO1xyXG5cclxuICAgIGlmIChqc29uIGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIGpzb247XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShqc29uKSkge1xyXG4gICAgICAgIHJldHVybiBqc29uLm1hcCgoaXRlbSkgPT4gcmV2aXZlSlNPTlBhcnNlKGl0ZW0pKSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGpzb24gPT09IFwib2JqZWN0XCIgJiYganNvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgIGFjY1trZXkgYXMga2V5b2YgVF0gPSByZXZpdmVKU09OUGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgIH0sIHt9IGFzIFQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBqc29uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBqc29uLm1hdGNoKGlzb0RhdGVQYXR0ZXJuKTtcclxuICAgICAgICBpZiAobWF0Y2gpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGVTdHJpbmcgPSBtYXRjaFsyXSA/IGAke21hdGNoWzFdfSR7bWF0Y2hbMl0ucmVwbGFjZShcIjpcIiwgXCJcIil9YCA6IGAke21hdGNoWzFdfVpgO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUobm9ybWFsaXplZERhdGVTdHJpbmcpIGFzIGFueTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ganNvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlU3RyZWFtT3B0aW9ucyB7XHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcclxuICAgIHRpbWVvdXQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpU2NoZW1hRXh0ZW5kIHtcclxuICAgIGFwaVZhbGlkYXRvcjoge1xyXG4gICAgICAgIGdlbmVyYXRlZEF0OiBudW1iZXI7XHJcbiAgICAgICAgdmFsaWRhdGU6IFJlY29yZDxhbnksIGFueT47XHJcbiAgICB9O1xyXG4gICAgYXBpTWV0aG9kc1NjaGVtYTogUmVjb3JkPGFueSwgYW55PjtcclxuICAgIGFwaU1ldGhvZHNUeXBlU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgYXBpVGVzdHNTY2hlbWE6IFJlY29yZDxhbnksIGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEZhaWxDb2RlRXh0ZW5kID0gUmVjb3JkPGFueSwgKC4uLmFyZ3M6IEFycmF5PGFueT4pID0+IGFueT47XHJcblxyXG5leHBvcnQgdHlwZSBCb290c3RyYXBNaWRkbGV3YXJlID0gKGRhdGE6IHsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuZXhwb3J0IHR5cGUgQmVmb3JlRXhlY3V0ZU1pZGRsZXdhcmUgPSAoZGF0YTogeyBwYXRoOiBzdHJpbmc7IHBhcmFtczogYW55OyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5leHBvcnQgdHlwZSBBZnRlckV4ZWN1dGVNaWRkbGV3YXJlID0gKGRhdGE6IHsgcGF0aDogc3RyaW5nOyByZXN1bHQ6IHsgdmFsdWU6IGFueSB9OyBzdG9yYWdlOiBDbGllbnRTdG9yYWdlIH0pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNaWRkbGV3YXJlT3B0aW9ucyB7XHJcbiAgICBib290c3RyYXA/OiBCb290c3RyYXBNaWRkbGV3YXJlO1xyXG4gICAgYmVmb3JlRXhlY3V0ZT86IEJlZm9yZUV4ZWN1dGVNaWRkbGV3YXJlO1xyXG4gICAgYWZ0ZXJFeGVjdXRlPzogQWZ0ZXJFeGVjdXRlTWlkZGxld2FyZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRTdG9yYWdlIHtcclxuICAgIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcclxuICAgIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcclxuICAgIHJlbW92ZUl0ZW06IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRlUmVzdWx0U3VjY2VzczxSZXN1bHQ+IHtcclxuICAgIGV4ZWN1dGVJZDogc3RyaW5nO1xyXG4gICAgc3VjY2VzczogdHJ1ZTtcclxuICAgIGRhdGE6IFJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgR2VuZXJhdG9yR2VuZXJpYzxUPiA9IFQgZXh0ZW5kcyBBc3luY0dlbmVyYXRvcjxpbmZlciBJPiA/IEkgOiBuZXZlcjtcclxuXHJcbmV4cG9ydCB0eXBlIEZsYXR0ZW5LZXlzPFQsIFByZWZpeCBleHRlbmRzIHN0cmluZyA9IFwiXCI+ID0ge1xyXG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBvYmplY3QgPyBGbGF0dGVuS2V5czxUW0tdLCBgJHtQcmVmaXh9JHtFeGNsdWRlPEssIHN5bWJvbD59LmA+IDogYCRpbnB1dC4ke1ByZWZpeH0ke0V4Y2x1ZGU8Sywgc3ltYm9sPn1gO1xyXG59W2tleW9mIFRdO1xyXG5cclxuLy8gKioqIFRoaXMgcGFydCBvZiB0aGUgY29kZSBpcyBiYXNlZCBvbiBgQG1pY3Jvc29mdC9mZXRjaC1ldmVudC1zb3VyY2VgIHJld3JpdGUsIHRoYW5rcyB0byB0aGUgd29yayBvZiBNaWNyb3NvZnQgKioqIC8vXHJcbi8vICoqKiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvZmV0Y2gtZXZlbnQtc291cmNlL2Jsb2IvbWFpbi9zcmMvcGFyc2UudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiAvL1xyXG5cclxuLyoqXHJcbiAqIFJlcHJlc2VudHMgYSBtZXNzYWdlIHNlbnQgaW4gYW4gZXZlbnQgc3RyZWFtXHJcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9TZXJ2ZXItc2VudF9ldmVudHMvVXNpbmdfc2VydmVyLXNlbnRfZXZlbnRzI0V2ZW50X3N0cmVhbV9mb3JtYXRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRTb3VyY2VNZXNzYWdlIHtcclxuICAgIGRhdGE6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgUmVhZGFibGVTdHJlYW0gaW50byBhIGNhbGxiYWNrIHBhdHRlcm4uXHJcbiAqIEBwYXJhbSBzdHJlYW0gVGhlIGlucHV0IFJlYWRhYmxlU3RyZWFtLlxyXG4gKiBAcGFyYW0gb25DaHVuayBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgYnl0ZSBjaHVuayBpbiB0aGUgc3RyZWFtLlxyXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB3aGVuIHRoZSBzdHJlYW0gY2xvc2VzLlxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJ5dGVzKHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4sIG9uQ2h1bms6IChhcnI6IFVpbnQ4QXJyYXkpID0+IHZvaWQpIHtcclxuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcclxuICAgIGxldCByZXN1bHQ6IFJlYWRhYmxlU3RyZWFtUmVhZFJlc3VsdDxVaW50OEFycmF5PjtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHdoaWxlICghKHJlc3VsdCA9IGF3YWl0IHJlYWRlci5yZWFkKCkpLmRvbmUpIHtcclxuICAgICAgICBvbkNodW5rKHJlc3VsdC52YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQYXJzZXMgYXJiaXRhcnkgYnl0ZSBjaHVua3MgaW50byBFdmVudFNvdXJjZSBsaW5lIGJ1ZmZlcnMuXHJcbiAqIEVhY2ggbGluZSBzaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBcImZpZWxkOiB2YWx1ZVwiIGFuZCBlbmRzIHdpdGggXFxyLCBcXG4sIG9yIFxcclxcbi5cclxuICogQHBhcmFtIG9uTGluZSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBuZXcgRXZlbnRTb3VyY2UgbGluZS5cclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgYnl0ZSBjaHVuay5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5lcyhvbkxpbmU6IChsaW5lOiBVaW50OEFycmF5LCBmaWVsZExlbmd0aDogbnVtYmVyKSA9PiB2b2lkKSB7XHJcbiAgICBsZXQgYnVmZmVyOiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7IC8vIGN1cnJlbnQgcmVhZCBwb3NpdGlvblxyXG4gICAgbGV0IGZpZWxkTGVuZ3RoOiBudW1iZXI7IC8vIGxlbmd0aCBvZiB0aGUgYGZpZWxkYCBwb3J0aW9uIG9mIHRoZSBsaW5lXHJcbiAgICBsZXQgZGlzY2FyZFRyYWlsaW5nTmV3bGluZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgY2FuIHByb2Nlc3MgZWFjaCBpbmNvbWluZyBieXRlIGNodW5rOlxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uQ2h1bmsoYXJyOiBVaW50OEFycmF5KSB7XHJcbiAgICAgICAgaWYgKGJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGFycjtcclxuICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xyXG4gICAgICAgICAgICBmaWVsZExlbmd0aCA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHdlJ3JlIHN0aWxsIHBhcnNpbmcgdGhlIG9sZCBsaW5lLiBBcHBlbmQgdGhlIG5ldyBieXRlcyBpbnRvIGJ1ZmZlcjpcclxuICAgICAgICAgICAgYnVmZmVyID0gY29uY2F0KGJ1ZmZlciwgYXJyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJ1Zkxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgbGV0IGxpbmVTdGFydCA9IDA7IC8vIGluZGV4IHdoZXJlIHRoZSBjdXJyZW50IGxpbmUgc3RhcnRzXHJcbiAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgYnVmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChkaXNjYXJkVHJhaWxpbmdOZXdsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmZmVyW3Bvc2l0aW9uXSA9PT0gMTApIHtcclxuICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSArK3Bvc2l0aW9uOyAvLyBza2lwIHRvIG5leHQgY2hhclxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGRpc2NhcmRUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc3RhcnQgbG9va2luZyBmb3J3YXJkIHRpbGwgdGhlIGVuZCBvZiBsaW5lOlxyXG4gICAgICAgICAgICBsZXQgbGluZUVuZCA9IC0xOyAvLyBpbmRleCBvZiB0aGUgXFxyIG9yIFxcbiBjaGFyXHJcbiAgICAgICAgICAgIGZvciAoOyBwb3NpdGlvbiA8IGJ1Zkxlbmd0aCAmJiBsaW5lRW5kID09PSAtMTsgKytwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChidWZmZXJbcG9zaXRpb25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1ODpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTGVuZ3RoID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgY29sb24gaW4gbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRMZW5ndGggPSBwb3NpdGlvbiAtIGxpbmVTdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRmFsbHRocm91Z2hTd2l0Y2hDbGF1c2U6IDxleHBsYW5hdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkVHJhaWxpbmdOZXdsaW5lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lRW5kID0gcG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobGluZUVuZCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIGJ1dCB0aGUgbGluZSBoYXNuJ3QgZW5kZWQuXHJcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbmV4dCBhcnIgYW5kIHRoZW4gY29udGludWUgcGFyc2luZzpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB3ZSd2ZSByZWFjaGVkIHRoZSBsaW5lIGVuZCwgc2VuZCBpdCBvdXQ6XHJcbiAgICAgICAgICAgIG9uTGluZShidWZmZXIuc3ViYXJyYXkobGluZVN0YXJ0LCBsaW5lRW5kKSwgZmllbGRMZW5ndGgpO1xyXG4gICAgICAgICAgICBsaW5lU3RhcnQgPSBwb3NpdGlvbjsgLy8gd2UncmUgbm93IG9uIHRoZSBuZXh0IGxpbmVcclxuICAgICAgICAgICAgZmllbGRMZW5ndGggPSAtMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaW5lU3RhcnQgPT09IGJ1Zkxlbmd0aCkge1xyXG4gICAgICAgICAgICBidWZmZXIgPSB1bmRlZmluZWQ7IC8vIHdlJ3ZlIGZpbmlzaGVkIHJlYWRpbmcgaXRcclxuICAgICAgICB9IGVsc2UgaWYgKGxpbmVTdGFydCAhPT0gMCkge1xyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgdmlldyBpbnRvIGJ1ZmZlciBiZWdpbm5pbmcgYXQgbGluZVN0YXJ0IHNvIHdlIGRvbid0XHJcbiAgICAgICAgICAgIC8vIG5lZWQgdG8gY29weSBvdmVyIHRoZSBwcmV2aW91cyBsaW5lcyB3aGVuIHdlIGdldCB0aGUgbmV3IGFycjpcclxuICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KGxpbmVTdGFydCk7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uIC09IGxpbmVTdGFydDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIGxpbmUgYnVmZmVycyBpbnRvIEV2ZW50U291cmNlTWVzc2FnZXMuXHJcbiAqIEBwYXJhbSBvbklkIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGBpZGAgZmllbGQuXHJcbiAqIEBwYXJhbSBvblJldHJ5IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIGByZXRyeWAgZmllbGQuXHJcbiAqIEBwYXJhbSBvbk1lc3NhZ2UgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbWVzc2FnZS5cclxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBjYWxsZWQgZm9yIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXIuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVzc2FnZXMob25NZXNzYWdlPzogKG1zZzogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB2b2lkKSB7XHJcbiAgICBsZXQgbWVzc2FnZSA9IG5ld01lc3NhZ2UoKTtcclxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcclxuXHJcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBwcm9jZXNzIGVhY2ggaW5jb21pbmcgbGluZSBidWZmZXI6XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gb25MaW5lKGxpbmU6IFVpbnQ4QXJyYXksIGZpZWxkTGVuZ3RoOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgLy8gZW1wdHkgbGluZSBkZW5vdGVzIGVuZCBvZiBtZXNzYWdlLiBUcmlnZ2VyIHRoZSBjYWxsYmFjayBhbmQgc3RhcnQgYSBuZXcgbWVzc2FnZTpcclxuICAgICAgICAgICAgb25NZXNzYWdlPy4obWVzc2FnZSk7XHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXdNZXNzYWdlKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gZXhjbHVkZSBjb21tZW50cyBhbmQgbGluZXMgd2l0aCBubyB2YWx1ZXNcclxuICAgICAgICAgICAgLy8gbGluZSBpcyBvZiBmb3JtYXQgXCI8ZmllbGQ+Ojx2YWx1ZT5cIiBvciBcIjxmaWVsZD46IDx2YWx1ZT5cIlxyXG4gICAgICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNldmVudC1zdHJlYW0taW50ZXJwcmV0YXRpb25cclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KDAsIGZpZWxkTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT2Zmc2V0ID0gZmllbGRMZW5ndGggKyAobGluZVtmaWVsZExlbmd0aCArIDFdID09PSAzMiA/IDIgOiAxKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkZWNvZGVyLmRlY29kZShsaW5lLnN1YmFycmF5KHZhbHVlT2Zmc2V0KSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiZGF0YVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgbWVzc2FnZSBhbHJlYWR5IGhhcyBkYXRhLCBhcHBlbmQgdGhlIG5ldyB2YWx1ZSB0byB0aGUgb2xkLlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwganVzdCBzZXQgdG8gdGhlIG5ldyB2YWx1ZTpcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEgPSBtZXNzYWdlLmRhdGEgPyBgJHttZXNzYWdlLmRhdGF9XFxuJHt2YWx1ZX1gIDogdmFsdWU7IC8vIG90aGVyd2lzZSxcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbmNhdChhOiBVaW50OEFycmF5LCBiOiBVaW50OEFycmF5KSB7XHJcbiAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShhLmxlbmd0aCArIGIubGVuZ3RoKTtcclxuICAgIHJlcy5zZXQoYSk7XHJcbiAgICByZXMuc2V0KGIsIGEubGVuZ3RoKTtcclxuICAgIHJldHVybiByZXM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld01lc3NhZ2UoKTogRXZlbnRTb3VyY2VNZXNzYWdlIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZGF0YTogXCJcIixcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzPFQgPSBhbnk+KCk6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+IHtcclxuICAgIGxldCByZXNvbHZlOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlc29sdmVcIl07XHJcbiAgICBsZXQgcmVqZWN0OiBQcm9taXNlV2l0aFJlc29sdmVyczxUPltcInJlamVjdFwiXTtcclxuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzLCByZWopID0+IHtcclxuICAgICAgICByZXNvbHZlID0gcmVzO1xyXG4gICAgICAgIHJlamVjdCA9IHJlajtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzb2x2ZSEsIHJlamVjdDogcmVqZWN0ISB9O1xyXG59XHJcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFtQ0EsZUFBc0IsY0FBdUUsQ0FBQyxpQkFBd0M7QUFBQSxFQUNsSSxNQUFNLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxFQUN4QyxNQUFNLFNBQVMsZ0JBQWdCLFNBQVM7QUFBQSxFQWF4QyxNQUFNLGNBQW1CLE9BQU8sT0FBWSxLQUFhLFlBQXdEO0FBQUEsSUFDN0csSUFBSSxPQUFPLE9BQU87QUFBQSxNQUNkLE1BQU0sVUFBVSxNQUFNLFFBQVEsTUFBTSxJQUFJO0FBQUEsTUFDeEMsSUFBSTtBQUFBLFFBQVMsT0FBTyxNQUFNO0FBQUEsSUFDOUI7QUFBQTtBQUFBLEVBR0osTUFBTSxxQkFBcUIsTUFBTTtBQUFBLElBQzdCLE1BQU0sV0FBVyxJQUFJO0FBQUEsSUFDckIsTUFBTSxVQUFVLElBQUk7QUFBQSxJQUVwQixNQUFNLGdCQUFlO0FBQUEsTUFDakIsSUFBSSxDQUF5RixLQUFVLFlBQXFCO0FBQUEsUUFDeEgsU0FBUyxJQUFJLFNBQVMsR0FBYTtBQUFBLFFBQ25DLElBQUksUUFBUSxJQUFJLEdBQWEsTUFBTSxPQUFPO0FBQUEsVUFDdEMsUUFBUSxJQUFJLEtBQWUsSUFBSSxHQUFLO0FBQUEsUUFDeEM7QUFBQSxRQUNBLE1BQU0sTUFBTSxRQUFRLElBQUksR0FBYTtBQUFBLFFBQ3JDLElBQUksSUFBSSxPQUFPO0FBQUEsUUFDZixTQUFTLElBQUksU0FBUyxHQUFhO0FBQUEsUUFFbkMsT0FBTyxNQUFNO0FBQUEsVUFDVCxTQUFTLE9BQU8sT0FBTztBQUFBLFVBQ3ZCLElBQUksT0FBTyxPQUFPO0FBQUE7QUFBQTtB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QUFRO0FBQUEsYUFDQztBQUFBLFVBR0QsUUFBUSxPQUFPLFFBQVEsT0FBTyxHQUFHLFFBQVE7QUFBQSxFQUFTLFVBQVU7QUFBQSxVQUM1RDtBQUFBO0FBQUEsSUFFWjtBQUFBO0FBQUE7QUFJUixTQUFTLE1BQU0sQ0FBQyxHQUFlLEdBQWU7QUFBQSxFQUMxQyxNQUFNLE1BQU0sSUFBSSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFBQSxFQUM5QyxJQUFJLElBQUksQ0FBQztBQUFBLEVBQ1QsSUFBSSxJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQUEsRUFDbkIsT0FBTztBQUFBO0FBR1gsU0FBUyxVQUFVLEdBQXVCO0FBQUEsRUFDdEMsT0FBTztBQUFBLElBQ0gsTUFBTTtBQUFBLEVBQ1Y7QUFBQTtBQUdHLFNBQVMsYUFBc0IsR0FBNEI7QUFBQSxFQUM5RCxJQUFJO0FBQUEsRUFDSixJQUFJO0FBQUEsRUFDSixNQUFNLFVBQVUsSUFBSSxRQUFXLENBQUMsS0FBSyxRQUFRO0FBQUEsSUFDekMsVUFBVTtBQUFBLElBQ1YsU0FBUztBQUFBLEdBQ1o7QUFBQSxFQUNELE9BQU8sRUFBRSxTQUFTLFNBQW1CLE9BQWdCO0FBQUE7IiwKICAiZGVidWdJZCI6ICIxNTRCREU1MzNEQzMwNDQxNjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|
|
492
|
+
//# debugId=03E92A8448BB6DDF64756E2164756E21
|
|
493
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi5cXGluZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImV4cG9ydCB0eXBlIE1pbGtpb1N0YXJnYXRlT3B0aW9ucyA9IHtcclxuICAgIGJhc2VVcmw6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgZmV0Y2g/OiB0eXBlb2YgZmV0Y2g7XHJcbiAgICBhYm9ydD86IHR5cGVvZiBBYm9ydENvbnRyb2xsZXI7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBNaXhpbjxULCBVPiA9IFUgJiBPbWl0PFQsIGtleW9mIFU+O1xyXG5cclxuZXhwb3J0IHR5cGUgRXhlY3V0ZU9wdGlvbnMgPSB7XHJcbiAgICBwYXJhbXM/OiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgYmFzZVVybD86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPik7XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBFeGVjdXRlUmVzdWx0c09wdGlvbiA9IHsgZXhlY3V0ZUlkOiBzdHJpbmcgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFBpbmcgPVxyXG4gICAgfCBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25uZWN0OiBmYWxzZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgZXJyb3I6IGFueTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG51bGwsXHJcbiAgICBdXHJcbiAgICB8IFtcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgY29ubmVjdDogdHJ1ZTtcclxuICAgICAgICAgICAgZGVsYXk6IG51bWJlcjtcclxuICAgICAgICAgICAgc2VydmVyVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICAgICAgfSxcclxuICAgIF07XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTdGFyZ2F0ZTxHZW5lcmF0ZWQgZXh0ZW5kcyB7IHJvdXRlU2NoZW1hOiBhbnk7IHJlamVjdENvZGU6IGFueSB9PihzdGFyZ2F0ZU9wdGlvbnM6IE1pbGtpb1N0YXJnYXRlT3B0aW9ucykge1xyXG4gICAgY29uc3QgJGZldGNoID0gc3RhcmdhdGVPcHRpb25zLmZldGNoID8/IGZldGNoO1xyXG4gICAgY29uc3QgJGFib3J0ID0gc3RhcmdhdGVPcHRpb25zLmFib3J0ID8/IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICB0eXBlIFN0YXJnYXRlRXZlbnRzID0ge1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIjogeyBwYXRoOiBzdHJpbmc7IG9wdGlvbnM6IE1peGluPEV4ZWN1dGVPcHRpb25zLCB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47IGJhc2VVcmw6IHN0cmluZyB9PiB9O1xyXG4gICAgICAgIFwibWlsa2lvOmZldGNoQmVmb3JlXCI6IHsgcGF0aDogc3RyaW5nOyBvcHRpb25zOiBNaXhpbjxFeGVjdXRlT3B0aW9ucywgeyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+OyBiYXNlVXJsOiBzdHJpbmcgfT47IGJvZHk6IHN0cmluZyB9O1xyXG4gICAgICAgIFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiOiB7XHJcbiAgICAgICAgICAgIHBhdGg6IHN0cmluZztcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48RXhlY3V0ZU9wdGlvbnMsIHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgYmFzZVVybDogc3RyaW5nIH0+O1xyXG4gICAgICAgICAgICBlcnJvcjogUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPjtcclxuICAgICAgICAgICAgaGFuZGxlRXJyb3I6IDxLIGV4dGVuZHMga2V5b2YgUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPj4oZXJyb3I6IGFueSwga2V5OiBLLCBoYW5kbGVyOiAoZXJyb3I6IFBhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXVtLXT4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+KSA9PiBQcm9taXNlPHZvaWQ+O1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZUVycm9yOiBhbnkgPSBhc3luYyAoZXJyb3I6IGFueSwga2V5OiBzdHJpbmcsIGhhbmRsZXI6IChlcnJvcjogYW55KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPikgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgaW4gZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlZCA9IGF3YWl0IGhhbmRsZXIoZXJyb3Jba2V5XSk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGVkKSBkZWxldGUgZXJyb3Jba2V5XTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IF9faW5pdEV2ZW50TWFuYWdlciA9ICgpID0+IHtcclxuICAgICAgICBjb25zdCBoYW5kbGVycyA9IG5ldyBNYXA8KGV2ZW50OiBhbnkpID0+IHZvaWQsIHN0cmluZz4oKTtcclxuICAgICAgICBjb25zdCBpbmRleGVkID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IGFueSkgPT4gdm9pZD4+KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGV2ZW50TWFuYWdlciA9IHtcclxuICAgICAgICAgICAgb246IDxLZXkgZXh0ZW5kcyBrZXlvZiBTdGFyZ2F0ZUV2ZW50cywgSGFuZGxlciBleHRlbmRzIChldmVudDogU3RhcmdhdGVFdmVudHNbS2V5XSkgPT4gdm9pZD4oa2V5OiBLZXksIGhhbmRsZXI6IEhhbmRsZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleGVkLmhhcyhrZXkgYXMgc3RyaW5nKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleGVkLnNldChrZXkgYXMgc3RyaW5nLCBuZXcgU2V0KCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0ID0gaW5kZXhlZC5nZXQoa2V5IGFzIHN0cmluZykhO1xyXG4gICAgICAgICAgICAgICAgc2V0LmFkZChoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgIGhhbmRsZXJzLnNldChoYW5kbGVyLCBrZXkgYXMgc3RyaW5nKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb2ZmOiA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIEhhbmRsZXIgZXh0ZW5kcyAoZXZlbnQ6IFN0YXJnYXRlRXZlbnRzW0tleV0pID0+IHZvaWQ+KGtleTogS2V5LCBoYW5kbGVyOiBIYW5kbGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXQgPSBpbmRleGVkLmdldChrZXkgYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2V0KSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVycy5kZWxldGUoaGFuZGxlcik7XHJcbiAgICAgICAgICAgICAgICBzZXQuZGVsZXRlKGhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbWl0OiBhc3luYyA8S2V5IGV4dGVuZHMga2V5b2YgU3RhcmdhdGVFdmVudHMsIFZhbHVlIGV4dGVuZHMgU3RhcmdhdGVFdmVudHNbS2V5XT4oa2V5OiBLZXksIHZhbHVlOiBWYWx1ZSk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaCA9IGluZGV4ZWQuZ2V0KGtleSBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGV2ZW50TWFuYWdlcjtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gX19pbml0RXZlbnRNYW5hZ2VyKCk7XHJcblxyXG4gICAgY29uc3QgYm9vdHN0cmFwID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGxldCBiYXNlVXJsID0gc3RhcmdhdGVPcHRpb25zLmJhc2VVcmw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgaWYgKGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpKSBiYXNlVXJsID0gYmFzZVVybC5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICAgIHJldHVybiBiYXNlVXJsO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBiYXNlVXJsOiBQcm9taXNlPHN0cmluZz4gPSBib290c3RyYXAoKTtcclxuXHJcbiAgICBjb25zdCBzdGFyZ2F0ZSA9IHtcclxuICAgICAgICAuLi5ldmVudE1hbmFnZXIsXHJcbiAgICAgICAgb3B0aW9uczogc3RhcmdhdGVPcHRpb25zLFxyXG4gICAgICAgIGFzeW5jIGV4ZWN1dGU8UGF0aCBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdPihcclxuICAgICAgICAgICAgcGF0aDogUGF0aCxcclxuICAgICAgICAgICAgb3B0aW9uczogTWl4aW48XHJcbiAgICAgICAgICAgICAgICBFeGVjdXRlT3B0aW9ucyxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicGFyYW1zXCJdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA+LFxyXG4gICAgICAgICk6IFByb21pc2U8XHJcbiAgICAgICAgICAgIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCLwn6WbXCJdIGV4dGVuZHMgYm9vbGVhblxyXG4gICAgICAgICAgICA/IC8vIGFjdGlvblxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0sIEV4ZWN1dGVSZXN1bHRzT3B0aW9uXVxyXG4gICAgICAgICAgICA6IC8vIHN0cmVhbVxyXG4gICAgICAgICAgICBbUGFydGlhbDxHZW5lcmF0ZWRbXCJyZWplY3RDb2RlXCJdPiwgbnVsbCwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dIHwgW251bGwsIEFzeW5jR2VuZXJhdG9yPFtQYXJ0aWFsPEdlbmVyYXRlZFtcInJlamVjdENvZGVcIl0+LCBudWxsXSB8IFtudWxsLCBHZW5lcmF0b3JHZW5lcmljPEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJyZXN1bHRcIl0+XSwgdW5kZWZpbmVkPiwgRXhlY3V0ZVJlc3VsdHNPcHRpb25dXHJcbiAgICAgICAgPiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMgPT09IHVuZGVmaW5lZCkgb3B0aW9ucy5oZWFkZXJzID0ge307XHJcblxyXG4gICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJhc2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIGxldCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlVXJsID09PSBcImZ1bmN0aW9uXCIpIGJhc2VVcmwgPSBhd2FpdCBiYXNlVXJsKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmFzZVVybC5lbmRzV2l0aChcIi9cIikpIGJhc2VVcmwgPSBiYXNlVXJsLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAocGF0aCBhcyBzdHJpbmcpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdXJsID0gKGF3YWl0IGJhc2VVcmwpICsgKHBhdGggYXMgc3RyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCEocGF0aCBhcyBzdHJpbmcpLmVuZHNXaXRoKFwiflwiKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYWN0aW9uXHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLkFjY2VwdCA9PT0gdW5kZWZpbmVkKSBvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogeyB2YWx1ZTogUmVjb3JkPGFueSwgYW55PiB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmZldGNoQmVmb3JlXCIsIHsgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBib2R5IH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmV3IFByb21pc2U8c3RyaW5nPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBvcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChbeyBSRVFVRVNUX1RJTUVPVVQ6IHsgdGltZW91dCwgbWVzc2FnZTogYEV4ZWN1dGUgdGltZW91dCBhZnRlciAke3RpbWVvdXR9bXMuYCB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCAoYXdhaXQgJGZldGNoKHVybCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5LCBoZWFkZXJzOiBvcHRpb25zLmhlYWRlcnMgfSkpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB7IHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShyZXNwb25zZSkpIH07XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yPy5bMF0/LlJFUVVFU1RfVElNRU9VVCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpleGVjdXRlRXJyb3JcIiwgeyBoYW5kbGVFcnJvciwgcGF0aDogcGF0aCBhcyBzdHJpbmcsIG9wdGlvbnM6IG9wdGlvbnMgYXMgYW55LCBlcnJvciB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvclBpbmVkID0geyBSRVFVRVNUX0ZBSUw6IGVycm9yIH07XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3I6IGVycm9yUGluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtlcnJvclBpbmVkLCBudWxsLCB7IGV4ZWN1dGVJZDogXCJ1bmtub3duXCIgfV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlLnN1Y2Nlc3MgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JbcmVzdWx0LnZhbHVlLmNvZGVdID0gcmVzdWx0LnZhbHVlLnJlamVjdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVFcnJvclwiLCB7IGhhbmRsZUVycm9yLCBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnksIGVycm9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbZXJyb3IsIG51bGwsIHsgZXhlY3V0ZUlkOiBcInVua25vd25cIiB9XTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW251bGwsIHJlc3VsdC52YWx1ZS5kYXRhLCB7IGV4ZWN1dGVJZDogcmVzdWx0LnZhbHVlLmV4ZWN1dGVJZCB9XSBhcyBhbnk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzdHJlYW1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhlYWRlcnMuQWNjZXB0ID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPSBcInRleHQvZXZlbnQtc3RyZWFtXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdID09PSB1bmRlZmluZWQpIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IFwiYXBwbGljYXRpb24vanNvblwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrczogTWFwPFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8YW55Pj47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmU6ICh2YWx1ZTogSXRlcmF0b3JSZXN1bHQ8YW55PikgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiAocmVhc29uOiBhbnkpID0+IHZvaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPiA9IG5ldyBNYXAoKTtcclxuICAgICAgICAgICAgICAgIGxldCBzdGFja3NJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlcmF0b3JJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RyZWFtUmVzdWx0OiBhbnk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdHJlYW1SZXN1bHRGZXRjaGVkID0gd2l0aFJlc29sdmVyczx1bmRlZmluZWQ+KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dCA9IHN0YXJnYXRlT3B0aW9ucz8udGltZW91dCA/PyBvcHRpb25zPy50aW1lb3V0ID8/IDYwMDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfVElNRU9VVDogeyB0aW1lb3V0LCBtZXNzYWdlOiBgRXhlY3V0ZSB0aW1lb3V0IGFmdGVyICR7dGltZW91dH1tcy5gIH0gfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubWVzc2FnZSA9IChldmVudDogRXZlbnRTb3VyY2VNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuc3RhcnRzV2l0aChcIkBcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdCA9IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEuc2xpY2UoMSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFt7IFJFUVVFU1RfRkFJTDogZXJyb3IgfSwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9ICsrc3RhY2tzSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja3MuaGFzKGluZGV4KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5kb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIS5yZXNvbHZlKHsgZG9uZTogZmFsc2UsIHZhbHVlOiByZXZpdmVKU09OUGFyc2UoSlNPTi5wYXJzZShldmVudC5kYXRhKSkgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrcy5zZXQoaW5kZXgsIHsgLi4uc3RhY2ssIGRvbmU6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgY3VyUmVxdWVzdENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBjcmVhdGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIgPSBuZXcgJGFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGV2ZW50TWFuYWdlci5lbWl0KFwibWlsa2lvOmV4ZWN1dGVCZWZvcmVcIiwgeyBwYXRoOiBwYXRoIGFzIHN0cmluZywgb3B0aW9uczogb3B0aW9ucyBhcyBhbnkgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucyEucGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBldmVudE1hbmFnZXIuZW1pdChcIm1pbGtpbzpmZXRjaEJlZm9yZVwiLCB7IHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgYm9keSB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgJGZldGNoKHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IG9wdGlvbnMhLmhlYWRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250ZW50VHlwZT8uc3RhcnRzV2l0aChcInRleHQvZXZlbnQtc3RyZWFtXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGNvbnRlbnQtdHlwZSB0byBiZSAke1widGV4dC9ldmVudC1zdHJlYW1cIn0sIEFjdHVhbDogJHtjb250ZW50VHlwZX1gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2V0Qnl0ZXMocmVzcG9uc2UuYm9keSEsIGdldExpbmVzKGdldE1lc3NhZ2VzKG9ubWVzc2FnZSkpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IHsgUkVRVUVTVF9GQUlMOiBlcnIgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXZlbnRNYW5hZ2VyLmVtaXQoXCJtaWxraW86ZXhlY3V0ZUVycm9yXCIsIHsgaGFuZGxlRXJyb3IsIHBhdGg6IHBhdGggYXMgc3RyaW5nLCBvcHRpb25zOiBvcHRpb25zIGFzIGFueSwgZXJyb3IgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnRocm93KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVJlc3VsdEZldGNoZWQucmVqZWN0KFtlcnJvciwgbnVsbCwgeyBleGVjdXRlSWQ6IFwidW5rbm93blwiIH1dKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1SZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUlkOiBzdHJlYW1SZXN1bHQ/LmV4ZWN1dGVJZCA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJORVRXT1JLX0VSUk9SXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiTmV0d29yayBFcnJvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ2xpZW50OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBlcnIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfaW5kZXgsIHN0YWNrXSBvZiBzdGFja3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suZG9uZSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suZG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzdHJlYW1SZXN1bHRGZXRjaGVkLnByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBpdGVyYXRvciwgeyBleGVjdXRlSWQ6IHN0cmVhbVJlc3VsdC5leGVjdXRlSWQgfV0gYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBfX2Nvb2tib29rOiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZTogYXN5bmMgKGJhc2VVcmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgICAgICAgICBBY2NlcHQ6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkocGFyYW1zKSA/PyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhY2tzOiBNYXA8XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogYm9vbGVhbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxhbnk+PjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBJdGVyYXRvclJlc3VsdDxhbnk+KSA9PiB2b2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Q6IChyZWFzb246IGFueSkgPT4gdm9pZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA+ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YWNrc0luZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIGxldCBpdGVyYXRvckluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbm1lc3NhZ2UgPSAoZXZlbnQ6IEV2ZW50U291cmNlTWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytzdGFja3NJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tzLmhhcyhpbmRleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhY2sgPSBzdGFja3MuZ2V0KGluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2shLnJlc29sdmUoeyBkb25lOiBmYWxzZSwgdmFsdWU6IHJldml2ZUpTT05QYXJzZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVzb2x2ZSh7IGRvbmU6IGZhbHNlLCB2YWx1ZTogcmV2aXZlSlNPTlBhcnNlKEpTT04ucGFyc2UoZXZlbnQuZGF0YSkpIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBjdXJSZXF1ZXN0Q29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlciA9IG5ldyAkYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2goYCR7YmFzZVVybH0vJHN1YnNjcmliZWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJDb250ZW50LVR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGVudFR5cGU/LnN0YXJ0c1dpdGgoXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBjb250ZW50LXR5cGUgdG8gYmUgJHtcInRleHQvZXZlbnQtc3RyZWFtXCJ9LCBBY3R1YWw6ICR7Y29udGVudFR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdldEJ5dGVzKHJlc3BvbnNlLmJvZHkhLCBnZXRMaW5lcyhnZXRNZXNzYWdlcyhvbm1lc3NhZ2UpKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJSZXF1ZXN0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkgY3VyUmVxdWVzdENvbnRyb2xsZXIuYWJvcnQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaXRlcmF0b3IudGhyb3coZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdm9pZCBjcmVhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVyYXRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi4oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dW5rbm93bj4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gKytpdGVyYXRvckluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrcy5oYXMoaW5kZXggLSAyKSkgc3RhY2tzLmRlbGV0ZShpbmRleCAtIDIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFja3MuaGFzKGluZGV4KSAmJiAhY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja3Muc2V0KGluZGV4LCB7IC4uLnN0YWNrLCBkb25lOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhY2tzLmhhcyhpbmRleCkgJiYgY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFjayA9IHdpdGhSZXNvbHZlcnM8SXRlcmF0b3JSZXN1bHQ8YW55Pj4oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFja3MuZ2V0KGluZGV4KSEucHJvbWlzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgcmV0dXJuKCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8dm9pZD4+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3VyUmVxdWVzdENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIGN1clJlcXVlc3RDb250cm9sbGVyLmFib3J0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtfLCBpdGVyYXRvcl0gb2Ygc3RhY2tzKSBpdGVyYXRvci5yZXNvbHZlKHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmMgdGhyb3coZXJyOiBhbnkpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PHZvaWQ+PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1clJlcXVlc3RDb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSBjdXJSZXF1ZXN0Q29udHJvbGxlci5hYm9ydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbXywgaXRlcmF0b3JdIG9mIHN0YWNrcykgaXRlcmF0b3IucmVzb2x2ZSh7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXN5bmNJdGVyYXRvcjx1bmtub3duPiksXHJcbiAgICAgICAgICAgICAgICAgICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3I7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhc3luYyBwaW5nKG9wdGlvbnM/OiB7IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8UGluZz4ge1xyXG4gICAgICAgICAgICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXN5bmMtcHJvbWlzZS1leGVjdXRvclxyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8UGluZz4oYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGAke2F3YWl0IGJhc2VVcmx9L2dlbmVyYXRlXzIwNGA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc3RhcmdhdGVPcHRpb25zPy50aW1lb3V0ID8/IG9wdGlvbnM/LnRpbWVvdXQgPz8gNjAwMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0c1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRzVGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3I6IHsgUkVRVUVTVF9USU1FT1VUOiB7IHRpbWVvdXQsIG1lc3NhZ2U6IGBFeGVjdXRlIHRpbWVvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zLmAgfSB9IH0sIG51bGxdKTtcclxuICAgICAgICAgICAgICAgIH0sIHRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCAkZmV0Y2godXJsLCB7IG1ldGhvZDogXCJIRUFEXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoW3sgY29ubmVjdDogZmFsc2UsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIGVycm9yOiB7IFJFUVVFU1RfRkFJTDogeyByZXNwb25zZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IFwiU3RhdHVzIGNvZGUgbm90IDIwNFwiIH0gfSB9LCBudWxsXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtudWxsLCB7IGNvbm5lY3Q6IHRydWUsIGRlbGF5OiBlbmRzVGltZSAtIHN0YXJ0c1RpbWUsIHNlcnZlclRpbWVzdGFtcDogTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpIS5zdWJzdHJpbmcoMTcpKSB9XSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kc1RpbWUgPSBEYXRlLm5vdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbeyBjb25uZWN0OiBmYWxzZSwgZGVsYXk6IGVuZHNUaW1lIC0gc3RhcnRzVGltZSwgZXJyb3IgfSwgbnVsbF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJHR5cGVzOiB1bmRlZmluZWQgYXMgdW5rbm93biBhcyB7XHJcbiAgICAgICAgICAgIGdlbmVyYXRlZDogR2VuZXJhdGVkLFxyXG4gICAgICAgICAgICBlcnJvcjogR2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXTtcclxuICAgICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBbUGF0aCBpbiBrZXlvZiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXV06IEdlbmVyYXRlZFtcInJvdXRlU2NoZW1hXCJdW1BhdGhdW1widHlwZXNcIl1bXCJwYXJhbXNcIl1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzdWx0czoge1xyXG4gICAgICAgICAgICAgICAgW1BhdGggaW4ga2V5b2YgR2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1dOiBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wi8J+lm1wiXSBleHRlbmRzIGJvb2xlYW5cclxuICAgICAgICAgICAgICAgID8gLy8gYWN0aW9uXHJcbiAgICAgICAgICAgICAgICBHZW5lcmF0ZWRbXCJyb3V0ZVNjaGVtYVwiXVtQYXRoXVtcInR5cGVzXCJdW1wicmVzdWx0XCJdXHJcbiAgICAgICAgICAgICAgICA6IC8vIHN0cmVhbVxyXG4gICAgICAgICAgICAgICAgQXN5bmNHZW5lcmF0b3I8W1BhcnRpYWw8R2VuZXJhdGVkW1wicmVqZWN0Q29kZVwiXT4sIG51bGxdIHwgW251bGwsIEdlbmVyYXRvckdlbmVyaWM8R2VuZXJhdGVkW1wicm91dGVTY2hlbWFcIl1bUGF0aF1bXCJ0eXBlc1wiXVtcInJlc3VsdFwiXT5dLCB1bmRlZmluZWQ+XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHN0YXJnYXRlO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZXZpdmVKU09OUGFyc2U8VD4oanNvbjogVCk6IFQge1xyXG4gICAgY29uc3QgaXNvRGF0ZVBhdHRlcm4gPSAvXihcXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZHsxLDN9KT8pKFp8WystXVxcZHsyfTo/XFxkezJ9KT8kLztcclxuXHJcbiAgICBpZiAoanNvbiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBqc29uO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcclxuICAgICAgICByZXR1cm4ganNvbi5tYXAoKGl0ZW0pID0+IHJldml2ZUpTT05QYXJzZShpdGVtKSkgYXMgYW55O1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBqc29uID09PSBcIm9iamVjdFwiICYmIGpzb24gIT09IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoanNvbikucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgICBhY2Nba2V5IGFzIGtleW9mIFRdID0gcmV2aXZlSlNPTlBhcnNlKHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LCB7fSBhcyBUKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YganNvbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0ganNvbi5tYXRjaChpc29EYXRlUGF0dGVybik7XHJcbiAgICAgICAgaWYgKG1hdGNoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREYXRlU3RyaW5nID0gbWF0Y2hbMl0gPyBgJHttYXRjaFsxXX0ke21hdGNoWzJdLnJlcGxhY2UoXCI6XCIsIFwiXCIpfWAgOiBgJHttYXRjaFsxXX1aYDtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5vcm1hbGl6ZWREYXRlU3RyaW5nKSBhcyBhbnk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGpzb247XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVN0cmVhbU9wdGlvbnMge1xyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwaVNjaGVtYUV4dGVuZCB7XHJcbiAgICBhcGlWYWxpZGF0b3I6IHtcclxuICAgICAgICBnZW5lcmF0ZWRBdDogbnVtYmVyO1xyXG4gICAgICAgIHZhbGlkYXRlOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG4gICAgfTtcclxuICAgIGFwaU1ldGhvZHNTY2hlbWE6IFJlY29yZDxhbnksIGFueT47XHJcbiAgICBhcGlNZXRob2RzVHlwZVNjaGVtYTogUmVjb3JkPGFueSwgYW55PjtcclxuICAgIGFwaVRlc3RzU2NoZW1hOiBSZWNvcmQ8YW55LCBhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGYWlsQ29kZUV4dGVuZCA9IFJlY29yZDxhbnksICguLi5hcmdzOiBBcnJheTxhbnk+KSA9PiBhbnk+O1xyXG5cclxuZXhwb3J0IHR5cGUgQm9vdHN0cmFwTWlkZGxld2FyZSA9IChkYXRhOiB7IHN0b3JhZ2U6IENsaWVudFN0b3JhZ2UgfSkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XHJcbmV4cG9ydCB0eXBlIEJlZm9yZUV4ZWN1dGVNaWRkbGV3YXJlID0gKGRhdGE6IHsgcGF0aDogc3RyaW5nOyBwYXJhbXM6IGFueTsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuZXhwb3J0IHR5cGUgQWZ0ZXJFeGVjdXRlTWlkZGxld2FyZSA9IChkYXRhOiB7IHBhdGg6IHN0cmluZzsgcmVzdWx0OiB7IHZhbHVlOiBhbnkgfTsgc3RvcmFnZTogQ2xpZW50U3RvcmFnZSB9KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTWlkZGxld2FyZU9wdGlvbnMge1xyXG4gICAgYm9vdHN0cmFwPzogQm9vdHN0cmFwTWlkZGxld2FyZTtcclxuICAgIGJlZm9yZUV4ZWN1dGU/OiBCZWZvcmVFeGVjdXRlTWlkZGxld2FyZTtcclxuICAgIGFmdGVyRXhlY3V0ZT86IEFmdGVyRXhlY3V0ZU1pZGRsZXdhcmU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50U3RvcmFnZSB7XHJcbiAgICBnZXRJdGVtOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgbnVsbD47XHJcbiAgICBzZXRJdGVtOiAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XHJcbiAgICByZW1vdmVJdGVtOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0ZVJlc3VsdFN1Y2Nlc3M8UmVzdWx0PiB7XHJcbiAgICBleGVjdXRlSWQ6IHN0cmluZztcclxuICAgIHN1Y2Nlc3M6IHRydWU7XHJcbiAgICBkYXRhOiBSZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEdlbmVyYXRvckdlbmVyaWM8VD4gPSBUIGV4dGVuZHMgQXN5bmNHZW5lcmF0b3I8aW5mZXIgST4gPyBJIDogbmV2ZXI7XHJcblxyXG5leHBvcnQgdHlwZSBGbGF0dGVuS2V5czxULCBQcmVmaXggZXh0ZW5kcyBzdHJpbmcgPSBcIlwiPiA9IHtcclxuICAgIFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgb2JqZWN0ID8gRmxhdHRlbktleXM8VFtLXSwgYCR7UHJlZml4fSR7RXhjbHVkZTxLLCBzeW1ib2w+fS5gPiA6IGAkaW5wdXQuJHtQcmVmaXh9JHtFeGNsdWRlPEssIHN5bWJvbD59YDtcclxufVtrZXlvZiBUXTtcclxuXHJcbi8vICoqKiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgYmFzZWQgb24gYEBtaWNyb3NvZnQvZmV0Y2gtZXZlbnQtc291cmNlYCByZXdyaXRlLCB0aGFua3MgdG8gdGhlIHdvcmsgb2YgTWljcm9zb2Z0ICoqKiAvL1xyXG4vLyAqKiogaHR0cHM6Ly9naXRodWIuY29tL0F6dXJlL2ZldGNoLWV2ZW50LXNvdXJjZS9ibG9iL21haW4vc3JjL3BhcnNlLnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKiogLy9cclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgbWVzc2FnZSBzZW50IGluIGFuIGV2ZW50IHN0cmVhbVxyXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2VydmVyLXNlbnRfZXZlbnRzL1VzaW5nX3NlcnZlci1zZW50X2V2ZW50cyNFdmVudF9zdHJlYW1fZm9ybWF0XHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50U291cmNlTWVzc2FnZSB7XHJcbiAgICBkYXRhOiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0cyBhIFJlYWRhYmxlU3RyZWFtIGludG8gYSBjYWxsYmFjayBwYXR0ZXJuLlxyXG4gKiBAcGFyYW0gc3RyZWFtIFRoZSBpbnB1dCBSZWFkYWJsZVN0cmVhbS5cclxuICogQHBhcmFtIG9uQ2h1bmsgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbmV3IGJ5dGUgY2h1bmsgaW4gdGhlIHN0cmVhbS5cclxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgd2hlbiB0aGUgc3RyZWFtIGNsb3Nlcy5cclxuICovXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCeXRlcyhzdHJlYW06IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+LCBvbkNodW5rOiAoYXJyOiBVaW50OEFycmF5KSA9PiB2b2lkKSB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XHJcbiAgICBsZXQgcmVzdWx0OiBSZWFkYWJsZVN0cmVhbVJlYWRSZXN1bHQ8VWludDhBcnJheT47XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB3aGlsZSAoIShyZXN1bHQgPSBhd2FpdCByZWFkZXIucmVhZCgpKS5kb25lKSB7XHJcbiAgICAgICAgb25DaHVuayhyZXN1bHQudmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogUGFyc2VzIGFyYml0YXJ5IGJ5dGUgY2h1bmtzIGludG8gRXZlbnRTb3VyY2UgbGluZSBidWZmZXJzLlxyXG4gKiBFYWNoIGxpbmUgc2hvdWxkIGJlIG9mIHRoZSBmb3JtYXQgXCJmaWVsZDogdmFsdWVcIiBhbmQgZW5kcyB3aXRoIFxcciwgXFxuLCBvciBcXHJcXG4uXHJcbiAqIEBwYXJhbSBvbkxpbmUgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uIGVhY2ggbmV3IEV2ZW50U291cmNlIGxpbmUuXHJcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIGZvciBlYWNoIGluY29taW5nIGJ5dGUgY2h1bmsuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGluZXMob25MaW5lOiAobGluZTogVWludDhBcnJheSwgZmllbGRMZW5ndGg6IG51bWJlcikgPT4gdm9pZCkge1xyXG4gICAgbGV0IGJ1ZmZlcjogVWludDhBcnJheSB8IHVuZGVmaW5lZDtcclxuICAgIGxldCBwb3NpdGlvbjogbnVtYmVyOyAvLyBjdXJyZW50IHJlYWQgcG9zaXRpb25cclxuICAgIGxldCBmaWVsZExlbmd0aDogbnVtYmVyOyAvLyBsZW5ndGggb2YgdGhlIGBmaWVsZGAgcG9ydGlvbiBvZiB0aGUgbGluZVxyXG4gICAgbGV0IGRpc2NhcmRUcmFpbGluZ05ld2xpbmUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiB0aGF0IGNhbiBwcm9jZXNzIGVhY2ggaW5jb21pbmcgYnl0ZSBjaHVuazpcclxuICAgIHJldHVybiBmdW5jdGlvbiBvbkNodW5rKGFycjogVWludDhBcnJheSkge1xyXG4gICAgICAgIGlmIChidWZmZXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBidWZmZXIgPSBhcnI7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uID0gMDtcclxuICAgICAgICAgICAgZmllbGRMZW5ndGggPSAtMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB3ZSdyZSBzdGlsbCBwYXJzaW5nIHRoZSBvbGQgbGluZS4gQXBwZW5kIHRoZSBuZXcgYnl0ZXMgaW50byBidWZmZXI6XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGNvbmNhdChidWZmZXIsIGFycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBidWZMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xyXG4gICAgICAgIGxldCBsaW5lU3RhcnQgPSAwOyAvLyBpbmRleCB3aGVyZSB0aGUgY3VycmVudCBsaW5lIHN0YXJ0c1xyXG4gICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGJ1Zkxlbmd0aCkge1xyXG4gICAgICAgICAgICBpZiAoZGlzY2FyZFRyYWlsaW5nTmV3bGluZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcltwb3NpdGlvbl0gPT09IDEwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGluZVN0YXJ0ID0gKytwb3NpdGlvbjsgLy8gc2tpcCB0byBuZXh0IGNoYXJcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBkaXNjYXJkVHJhaWxpbmdOZXdsaW5lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHN0YXJ0IGxvb2tpbmcgZm9yd2FyZCB0aWxsIHRoZSBlbmQgb2YgbGluZTpcclxuICAgICAgICAgICAgbGV0IGxpbmVFbmQgPSAtMTsgLy8gaW5kZXggb2YgdGhlIFxcciBvciBcXG4gY2hhclxyXG4gICAgICAgICAgICBmb3IgKDsgcG9zaXRpb24gPCBidWZMZW5ndGggJiYgbGluZUVuZCA9PT0gLTE7ICsrcG9zaXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoYnVmZmVyW3Bvc2l0aW9uXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTg6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZExlbmd0aCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpcnN0IGNvbG9uIGluIGxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTGVuZ3RoID0gcG9zaXRpb24gLSBsaW5lU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0ZhbGx0aHJvdWdoU3dpdGNoQ2xhdXNlOiA8ZXhwbGFuYXRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY2FyZFRyYWlsaW5nTmV3bGluZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUVuZCA9IHBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmVFbmQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBXZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBidXQgdGhlIGxpbmUgaGFzbid0IGVuZGVkLlxyXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIG5leHQgYXJyIGFuZCB0aGVuIGNvbnRpbnVlIHBhcnNpbmc6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gd2UndmUgcmVhY2hlZCB0aGUgbGluZSBlbmQsIHNlbmQgaXQgb3V0OlxyXG4gICAgICAgICAgICBvbkxpbmUoYnVmZmVyLnN1YmFycmF5KGxpbmVTdGFydCwgbGluZUVuZCksIGZpZWxkTGVuZ3RoKTtcclxuICAgICAgICAgICAgbGluZVN0YXJ0ID0gcG9zaXRpb247IC8vIHdlJ3JlIG5vdyBvbiB0aGUgbmV4dCBsaW5lXHJcbiAgICAgICAgICAgIGZpZWxkTGVuZ3RoID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobGluZVN0YXJ0ID09PSBidWZMZW5ndGgpIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gdW5kZWZpbmVkOyAvLyB3ZSd2ZSBmaW5pc2hlZCByZWFkaW5nIGl0XHJcbiAgICAgICAgfSBlbHNlIGlmIChsaW5lU3RhcnQgIT09IDApIHtcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHZpZXcgaW50byBidWZmZXIgYmVnaW5uaW5nIGF0IGxpbmVTdGFydCBzbyB3ZSBkb24ndFxyXG4gICAgICAgICAgICAvLyBuZWVkIHRvIGNvcHkgb3ZlciB0aGUgcHJldmlvdXMgbGluZXMgd2hlbiB3ZSBnZXQgdGhlIG5ldyBhcnI6XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGJ1ZmZlci5zdWJhcnJheShsaW5lU3RhcnQpO1xyXG4gICAgICAgICAgICBwb3NpdGlvbiAtPSBsaW5lU3RhcnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlcyBsaW5lIGJ1ZmZlcnMgaW50byBFdmVudFNvdXJjZU1lc3NhZ2VzLlxyXG4gKiBAcGFyYW0gb25JZCBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBgaWRgIGZpZWxkLlxyXG4gKiBAcGFyYW0gb25SZXRyeSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBgcmV0cnlgIGZpZWxkLlxyXG4gKiBAcGFyYW0gb25NZXNzYWdlIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIG1lc3NhZ2UuXHJcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIGZvciBlYWNoIGluY29taW5nIGxpbmUgYnVmZmVyLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc3NhZ2VzKG9uTWVzc2FnZT86IChtc2c6IEV2ZW50U291cmNlTWVzc2FnZSkgPT4gdm9pZCkge1xyXG4gICAgbGV0IG1lc3NhZ2UgPSBuZXdNZXNzYWdlKCk7XHJcbiAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcblxyXG4gICAgLy8gcmV0dXJuIGEgZnVuY3Rpb24gdGhhdCBjYW4gcHJvY2VzcyBlYWNoIGluY29taW5nIGxpbmUgYnVmZmVyOlxyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG9uTGluZShsaW5lOiBVaW50OEFycmF5LCBmaWVsZExlbmd0aDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vIGVtcHR5IGxpbmUgZGVub3RlcyBlbmQgb2YgbWVzc2FnZS4gVHJpZ2dlciB0aGUgY2FsbGJhY2sgYW5kIHN0YXJ0IGEgbmV3IG1lc3NhZ2U6XHJcbiAgICAgICAgICAgIG9uTWVzc2FnZT8uKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gbmV3TWVzc2FnZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIGV4Y2x1ZGUgY29tbWVudHMgYW5kIGxpbmVzIHdpdGggbm8gdmFsdWVzXHJcbiAgICAgICAgICAgIC8vIGxpbmUgaXMgb2YgZm9ybWF0IFwiPGZpZWxkPjo8dmFsdWU+XCIgb3IgXCI8ZmllbGQ+OiA8dmFsdWU+XCJcclxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjZXZlbnQtc3RyZWFtLWludGVycHJldGF0aW9uXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZGVjb2Rlci5kZWNvZGUobGluZS5zdWJhcnJheSgwLCBmaWVsZExlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZU9mZnNldCA9IGZpZWxkTGVuZ3RoICsgKGxpbmVbZmllbGRMZW5ndGggKyAxXSA9PT0gMzIgPyAyIDogMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGVjb2Rlci5kZWNvZGUobGluZS5zdWJhcnJheSh2YWx1ZU9mZnNldCkpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChmaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcImRhdGFcIjpcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGlzIG1lc3NhZ2UgYWxyZWFkeSBoYXMgZGF0YSwgYXBwZW5kIHRoZSBuZXcgdmFsdWUgdG8gdGhlIG9sZC5cclxuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlcndpc2UsIGp1c3Qgc2V0IHRvIHRoZSBuZXcgdmFsdWU6XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhID0gbWVzc2FnZS5kYXRhID8gYCR7bWVzc2FnZS5kYXRhfVxcbiR7dmFsdWV9YCA6IHZhbHVlOyAvLyBvdGhlcndpc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb25jYXQoYTogVWludDhBcnJheSwgYjogVWludDhBcnJheSkge1xyXG4gICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoYS5sZW5ndGggKyBiLmxlbmd0aCk7XHJcbiAgICByZXMuc2V0KGEpO1xyXG4gICAgcmVzLnNldChiLCBhLmxlbmd0aCk7XHJcbiAgICByZXR1cm4gcmVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBuZXdNZXNzYWdlKCk6IEV2ZW50U291cmNlTWVzc2FnZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGRhdGE6IFwiXCIsXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd2l0aFJlc29sdmVyczxUID0gYW55PigpOiBQcm9taXNlV2l0aFJlc29sdmVyczxUPiB7XHJcbiAgICBsZXQgcmVzb2x2ZTogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZXNvbHZlXCJdO1xyXG4gICAgbGV0IHJlamVjdDogUHJvbWlzZVdpdGhSZXNvbHZlcnM8VD5bXCJyZWplY3RcIl07XHJcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8VD4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZSA9IHJlcztcclxuICAgICAgICByZWplY3QgPSByZWo7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlc29sdmUhLCByZWplY3Q6IHJlamVjdCEgfTtcclxufVxyXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBbUNBLGVBQXNCLGNBQXVFLENBQUMsaUJBQXdDO0FBQUEsRUFDbEksTUFBTSxTQUFTLGdCQUFnQixTQUFTO0FBQUEsRUFDeEMsTUFBTSxTQUFTLGdCQUFnQixTQUFTO0FBQUEsRUFheEMsTUFBTSxjQUFtQixPQUFPLE9BQVksS0FBYSxZQUF3RDtBQUFBLElBQzdHLElBQUksT0FBTyxPQUFPO0FBQUEsTUFDZCxNQUFNLFVBQVUsTUFBTSxRQUFRLE1BQU0sSUFBSTtBQUFBLE1BQ3hDLElBQUk7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
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@milkio/stargate","version":"1.0.0-beta.
|
|
1
|
+
{"name":"@milkio/stargate","version":"1.0.0-beta.186","type":"module","exports":"./index.js","types":"./index.d.ts","dependencies":{}}
|