sonamu 0.7.14 → 0.7.16
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/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +4 -3
- package/dist/database/base-model.d.ts +16 -6
- package/dist/database/base-model.d.ts.map +1 -1
- package/dist/database/base-model.js +44 -3
- package/dist/database/base-model.types.d.ts +29 -48
- package/dist/database/base-model.types.d.ts.map +1 -1
- package/dist/database/base-model.types.js +12 -2
- package/dist/database/puri.d.ts +2 -1
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +2 -1
- package/dist/database/puri.types.d.ts +3 -3
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/database/puri.types.js +1 -1
- package/dist/entity/entity-manager.d.ts +8 -4
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity.d.ts +10 -1
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +84 -39
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/tasks/workflow-manager.d.ts +3 -3
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +15 -11
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +8 -6
- package/dist/types/types.d.ts +41 -11
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +27 -3
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +12 -3
- package/dist/ui-web/assets/{index-J9MCfjCd.js → index-BcbbB-BB.js} +42 -42
- package/dist/ui-web/index.html +1 -1
- package/package.json +3 -3
- package/src/api/sonamu.ts +3 -2
- package/src/database/base-model.ts +66 -11
- package/src/database/base-model.types.ts +79 -76
- package/src/database/puri.ts +5 -1
- package/src/database/puri.types.ts +3 -6
- package/src/entity/entity.ts +83 -34
- package/src/index.ts +1 -0
- package/src/tasks/workflow-manager.ts +16 -12
- package/src/template/implementations/generated.template.ts +17 -3
- package/src/types/types.ts +31 -2
- package/src/ui/api.ts +11 -2
package/dist/ui/api.js
CHANGED
|
@@ -400,12 +400,20 @@ export async function sonamuUIApiPlugin(fastify) {
|
|
|
400
400
|
});
|
|
401
401
|
server.post("/api/entity/modifySubset", async (request)=>{
|
|
402
402
|
return await waitForHMRCompleted(async ()=>{
|
|
403
|
-
const { entityId, subsetKey, fields } = request.body;
|
|
403
|
+
const { entityId, subsetKey, fields, fieldsInternal } = request.body;
|
|
404
404
|
const entity = EntityManager.get(entityId);
|
|
405
405
|
entity.subsets[subsetKey] = fields;
|
|
406
|
+
if (fieldsInternal !== undefined) {
|
|
407
|
+
if (fieldsInternal.length > 0) {
|
|
408
|
+
entity.subsetsInternal[subsetKey] = fieldsInternal;
|
|
409
|
+
} else {
|
|
410
|
+
delete entity.subsetsInternal[subsetKey];
|
|
411
|
+
}
|
|
412
|
+
}
|
|
406
413
|
await entity.save();
|
|
407
414
|
return {
|
|
408
|
-
updated: fields
|
|
415
|
+
updated: fields,
|
|
416
|
+
updatedInternal: fieldsInternal
|
|
409
417
|
};
|
|
410
418
|
});
|
|
411
419
|
});
|
|
@@ -414,6 +422,7 @@ export async function sonamuUIApiPlugin(fastify) {
|
|
|
414
422
|
const { entityId, subsetKey } = request.body;
|
|
415
423
|
const entity = EntityManager.get(entityId);
|
|
416
424
|
delete entity.subsets[subsetKey];
|
|
425
|
+
delete entity.subsetsInternal[subsetKey];
|
|
417
426
|
await entity.save();
|
|
418
427
|
return 1;
|
|
419
428
|
});
|
|
@@ -677,4 +686,4 @@ export async function sonamuUIApiPlugin(fastify) {
|
|
|
677
686
|
});
|
|
678
687
|
}
|
|
679
688
|
|
|
680
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByYW5nZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVEQkNvbmZpZyB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIGlzU29FeGNlcHRpb24sXG4gIFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbixcbn0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgdHlwZSBNaWdyYXRpb25SZXN1bHQsIE1pZ3JhdG9yIH0gZnJvbSBcIi4uL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuaW1wb3J0IHsgdHlwZSBEdXBsaWNhdGVDaGVja09wdGlvbnMsIEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5U3Vic2V0Um93LFxuICB0eXBlIEZpeHR1cmVSZWNvcmQsXG4gIHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMsXG4gIHR5cGUgRmxhdHRlblN1YnNldFJvdyxcbiAgdHlwZSBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvbmFtdVVJQXBpUGx1Z2luKGZhc3RpZnk6IEZhc3RpZnlJbnN0YW5jZSkge1xuICBmYXN0aWZ5LnJlZ2lzdGVyKFxuICAgIGFzeW5jIChzZXJ2ZXIpID0+IHtcbiAgICAgIC8vIG1pZ3JhdG9yXG4gICAgICBjb25zdCBtaWdyYXRvciA9IG5ldyBNaWdyYXRvcigpO1xuXG4gICAgICAvLyB3YWl0Rm9ySE1SQ29tcGxldGVkXG4gICAgICBhc3luYyBmdW5jdGlvbiB3YWl0Rm9ySE1SQ29tcGxldGVkPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHdhaXRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSwgMTUwMCk7XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgU29uYW11LnN5bmNlci5ldmVudEVtaXR0ZXIub2ZmKFwib25ITVJDb21wbGV0ZWRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIFNvbmFtdS5zeW5jZXIuZXZlbnRFbWl0dGVyLm9uY2UoXCJvbkhNUkNvbXBsZXRlZFwiLCBoYW5kbGVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgICAgYXdhaXQgd2FpdFByb21pc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL3NvbmFtdS9jb25maWdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gU29uYW11LmNvbmZpZztcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBlbnRpdHlJZD86IHN0cmluZztcbiAgICAgICAgICBwcmVzZXQ/OiBcInR5cGVzXCIgfCBcImVudGl0eS5qc29uXCIgfCBcImdlbmVyYXRlZFwiO1xuICAgICAgICAgIGFic1BhdGg/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvdG9vbHMvb3BlblZzY29kZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBwcmVzZXQsIGFic1BhdGggfSA9IHJlcXVlc3QucXVlcnk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9ICgoKSA9PiB7XG4gICAgICAgICAgaWYgKGVudGl0eUlkICYmIHByZXNldCkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lcyB9ID0gZW50aXR5O1xuXG4gICAgICAgICAgICBjb25zdCB7IGFwaVJvb3RQYXRoIH0gPSBTb25hbXU7XG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9ICgoKSA9PiB7XG4gICAgICAgICAgICAgIHN3aXRjaCAocHJlc2V0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInR5cGVzXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZXMuZnN9LnR5cGVzLnRzYDtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW50aXR5Lmpzb25cIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJnZW5lcmF0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lcy5mc30uZ2VuZXJhdGVkLnRzYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiBgJHthcGlSb290UGF0aH0vc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLnBhcmVudEZzfS8ke2ZpbGVuYW1lfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghYWJzUGF0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihcInByZXNldCBvciBhYnNQYXRoIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWJzUGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGV4ZWNTeW5jKGBjb2RlICR7dGFyZ2V0UGF0aH1gKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBvcmlnaW46IHN0cmluZztcbiAgICAgICAgICBlbnRpdHlJZD86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS90b29scy9nZXRTdWdnZXN0aW9uXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luLCBlbnRpdHlJZCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICAvLyDsuZjtmZgg7Jqp7Ja07KeRXG4gICAgICAgIGNvbnN0IGdsb3NzYXJ5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICAgICAgICAgIFtcInN0YXR1c1wiLCBcIuyDge2DnFwiXSxcbiAgICAgICAgICBbXCJ0eXBlXCIsIFwi7YOA7J6FXCJdLFxuICAgICAgICAgIFtcImltYWdlXCIsIFwi7J2066+47KeAXCJdLFxuICAgICAgICAgIFtcImltYWdlc1wiLCBcIuydtOuvuOyngOumrOyKpO2KuFwiXSxcbiAgICAgICAgICBbXCJ1cmxcIiwgXCJVUkxcIl0sXG4gICAgICAgICAgW1wiaWRcIiwgXCJJRFwiXSxcbiAgICAgICAgICBbXCJuYW1lXCIsIGB7RW50aXR5SUR966qFYF0sXG4gICAgICAgICAgW1widGl0bGVcIiwgXCJ7RW50aXR5SUR966qFXCJdLFxuICAgICAgICAgIFtcInBhcmVudFwiLCBcIuyDgeychHtFbnRpdHlJRH1cIl0sXG4gICAgICAgICAgW1wiZGVzY1wiLCBcIuyEpOuqhVwiXSxcbiAgICAgICAgICBbXCJhdFwiLCBcIuydvOyLnFwiXSxcbiAgICAgICAgICBbXCJjcmVhdGVkXCIsIFwi65Ox66GdXCJdLFxuICAgICAgICAgIFtcInVwZGF0ZWRcIiwgXCLsiJjsoJVcIl0sXG4gICAgICAgICAgW1wiZGVsZXRlZFwiLCBcIuyCreygnFwiXSxcbiAgICAgICAgICBbXCJieVwiLCBcIuycoOyggFwiXSxcbiAgICAgICAgICBbXCJkYXRlXCIsIFwi7J287J6QXCJdLFxuICAgICAgICAgIFtcInRpbWVcIiwgXCLsi5zqsIRcIl0sXG4gICAgICAgICAgW1wia29cIiwgXCIo7ZWc6riAKVwiXSxcbiAgICAgICAgICBbXCJlblwiLCBcIijsmIHrrLgpXCJdLFxuICAgICAgICAgIFtcImtyd1wiLCBcIijsm5ApXCJdLFxuICAgICAgICAgIFtcInVzZFwiLCBcIihVU0QpXCJdLFxuICAgICAgICAgIFtcImNvbG9yXCIsIFwi7Lus65+sXCJdLFxuICAgICAgICAgIFtcImNvZGVcIiwgXCLsvZTrk5xcIl0sXG4gICAgICAgICAgW1wieFwiLCBcIljsooztkZxcIl0sXG4gICAgICAgICAgW1wieVwiLCBcIlnsooztkZxcIl0sXG4gICAgICAgICAgW1wiY3VycmVudFwiLCBcIu2YhOyerFwiXSxcbiAgICAgICAgICBbXCJzdG9ja1wiLCBcIuyerOqzoFwiXSxcbiAgICAgICAgICBbXCJ0b3RhbFwiLCBcIuy0nVwiXSxcbiAgICAgICAgICBbXCJhZG1pblwiLCBcIuq0gOumrOyekFwiXSxcbiAgICAgICAgICBbXCJncm91cFwiLCBcIuq3uOujuVwiXSxcbiAgICAgICAgICBbXCJpdGVtXCIsIFwi7JWE7J207YWcXCJdLFxuICAgICAgICAgIFtcImNudFwiLCBcIuyImOufiVwiXSxcbiAgICAgICAgICBbXCJwcmljZVwiLCBcIuqwgOqyqVwiXSxcbiAgICAgICAgICBbXCJwcmVzZXRcIiwgXCLtlITrpqzshYtcIl0sXG4gICAgICAgICAgW1wiYWNjdFwiLCBcIuqzhOyijFwiXSxcbiAgICAgICAgICBbXCJ0ZWxcIiwgXCLsoITtmZTrsojtmLhcIl0sXG4gICAgICAgICAgW1wibm9cIiwgXCLrsojtmLhcIl0sXG4gICAgICAgICAgW1wiYm9keVwiLCBcIuuCtOyaqVwiXSxcbiAgICAgICAgICBbXCJjb250ZW50XCIsIFwi64K07JqpXCJdLFxuICAgICAgICAgIFtcIm9yZGVybm9cIiwgXCLsoJXroKzsiJzshJxcIl0sXG4gICAgICAgICAgW1wicHJpb3JpdHlcIiwgXCLsmrDshKDsiJzsnIRcIl0sXG4gICAgICAgICAgW1widGV4dFwiLCBcIu2FjeyKpO2KuFwiXSxcbiAgICAgICAgICBbXCJrZXlcIiwgXCLtgqRcIl0sXG4gICAgICAgICAgW1wic3VtXCIsIFwi7ZWp7IKwXCJdLFxuICAgICAgICAgIFtcImV4cGVjdGVkXCIsIFwi7JiI7IOBXCJdLFxuICAgICAgICAgIFtcImFjdHVhbFwiLCBcIuyLpOygnFwiXSxcbiAgICAgICAgXSk7XG4gICAgICAgIC8vIOyghOyytCDsl5Tti7Dti7Ag7Iic7ZqM7ZWY66mwLCDsl5Tti7Dti7Ag7YOA7J207YuA6rO8IO2UhOuhrSDshKTrqoXsnYQg7LmY7ZmYIOyaqeyWtOynkeyXkCDstpTqsIBcbiAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpKSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGlmICgoZW50aXR5LnRpdGxlID8/IFwiXCIpICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBnbG9zc2FyeS5zZXQoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eS5pZCksIGVudGl0eS50aXRsZSk7XG4gICAgICAgICAgICBnbG9zc2FyeS5zZXQoXG4gICAgICAgICAgICAgIGluZmxlY3Rpb24udW5kZXJzY29yZShpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHkuaWQpKSxcbiAgICAgICAgICAgICAgYCR7ZW50aXR5LnRpdGxlfeumrOyKpO2KuGAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudGl0eS5wcm9wcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBpZiAoZ2xvc3NhcnkuaGFzKHByb3AubmFtZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgICAgICBnbG9zc2FyeS5zZXQocHJvcC5uYW1lLCBwcm9wLmRlc2MucmVwbGFjZShlbnRpdHkudGl0bGUgPz8gXCJcIiwgXCJ7RW50aXR5SUR9XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3RlZCA9ICgoKSA9PiB7XG4gICAgICAgICAgLy8g64uo7Ja0IOu2hOumrCwg6rCA64ql7ZWcIOyhsO2VqSDsg53shLFcbiAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yaWdpbi5zcGxpdChcIl9cIik7XG4gICAgICAgICAgY29uc3QgY29tYmluYXRpb25zID0gWy4uLnJhbmdlKHdvcmRzLmxlbmd0aCwgMCwgLTEpXS5mbGF0TWFwKChsZW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIC4uLnJhbmdlKDAsIHdvcmRzLmxlbmd0aCAtIGxlbiArIDEsIChpZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbGVuLFxuICAgICAgICAgICAgICAgICAgdzogd29yZHMuc2xpY2UoaWR4LCBpZHggKyBsZW4pLmpvaW4oXCJfXCIpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIOyhsO2VqeydhCDsiJztmoztlZjrqbAsIOy5mO2ZmCDsmqnslrTsp5Hsl5Ag7J6I64qUIOuLqOyWtOqwgCDtj6ztlajrkJwg6rK97JqwLCDsuZjtmZgg7Jqp7Ja066GcIOy5mO2ZmFxuICAgICAgICAgIGNvbnN0IFJFUExBQ0VEX1BSRUZJWCA9IFwiI1JFUExBQ0VELy9cIjsgLy8g7LmY7ZmY65CcIOuLqOyWtOulvCBqb2luIOydtO2bhOyXkOuPhCDsi53rs4TtlZjquLAg7JyE7ZW0IHByZWZpeCDstpTqsIBcbiAgICAgICAgICBsZXQgcmVtYWluQXJyOiBzdHJpbmdbXSA9IFsuLi53b3Jkc107XG4gICAgICAgICAgZm9yIChjb25zdCBjb21iIG9mIGNvbWJpbmF0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3RyID0gcmVtYWluQXJyLmpvaW4oXCJfXCIpO1xuICAgICAgICAgICAgaWYgKHJlbWFpblN0ci5pbmNsdWRlcyhjb21iLncpICYmIGdsb3NzYXJ5Lmhhcyhjb21iLncpKSB7XG4gICAgICAgICAgICAgIHJlbWFpbkFyciA9IHJlbWFpblN0clxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbWIudywgUkVQTEFDRURfUFJFRklYICsgZ2xvc3NhcnkuZ2V0KGNvbWIudykpXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVtYWluQXJyXG4gICAgICAgICAgICAubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyLnN0YXJ0c1dpdGgoUkVQTEFDRURfUFJFRklYKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByLnJlcGxhY2UoUkVQTEFDRURfUFJFRklYLCBcIlwiKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC97RW50aXR5SUR9L2csIGVudGl0eUlkID8gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnRpdGxlIDogXCJcIik7XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coeyBlbnRpdHlJZCwgb3JpZ2luLCBzdWdnZXN0ZWQgfSk7XG4gICAgICAgIHJldHVybiB7IHN1Z2dlc3RlZCB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2VudGl0eS9maW5kTWFueVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmxhdHRlblN1YnNldFJvd3Moc3Vic2V0Um93czogRW50aXR5U3Vic2V0Um93W10pOiBGbGF0dGVuU3Vic2V0Um93W10ge1xuICAgICAgICAgIHJldHVybiBzdWJzZXRSb3dzLmZsYXRNYXAoKHN1YnNldFJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgLi4uc1JvdyB9ID0gc3Vic2V0Um93O1xuICAgICAgICAgICAgcmV0dXJuIFtzUm93LCAuLi5mbGF0dGVuU3Vic2V0Um93cyhjaGlsZHJlbildO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50aXRpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBlbnRpdHlJZHMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2V0Um93cyA9IGVudGl0eS5nZXRTdWJzZXRSb3dzKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgICAgZmxhdHRlblN1YnNldFJvd3M6IGZsYXR0ZW5TdWJzZXRSb3dzKHN1YnNldFJvd3MpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRpdGllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgYUlkID0gYS5wYXJlbnRJZCA/PyBhLmlkO1xuICAgICAgICAgIGNvbnN0IGJJZCA9IGIucGFyZW50SWQgPz8gYi5pZDtcbiAgICAgICAgICBpZiAoYUlkIDwgYklkKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKGFJZCA+IGJJZCkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGFJZCA9PT0gYklkKSB7XG4gICAgICAgICAgICBpZiAoYS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAoYi5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGVudGl0aWVzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZmlsdGVyPzogXCJlbnVtc1wiIHwgXCJ0eXBlc1wiO1xuICAgICAgICAgIHJlbG9hZD86IFwiMVwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS90eXBlSWRzXCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHR5cGVJZHM6IHN0cmluZ1tdIH0+ID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXIsIHJlbG9hZCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICBpZiAocmVsb2FkID09PSBcIjFcIikge1xuICAgICAgICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuYXV0b2xvYWRUeXBlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZUlkcyA9ICgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZUlkcyA9IE9iamVjdC5lbnRyaWVzKFNvbmFtdS5zeW5jZXIudHlwZXMpXG4gICAgICAgICAgICAuZmlsdGVyKChbX3R5cGVJZCwgem9kVHlwZV0pID0+ICh6b2RUeXBlLmRlZi50eXBlIGFzIHN0cmluZykgIT09IFwiZW51bVwiKVxuICAgICAgICAgICAgLm1hcCgoW3R5cGVJZCwgX3pvZFR5cGVdKSA9PiB0eXBlSWQpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlciA9PT0gXCJ0eXBlc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZUlkcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnVtSWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5mbGF0TWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChmaWx0ZXIgPT09IFwiZW51bXNcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1JZHM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udHlwZUlkcywgLi4uZW51bUlkc107XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZUlkcyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBmb3JtOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgICAgICAgICBwYXJlbnRJZD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9jcmVhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZm9ybSB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgLi4uZm9ybSwgZW50aXR5SWQ6IGZvcm0uaWQgfSk7XG5cbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFNvbmFtdS5zeW5jZXIuZGVsRW50aXR5KGVudGl0eUlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdWYWx1ZXM6IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgICAgICAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW50aXR5QmFzZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgbmV3VmFsdWVzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS50aXRsZSA9IG5ld1ZhbHVlcy50aXRsZTtcbiAgICAgICAgICBlbnRpdHkudGFibGUgPSBuZXdWYWx1ZXMudGFibGU7XG4gICAgICAgICAgZW50aXR5LnBhcmVudElkID0gbmV3VmFsdWVzLnBhcmVudElkO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBzdWJzZXRLZXk6IHN0cmluZztcbiAgICAgICAgICBmaWVsZHM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlTdWJzZXRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHN1YnNldEtleSwgZmllbGRzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV0gPSBmaWVsZHM7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiB7IHVwZGF0ZWQ6IGZpZWxkcyB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHN1YnNldEtleTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxTdWJzZXRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHN1YnNldEtleSB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3UHJvcDogRW50aXR5UHJvcDtcbiAgICAgICAgICBhdD86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIG5ld1Byb3AgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LmNyZWF0ZVByb3AobmV3UHJvcCwgYXQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1Byb3A6IEVudGl0eVByb3A7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5UHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIG5ld1Byb3AgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkubW9kaWZ5UHJvcChuZXdQcm9wLCBhdCk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5kZWxQcm9wKGF0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICAgIHRvOiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vdmVQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCwgdG8gfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkubW92ZVByb3AoYXQsIHRvKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUluZGV4ZXNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGluZGV4ZXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmluZGV4ZXMgPSBpbmRleGVzO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBpbmRleGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUxhYmVsczogRW50aXR5W1wiZW51bUxhYmVsc1wiXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW51bUxhYmVsc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUxhYmVscyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuZW51bUxhYmVscyA9IGVudW1MYWJlbHM7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiB7IHVwZGF0ZWQ6IGVudW1MYWJlbHMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdFbnVtSWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlRW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBuZXdFbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgICAgICBpZiAoZW50aXR5LmVudW1MYWJlbHNbbmV3RW51bUlkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnbTrr7gg7KG07J6s7ZWY64qUIGVudW1JZOyeheuLiOuLpDogJHtuZXdFbnVtSWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNbbmV3RW51bUlkXSA9IHtcbiAgICAgICAgICAgIC4uLihuZXdFbnVtSWQuZW5kc1dpdGgoXCJTdGF0dXNcIilcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmU6IFwi64W47LacXCIsXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IFwi7Iio6rmAXCIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIFwiXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUlkOiB7XG4gICAgICAgICAgICBiZWZvcmU6IHN0cmluZztcbiAgICAgICAgICAgIGFmdGVyOiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBlbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgICAgIGNvbnN0IGlzRXhpc3RzID0gZW50aXR5SWRzLnNvbWUoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmluY2x1ZGVzKGVudW1JZC5hZnRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOydtOuvuCDsobTsnqztlZjripQgRW51bUlk7J6F64uI64ukOiAke2VudW1JZC5hZnRlcn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkLmFmdGVyXSA9IGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZC5iZWZvcmVdO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWQuYmVmb3JlXTtcblxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSBcImVudW1cIiAmJiBwcm9wLmlkID09PSBlbnVtSWQuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5pZCA9IGVudW1JZC5hZnRlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbGV0ZUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgICAgIGNvbnN0IGlzUmVmZXJlbmNlZCA9IGVudGl0eUlkc1xuICAgICAgICAgICAgLmZsYXRNYXAoKGVudGl0eUlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMpXG4gICAgICAgICAgICAuc29tZSgocHJvcCkgPT4gcHJvcC50eXBlID09PSBcImVudW1cIiAmJiBwcm9wLmlkID09PSBlbnVtSWQpO1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnVtSWR966W8IOywuOyhsO2VmOuKlCDtlITroZztjbzti7DqsIAg7KG07J6s7ZWp64uI64ukLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkXTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9nZXRUYWJsZUNvbHVtbnNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdHlJZCB9ID0gcmVxdWVzdC5xdWVyeTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZW50aXR5LmdldFRhYmxlQ29sdW1ucygpO1xuICAgICAgICByZXR1cm4geyBjb2x1bW5zIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvbWlncmF0aW9ucy9zdGF0dXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCBtaWdyYXRvci5nZXRTdGF0dXMoKTtcblxuICAgICAgICByZXR1cm4geyBzdGF0dXMgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBhY3Rpb246IFwiYXBwbHlcIiB8IFwicm9sbGJhY2tcIiB8IFwic2hhZG93XCI7XG4gICAgICAgICAgdGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL21pZ3JhdGlvbnMvcnVuQWN0aW9uXCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHQ+ID0+IHtcbiAgICAgICAgY29uc3QgeyBhY3Rpb24sIHRhcmdldHMgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICBpZiAoYWN0aW9uID09PSBcInNoYWRvd1wiKSB7XG4gICAgICAgICAgcmV0dXJuIG1pZ3JhdG9yLnJ1blNoYWRvd1Rlc3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBjb2RlTmFtZXM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL21pZ3JhdGlvbnMvZGVsQ29kZXNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2RlTmFtZXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1pZ3JhdG9yLmRlbENvZGVzKGNvZGVOYW1lcyk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL21pZ3JhdGlvbnMvZ2VuZXJhdGVQcmVwYXJlZENvZGVzXCIsIGFzeW5jIChfcmVxdWVzdHQpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IG1pZ3JhdG9yLmdlbmVyYXRlUHJlcGFyZWRDb2RlcygpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIHRlbXBsYXRlR3JvdXBOYW1lOiBcIkVudGl0eVwiIHwgXCJFbnVtc1wiO1xuICAgICAgICAgIGVudGl0eUlkczogc3RyaW5nW107XG4gICAgICAgICAgdGVtcGxhdGVLZXlzOiBzdHJpbmdbXTtcbiAgICAgICAgICBlbnVtSWRzOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9nZXRTdGF0dXNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyB0ZW1wbGF0ZUdyb3VwTmFtZSwgZW50aXR5SWRzLCB0ZW1wbGF0ZUtleXM6IF90ZW1wbGF0ZUtleXMsIGVudW1JZHMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKChlbnRpdHlJZHMgPz8gW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFwiZW50aXR5SWRzIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoKF90ZW1wbGF0ZUtleXMgPz8gW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFwidGVtcGxhdGVLZXlzIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAodGVtcGxhdGVHcm91cE5hbWUgPT09IFwiRW51bXNcIiAmJiAoZW51bUlkcyA/PyBbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXCJlbnVtSWRzIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzb3J0aW5nXG4gICAgICAgIGVudGl0eUlkcy5zb3J0KChhLCBiKSA9PiAoYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IDApKTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVLZXlzID0gVGVtcGxhdGVLZXkub3B0aW9ucy5maWx0ZXIoKHRrKSA9PiBfdGVtcGxhdGVLZXlzLmluY2x1ZGVzKHRrKSk7XG5cbiAgICAgICAgY29uc3QgY29tYmluYXRpb25zID0gZW50aXR5SWRzLmZsYXRNYXAoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgaWYgKHRlbXBsYXRlR3JvdXBOYW1lID09PSBcIkVudW1zXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IFtlbnRpdHlJZCwgLi4uRW50aXR5TWFuYWdlci5nZXRDaGlsZHJlbklkcyhlbnRpdHlJZCldO1xuICAgICAgICAgICAgY29uc3QgYWxsRW51bUlkcyA9IGVudGl0eUlkcy5mbGF0TWFwKChlbnRpdHlJZCkgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLmVudW1MYWJlbHMpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUtleXMuZmxhdE1hcCgodGVtcGxhdGVLZXkpID0+XG4gICAgICAgICAgICAgIGFsbEVudW1JZHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChlbnVtSWQpID0+IGVudW1JZHMuaW5jbHVkZXMoZW51bUlkKSlcbiAgICAgICAgICAgICAgICAubWFwKChlbnVtSWQpID0+IFtlbnRpdHlJZCwgdGVtcGxhdGVLZXksIGVudW1JZF0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlS2V5cy5tYXAoKHRlbXBsYXRlS2V5KSA9PiBbZW50aXR5SWQsIHRlbXBsYXRlS2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGNvbWJpbmF0aW9ucy5tYXAoYXN5bmMgKFtlbnRpdHlJZCwgdGVtcGxhdGVLZXksIGVudW1JZF0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3ViUGF0aCwgZnVsbFBhdGgsIGlzRXhpc3RzIH0gPSBhd2FpdCBTb25hbXUuc3luY2VyLmNoZWNrRXhpc3RzR2VuQ29kZShcbiAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgIHRlbXBsYXRlS2V5IGFzIFRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgIHRlbXBsYXRlR3JvdXBOYW1lLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZUtleSxcbiAgICAgICAgICAgICAgZW51bUlkLFxuICAgICAgICAgICAgICBzdWJQYXRoLFxuICAgICAgICAgICAgICBmdWxsUGF0aCxcbiAgICAgICAgICAgICAgaXNFeGlzdHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4geyBzdGF0dXNlcyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgICB0ZW1wbGF0ZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgICAgb3ZlcndyaXRlPzogYm9vbGVhbjtcbiAgICAgICAgICB9W107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc2NhZmZvbGRpbmcvZ2VuZXJhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25zIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFwib3B0aW9ucyBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgb3B0aW9ucy5tYXAoYXN5bmMgKHsgZW50aXR5SWQsIHRlbXBsYXRlS2V5LCBlbnVtSWQsIG92ZXJ3cml0ZSB9KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgU29uYW11LnN5bmNlci5nZW5lcmF0ZVRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlS2V5IGFzIFRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICAgICAgZW51bUlkLFxuICAgICAgICAgICAgICAgIH0gYXMge1xuICAgICAgICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJ3cml0ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAoaXNTb0V4Y2VwdGlvbihlKSAmJiBlLnN0YXR1c0NvZGUgPT09IDU0MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuZmlsdGVyKG5vbk51bGxhYmxlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFwi7J2066+4IOuqqOuToCDtjIzsnbzsnbQg7IOd7ISx65CcIOyDge2DnOyeheuLiOuLpC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBvcHRpb246IHtcbiAgICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgICB0ZW1wbGF0ZUtleTogc3RyaW5nO1xuICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc2NhZmZvbGRpbmcvcHJldmlld1wiLCBhc3luYyAocmVxdWVzdCk6IFByb21pc2U8eyBwYXRoQW5kQ29kZXM6IFBhdGhBbmRDb2RlW10gfT4gPT4ge1xuICAgICAgICBjb25zdCB7IG9wdGlvbiB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyB0ZW1wbGF0ZUtleSwgLi4udGVtcGxhdGVPcHRpb25zIH0gPSBvcHRpb247XG4gICAgICAgICAgY29uc3QgcGF0aEFuZENvZGVzID0gYXdhaXQgU29uYW11LnN5bmNlci5yZW5kZXJUZW1wbGF0ZShcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5IGFzIFRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4geyBwYXRoQW5kQ29kZXMgfTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9maXh0dXJlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc291cmNlREIsIHRhcmdldERCLCBzZWFyY2gsIGR1cGxpY2F0ZUNoZWNrIH0gPSByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICAgIHNvdXJjZURCOiBrZXlvZiBTb25hbXVEQkNvbmZpZztcbiAgICAgICAgICB0YXJnZXREQjoga2V5b2YgU29uYW11REJDb25maWc7XG4gICAgICAgICAgc2VhcmNoOiBGaXh0dXJlU2VhcmNoT3B0aW9ucztcbiAgICAgICAgICBkdXBsaWNhdGVDaGVjaz86IER1cGxpY2F0ZUNoZWNrT3B0aW9ucztcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gRml4dHVyZU1hbmFnZXIuZ2V0Rml4dHVyZXMoc291cmNlREIsIHRhcmdldERCLCBzZWFyY2gsIGR1cGxpY2F0ZUNoZWNrKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvZml4dHVyZS9pbXBvcnRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBkYiwgZml4dHVyZXMgfSA9IHJlcXVlc3QuYm9keSBhcyB7XG4gICAgICAgICAgZGI6IGtleW9mIFNvbmFtdURCQ29uZmlnO1xuICAgICAgICAgIGZpeHR1cmVzOiBGaXh0dXJlUmVjb3JkW107XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIEZpeHR1cmVNYW5hZ2VyLmluc2VydEZpeHR1cmVzKGRiLCBmaXh0dXJlcyk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL2ZpeHR1cmUvYWRkRml4dHVyZUxvYWRlclwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvZGUgfSA9IHJlcXVlc3QuYm9keSBhcyB7IGNvZGU6IHN0cmluZyB9O1xuXG4gICAgICAgIHJldHVybiBGaXh0dXJlTWFuYWdlci5hZGRGaXh0dXJlTG9hZGVyKGNvZGUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIHVpLXdlYiDruYzrk5wg7YyM7J28IOyEnOu5mVxuICAgICAgY29uc3QgdWlEaXN0UGF0aCA9IHBhdGgucmVzb2x2ZShpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uL3VpLXdlYlwiKTtcbiAgICAgIHNlcnZlci5yZWdpc3Rlcihhd2FpdCBpbXBvcnQoXCJAZmFzdGlmeS9zdGF0aWNcIiksIHtcbiAgICAgICAgcm9vdDogcGF0aC5qb2luKHVpRGlzdFBhdGgsIFwiYXNzZXRzXCIpLFxuICAgICAgICBwcmVmaXg6IFwiL2Fzc2V0c1wiLFxuICAgICAgICBkZWNvcmF0ZVJlcGx5OiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTUEEgZmFsbGJhY2sgLSAvc29uYW11LXVpLyog6rK966Gc64qUIOyghOu2gCBpbmRleC5odG1s66GcXG4gICAgICBzZXJ2ZXIuZ2V0KFwiKlwiLCBhc3luYyAoX3JlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIHJlcGx5LmhlYWRlcnMoeyBcIkNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0pLnNlbmQoXG4gICAgICAgICAgZnNcbiAgICAgICAgICAgIC5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi4vdWktd2ViL2luZGV4Lmh0bWxcIikpXG4gICAgICAgICAgICAudG9TdHJpbmcoKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJ7e3Byb2plY3ROYW1lfX1cIiwgU29uYW11LmNvbmZpZy5wcm9qZWN0TmFtZSA/PyBcIlVua25vd25Tb25hbXVQcm9qZWN0XCIpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB7IHByZWZpeDogXCIvc29uYW11LXVpXCIgfSxcbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJleGVjU3luYyIsImZzIiwiaW5mbGVjdGlvbiIsInBhdGgiLCJyYW5nZSIsIlNvbmFtdSIsIkVudGl0eU1hbmFnZXIiLCJCYWRSZXF1ZXN0RXhjZXB0aW9uIiwiaXNTb0V4Y2VwdGlvbiIsIlNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiIsIk1pZ3JhdG9yIiwiRml4dHVyZU1hbmFnZXIiLCJUZW1wbGF0ZUtleSIsIm5vbk51bGxhYmxlIiwic29uYW11VUlBcGlQbHVnaW4iLCJmYXN0aWZ5IiwicmVnaXN0ZXIiLCJzZXJ2ZXIiLCJtaWdyYXRvciIsIndhaXRGb3JITVJDb21wbGV0ZWQiLCJmbiIsIndhaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImhhbmRsZXIiLCJjbGVhclRpbWVvdXQiLCJzeW5jZXIiLCJldmVudEVtaXR0ZXIiLCJvZmYiLCJvbmNlIiwicmVzdWx0IiwiZ2V0IiwiY29uZmlnIiwicmVxdWVzdCIsImVudGl0eUlkIiwicHJlc2V0IiwiYWJzUGF0aCIsInF1ZXJ5IiwidGFyZ2V0UGF0aCIsImVudGl0eSIsIm5hbWVzIiwiYXBpUm9vdFBhdGgiLCJmaWxlbmFtZSIsInBhcmVudEZzIiwib3JpZ2luIiwiZ2xvc3NhcnkiLCJNYXAiLCJnZXRBbGxJZHMiLCJ0aXRsZSIsInNldCIsInVuZGVyc2NvcmUiLCJpZCIsInBsdXJhbGl6ZSIsInByb3BzIiwiZm9yRWFjaCIsInByb3AiLCJoYXMiLCJuYW1lIiwiZGVzYyIsInJlcGxhY2UiLCJzdWdnZXN0ZWQiLCJ3b3JkcyIsInNwbGl0IiwiY29tYmluYXRpb25zIiwibGVuZ3RoIiwiZmxhdE1hcCIsImxlbiIsImlkeCIsInciLCJzbGljZSIsImpvaW4iLCJSRVBMQUNFRF9QUkVGSVgiLCJyZW1haW5BcnIiLCJjb21iIiwicmVtYWluU3RyIiwiaW5jbHVkZXMiLCJtYXAiLCJyIiwic3RhcnRzV2l0aCIsInRvVXBwZXJDYXNlIiwiY29uc29sZSIsImxvZyIsImVudGl0eUlkcyIsImZsYXR0ZW5TdWJzZXRSb3dzIiwic3Vic2V0Um93cyIsInN1YnNldFJvdyIsImNoaWxkcmVuIiwic1JvdyIsImVudGl0aWVzIiwiYWxsIiwiZ2V0U3Vic2V0Um93cyIsInNvcnQiLCJhIiwiYiIsImFJZCIsInBhcmVudElkIiwiYklkIiwidW5kZWZpbmVkIiwiZmlsdGVyIiwicmVsb2FkIiwiYXV0b2xvYWRUeXBlcyIsInR5cGVJZHMiLCJPYmplY3QiLCJlbnRyaWVzIiwidHlwZXMiLCJfdHlwZUlkIiwiem9kVHlwZSIsImRlZiIsInR5cGUiLCJ0eXBlSWQiLCJfem9kVHlwZSIsImVudW1JZHMiLCJrZXlzIiwiZW51bUxhYmVscyIsInBvc3QiLCJmb3JtIiwiYm9keSIsImNyZWF0ZUVudGl0eSIsImRlbEVudGl0eSIsIm5ld1ZhbHVlcyIsInRhYmxlIiwic2F2ZSIsInN1YnNldEtleSIsImZpZWxkcyIsInN1YnNldHMiLCJ1cGRhdGVkIiwiYXQiLCJuZXdQcm9wIiwiY3JlYXRlUHJvcCIsIm1vZGlmeVByb3AiLCJkZWxQcm9wIiwidG8iLCJtb3ZlUHJvcCIsImluZGV4ZXMiLCJuZXdFbnVtSWQiLCJFcnJvciIsImVuZHNXaXRoIiwiYWN0aXZlIiwiaGlkZGVuIiwiZW51bUlkIiwiaXNFeGlzdHMiLCJzb21lIiwiYWZ0ZXIiLCJiZWZvcmUiLCJpc1JlZmVyZW5jZWQiLCJjb2x1bW5zIiwiZ2V0VGFibGVDb2x1bW5zIiwic3RhdHVzIiwiZ2V0U3RhdHVzIiwiYWN0aW9uIiwidGFyZ2V0cyIsInJ1blNoYWRvd1Rlc3QiLCJydW5BY3Rpb24iLCJjb2RlTmFtZXMiLCJkZWxDb2RlcyIsIl9yZXF1ZXN0dCIsImdlbmVyYXRlUHJlcGFyZWRDb2RlcyIsInRlbXBsYXRlR3JvdXBOYW1lIiwidGVtcGxhdGVLZXlzIiwiX3RlbXBsYXRlS2V5cyIsIm9wdGlvbnMiLCJ0ayIsImdldENoaWxkcmVuSWRzIiwiYWxsRW51bUlkcyIsInRlbXBsYXRlS2V5Iiwic3RhdHVzZXMiLCJzdWJQYXRoIiwiZnVsbFBhdGgiLCJjaGVja0V4aXN0c0dlbkNvZGUiLCJvdmVyd3JpdGUiLCJnZW5lcmF0ZVRlbXBsYXRlIiwiZSIsInN0YXR1c0NvZGUiLCJlcnJvciIsIm9wdGlvbiIsInRlbXBsYXRlT3B0aW9ucyIsInBhdGhBbmRDb2RlcyIsInJlbmRlclRlbXBsYXRlIiwic291cmNlREIiLCJ0YXJnZXREQiIsInNlYXJjaCIsImR1cGxpY2F0ZUNoZWNrIiwiZ2V0Rml4dHVyZXMiLCJkYiIsImZpeHR1cmVzIiwiaW5zZXJ0Rml4dHVyZXMiLCJjb2RlIiwiYWRkRml4dHVyZUxvYWRlciIsInVpRGlzdFBhdGgiLCJkaXJuYW1lIiwicm9vdCIsInByZWZpeCIsImRlY29yYXRlUmVwbHkiLCJfcmVxdWVzdCIsInJlcGx5IiwiaGVhZGVycyIsInNlbmQiLCJyZWFkRmlsZVN5bmMiLCJ0b1N0cmluZyIsInByb2plY3ROYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLFFBQVEsZ0JBQWdCO0FBRXpDLE9BQU9DLFFBQVEsS0FBSztBQUNwQixPQUFPQyxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUd2QyxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQ0VDLG1CQUFtQixFQUNuQkMsYUFBYSxFQUNiQywyQkFBMkIsUUFDdEIsaUNBQThCO0FBQ3JDLFNBQStCQyxRQUFRLFFBQVEsMkJBQXdCO0FBQ3ZFLFNBQXFDQyxjQUFjLFFBQVEsZ0NBQTZCO0FBQ3hGLFNBUUVDLFdBQVcsUUFDTixvQkFBaUI7QUFDeEIsU0FBU0MsV0FBVyxRQUFRLG9CQUFpQjtBQUU3QyxPQUFPLGVBQWVDLGtCQUFrQkMsT0FBd0I7SUFDOURBLFFBQVFDLFFBQVEsQ0FDZCxPQUFPQztRQUNMLFdBQVc7UUFDWCxNQUFNQyxXQUFXLElBQUlSO1FBRXJCLHNCQUFzQjtRQUN0QixlQUFlUyxvQkFBdUJDLEVBQW9CO1lBQ3hELE1BQU1DLGNBQWMsSUFBSUMsUUFBYyxDQUFDQztnQkFDckMsTUFBTUMsVUFBVUMsV0FBVztvQkFDekJGO2dCQUNGLEdBQUc7Z0JBRUgsTUFBTUcsVUFBVTtvQkFDZEMsYUFBYUg7b0JBQ2JuQixPQUFPdUIsTUFBTSxDQUFDQyxZQUFZLENBQUNDLEdBQUcsQ0FBQyxrQkFBa0JKO29CQUNqREg7Z0JBQ0Y7Z0JBRUFsQixPQUFPdUIsTUFBTSxDQUFDQyxZQUFZLENBQUNFLElBQUksQ0FBQyxrQkFBa0JMO1lBQ3BEO1lBRUEsTUFBTU0sU0FBUyxNQUFNWjtZQUNyQixNQUFNQztZQUNOLE9BQU9XO1FBQ1Q7UUFFQWYsT0FBT2dCLEdBQUcsQ0FBQyxzQkFBc0I7WUFDL0IsT0FBTzVCLE9BQU82QixNQUFNO1FBQ3RCO1FBRUFqQixPQUFPZ0IsR0FBRyxDQU1QLHlCQUF5QixPQUFPRTtZQUNqQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR0gsUUFBUUksS0FBSztZQUVuRCxNQUFNQyxhQUFhLEFBQUMsQ0FBQTtnQkFDbEIsSUFBSUosWUFBWUMsUUFBUTtvQkFDdEIsTUFBTUksU0FBU25DLGNBQWMyQixHQUFHLENBQUNHO29CQUNqQyxNQUFNLEVBQUVNLEtBQUssRUFBRSxHQUFHRDtvQkFFbEIsTUFBTSxFQUFFRSxXQUFXLEVBQUUsR0FBR3RDO29CQUN4QixNQUFNdUMsV0FBVyxBQUFDLENBQUE7d0JBQ2hCLE9BQVFQOzRCQUNOLEtBQUs7Z0NBQ0gsT0FBTyxHQUFHSyxNQUFNekMsRUFBRSxDQUFDLFNBQVMsQ0FBQzs0QkFDL0IsS0FBSztnQ0FDSCxPQUFPLEdBQUd5QyxNQUFNekMsRUFBRSxDQUFDLFlBQVksQ0FBQzs0QkFDbEMsS0FBSztnQ0FDSCxPQUFPLEdBQUd5QyxNQUFNekMsRUFBRSxDQUFDLGFBQWEsQ0FBQzt3QkFDckM7b0JBQ0YsQ0FBQTtvQkFDQSxPQUFPLEdBQUcwQyxZQUFZLGlCQUFpQixFQUFFRixPQUFPQyxLQUFLLENBQUNHLFFBQVEsQ0FBQyxDQUFDLEVBQUVELFVBQVU7Z0JBQzlFLE9BQU87b0JBQ0wsSUFBSSxDQUFDTixTQUFTO3dCQUNaLE1BQU0sSUFBSS9CLG9CQUFvQjtvQkFDaEM7b0JBQ0EsT0FBTytCO2dCQUNUO1lBQ0YsQ0FBQTtZQUNBdEMsU0FBUyxDQUFDLEtBQUssRUFBRXdDLFlBQVk7UUFDL0I7UUFFQXZCLE9BQU9nQixHQUFHLENBS1AsNEJBQTRCLE9BQU9FO1lBQ3BDLE1BQU0sRUFBRVcsTUFBTSxFQUFFVixRQUFRLEVBQUUsR0FBR0QsUUFBUUksS0FBSztZQUUxQyxTQUFTO1lBQ1QsTUFBTVEsV0FBVyxJQUFJQyxJQUFvQjtnQkFDdkM7b0JBQUM7b0JBQVU7aUJBQUs7Z0JBQ2hCO29CQUFDO29CQUFRO2lCQUFLO2dCQUNkO29CQUFDO29CQUFTO2lCQUFNO2dCQUNoQjtvQkFBQztvQkFBVTtpQkFBUztnQkFDcEI7b0JBQUM7b0JBQU87aUJBQU07Z0JBQ2Q7b0JBQUM7b0JBQU07aUJBQUs7Z0JBQ1o7b0JBQUM7b0JBQVEsQ0FBQyxXQUFXLENBQUM7aUJBQUM7Z0JBQ3ZCO29CQUFDO29CQUFTO2lCQUFjO2dCQUN4QjtvQkFBQztvQkFBVTtpQkFBZTtnQkFDMUI7b0JBQUM7b0JBQVE7aUJBQUs7Z0JBQ2Q7b0JBQUM7b0JBQU07aUJBQUs7Z0JBQ1o7b0JBQUM7b0JBQVc7aUJBQUs7Z0JBQ2pCO29CQUFDO29CQUFXO2lCQUFLO2dCQUNqQjtvQkFBQztvQkFBVztpQkFBSztnQkFDakI7b0JBQUM7b0JBQU07aUJBQUs7Z0JBQ1o7b0JBQUM7b0JBQVE7aUJBQUs7Z0JBQ2Q7b0JBQUM7b0JBQVE7aUJBQUs7Z0JBQ2Q7b0JBQUM7b0JBQU07aUJBQU87Z0JBQ2Q7b0JBQUM7b0JBQU07aUJBQU87Z0JBQ2Q7b0JBQUM7b0JBQU87aUJBQU07Z0JBQ2Q7b0JBQUM7b0JBQU87aUJBQVE7Z0JBQ2hCO29CQUFDO29CQUFTO2lCQUFLO2dCQUNmO29CQUFDO29CQUFRO2lCQUFLO2dCQUNkO29CQUFDO29CQUFLO2lCQUFNO2dCQUNaO29CQUFDO29CQUFLO2lCQUFNO2dCQUNaO29CQUFDO29CQUFXO2lCQUFLO2dCQUNqQjtvQkFBQztvQkFBUztpQkFBSztnQkFDZjtvQkFBQztvQkFBUztpQkFBSTtnQkFDZDtvQkFBQztvQkFBUztpQkFBTTtnQkFDaEI7b0JBQUM7b0JBQVM7aUJBQUs7Z0JBQ2Y7b0JBQUM7b0JBQVE7aUJBQU07Z0JBQ2Y7b0JBQUM7b0JBQU87aUJBQUs7Z0JBQ2I7b0JBQUM7b0JBQVM7aUJBQUs7Z0JBQ2Y7b0JBQUM7b0JBQVU7aUJBQU07Z0JBQ2pCO29CQUFDO29CQUFRO2lCQUFLO2dCQUNkO29CQUFDO29CQUFPO2lCQUFPO2dCQUNmO29CQUFDO29CQUFNO2lCQUFLO2dCQUNaO29CQUFDO29CQUFRO2lCQUFLO2dCQUNkO29CQUFDO29CQUFXO2lCQUFLO2dCQUNqQjtvQkFBQztvQkFBVztpQkFBTztnQkFDbkI7b0JBQUM7b0JBQVk7aUJBQU87Z0JBQ3BCO29CQUFDO29CQUFRO2lCQUFNO2dCQUNmO29CQUFDO29CQUFPO2lCQUFJO2dCQUNaO29CQUFDO29CQUFPO2lCQUFLO2dCQUNiO29CQUFDO29CQUFZO2lCQUFLO2dCQUNsQjtvQkFBQztvQkFBVTtpQkFBSzthQUNqQjtZQUNELDBDQUEwQztZQUMxQyxLQUFLLE1BQU1aLFlBQVk5QixjQUFjMkMsU0FBUyxHQUFJO2dCQUNoRCxNQUFNUixTQUFTbkMsY0FBYzJCLEdBQUcsQ0FBQ0c7Z0JBQ2pDLElBQUksQUFBQ0ssQ0FBQUEsT0FBT1MsS0FBSyxJQUFJLEVBQUMsTUFBTyxJQUFJO29CQUMvQkgsU0FBU0ksR0FBRyxDQUFDakQsV0FBV2tELFVBQVUsQ0FBQ1gsT0FBT1ksRUFBRSxHQUFHWixPQUFPUyxLQUFLO29CQUMzREgsU0FBU0ksR0FBRyxDQUNWakQsV0FBV2tELFVBQVUsQ0FBQ2xELFdBQVdvRCxTQUFTLENBQUNiLE9BQU9ZLEVBQUUsSUFDcEQsR0FBR1osT0FBT1MsS0FBSyxDQUFDLEdBQUcsQ0FBQztnQkFFeEI7Z0JBRUFULE9BQU9jLEtBQUssQ0FBQ0MsT0FBTyxDQUFDLENBQUNDO29CQUNwQixJQUFJVixTQUFTVyxHQUFHLENBQUNELEtBQUtFLElBQUksR0FBRzt3QkFDM0I7b0JBQ0Y7b0JBQ0EsSUFBSUYsS0FBS0csSUFBSSxFQUFFO3dCQUNiYixTQUFTSSxHQUFHLENBQUNNLEtBQUtFLElBQUksRUFBRUYsS0FBS0csSUFBSSxDQUFDQyxPQUFPLENBQUNwQixPQUFPUyxLQUFLLElBQUksSUFBSTtvQkFDaEU7Z0JBQ0Y7WUFDRjtZQUVBLE1BQU1ZLFlBQVksQUFBQyxDQUFBO2dCQUNqQixtQkFBbUI7Z0JBQ25CLE1BQU1DLFFBQVFqQixPQUFPa0IsS0FBSyxDQUFDO2dCQUMzQixNQUFNQyxlQUFlO3VCQUFJN0QsTUFBTTJELE1BQU1HLE1BQU0sRUFBRSxHQUFHLENBQUM7aUJBQUcsQ0FBQ0MsT0FBTyxDQUFDLENBQUNDO29CQUM1RCxPQUFPOzJCQUNGaEUsTUFBTSxHQUFHMkQsTUFBTUcsTUFBTSxHQUFHRSxNQUFNLEdBQUcsQ0FBQ0M7NEJBQ25DLE9BQU87Z0NBQ0xEO2dDQUNBRSxHQUFHUCxNQUFNUSxLQUFLLENBQUNGLEtBQUtBLE1BQU1ELEtBQUtJLElBQUksQ0FBQzs0QkFDdEM7d0JBQ0Y7cUJBQ0Q7Z0JBQ0g7Z0JBRUEsNkNBQTZDO2dCQUM3QyxNQUFNQyxrQkFBa0IsZUFBZSxzQ0FBc0M7Z0JBQzdFLElBQUlDLFlBQXNCO3VCQUFJWDtpQkFBTTtnQkFDcEMsS0FBSyxNQUFNWSxRQUFRVixhQUFjO29CQUMvQixNQUFNVyxZQUFZRixVQUFVRixJQUFJLENBQUM7b0JBQ2pDLElBQUlJLFVBQVVDLFFBQVEsQ0FBQ0YsS0FBS0wsQ0FBQyxLQUFLdkIsU0FBU1csR0FBRyxDQUFDaUIsS0FBS0wsQ0FBQyxHQUFHO3dCQUN0REksWUFBWUUsVUFDVGYsT0FBTyxDQUFDYyxLQUFLTCxDQUFDLEVBQUVHLGtCQUFrQjFCLFNBQVNkLEdBQUcsQ0FBQzBDLEtBQUtMLENBQUMsR0FDckROLEtBQUssQ0FBQztvQkFDWDtnQkFDRjtnQkFFQSxPQUFPVSxVQUNKSSxHQUFHLENBQUMsQ0FBQ0M7b0JBQ0osSUFBSUEsRUFBRUMsVUFBVSxDQUFDUCxrQkFBa0I7d0JBQ2pDLE9BQU9NLEVBQUVsQixPQUFPLENBQUNZLGlCQUFpQjtvQkFDcEMsT0FBTzt3QkFDTCxPQUFPTSxFQUFFRSxXQUFXO29CQUN0QjtnQkFDRixHQUNDVCxJQUFJLENBQUMsSUFDTFgsT0FBTyxDQUFDLGVBQWV6QixXQUFXOUIsY0FBYzJCLEdBQUcsQ0FBQ0csVUFBVWMsS0FBSyxHQUFHO1lBQzNFLENBQUE7WUFFQWdDLFFBQVFDLEdBQUcsQ0FBQztnQkFBRS9DO2dCQUFVVTtnQkFBUWdCO1lBQVU7WUFDMUMsT0FBTztnQkFBRUE7WUFBVTtRQUNyQjtRQUVBN0MsT0FBT2dCLEdBQUcsQ0FBQyx3QkFBd0I7WUFDakMsTUFBTW1ELFlBQVk5RSxjQUFjMkMsU0FBUztZQUV6QyxTQUFTb0Msa0JBQWtCQyxVQUE2QjtnQkFDdEQsT0FBT0EsV0FBV25CLE9BQU8sQ0FBQyxDQUFDb0I7b0JBQ3pCLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLE1BQU0sR0FBR0Y7b0JBQzlCLE9BQU87d0JBQUNFOzJCQUFTSixrQkFBa0JHO3FCQUFVO2dCQUMvQztZQUNGO1lBRUEsTUFBTUUsV0FBVyxNQUFNcEUsUUFBUXFFLEdBQUcsQ0FDaENQLFVBQVVOLEdBQUcsQ0FBQyxDQUFDMUM7Z0JBQ2IsTUFBTUssU0FBU25DLGNBQWMyQixHQUFHLENBQUNHO2dCQUNqQyxNQUFNa0QsYUFBYTdDLE9BQU9tRCxhQUFhO2dCQUV2QyxPQUFPO29CQUNMLEdBQUduRCxNQUFNO29CQUNUNEMsbUJBQW1CQSxrQkFBa0JDO2dCQUN2QztZQUNGO1lBR0ZJLFNBQVNHLElBQUksQ0FBQyxDQUFDQyxHQUFHQztnQkFDaEIsTUFBTUMsTUFBTUYsRUFBRUcsUUFBUSxJQUFJSCxFQUFFekMsRUFBRTtnQkFDOUIsTUFBTTZDLE1BQU1ILEVBQUVFLFFBQVEsSUFBSUYsRUFBRTFDLEVBQUU7Z0JBQzlCLElBQUkyQyxNQUFNRSxLQUFLLE9BQU8sQ0FBQztnQkFDdkIsSUFBSUYsTUFBTUUsS0FBSyxPQUFPO2dCQUN0QixJQUFJRixRQUFRRSxLQUFLO29CQUNmLElBQUlKLEVBQUVHLFFBQVEsS0FBS0UsV0FBVyxPQUFPLENBQUM7b0JBQ3RDLElBQUlKLEVBQUVFLFFBQVEsS0FBS0UsV0FBVyxPQUFPO29CQUNyQyxPQUFPO2dCQUNUO2dCQUNBLE9BQU87WUFDVDtZQUNBLE9BQU87Z0JBQUVUO1lBQVM7UUFDcEI7UUFFQXpFLE9BQU9nQixHQUFHLENBS1AsdUJBQXVCLE9BQU9FO1lBQy9CLE1BQU0sRUFBRWlFLE1BQU0sRUFBRUMsTUFBTSxFQUFFLEdBQUdsRSxRQUFRSSxLQUFLO1lBRXhDLElBQUk4RCxXQUFXLEtBQUs7Z0JBQ2xCLE1BQU1oRyxPQUFPdUIsTUFBTSxDQUFDMEUsYUFBYTtZQUNuQztZQUVBLE1BQU1DLFVBQVUsQUFBQyxDQUFBO2dCQUNmLE1BQU1BLFVBQVVDLE9BQU9DLE9BQU8sQ0FBQ3BHLE9BQU91QixNQUFNLENBQUM4RSxLQUFLLEVBQy9DTixNQUFNLENBQUMsQ0FBQyxDQUFDTyxTQUFTQyxRQUFRLEdBQUssQUFBQ0EsUUFBUUMsR0FBRyxDQUFDQyxJQUFJLEtBQWdCLFFBQ2hFaEMsR0FBRyxDQUFDLENBQUMsQ0FBQ2lDLFFBQVFDLFNBQVMsR0FBS0Q7Z0JBRS9CLElBQUlYLFdBQVcsU0FBUztvQkFDdEIsT0FBT0c7Z0JBQ1Q7Z0JBRUEsTUFBTVUsVUFBVTNHLGNBQWMyQyxTQUFTLEdBQUdrQixPQUFPLENBQUMsQ0FBQy9CO29CQUNqRCxNQUFNSyxTQUFTbkMsY0FBYzJCLEdBQUcsQ0FBQ0c7b0JBQ2pDLE9BQU9vRSxPQUFPVSxJQUFJLENBQUN6RSxPQUFPMEUsVUFBVTtnQkFDdEM7Z0JBRUEsSUFBSWYsV0FBVyxTQUFTO29CQUN0QixPQUFPYTtnQkFDVCxPQUFPO29CQUNMLE9BQU87MkJBQUlWOzJCQUFZVTtxQkFBUTtnQkFDakM7WUFDRixDQUFBO1lBRUEsT0FBTztnQkFDTFY7WUFDRjtRQUNGO1FBRUF0RixPQUFPbUcsSUFBSSxDQVNSLHNCQUFzQixPQUFPakY7WUFDOUIsT0FBTyxNQUFNaEIsb0JBQW9CO2dCQUMvQixNQUFNLEVBQUVrRyxJQUFJLEVBQUUsR0FBR2xGLFFBQVFtRixJQUFJO2dCQUM3QixNQUFNakgsT0FBT3VCLE1BQU0sQ0FBQzJGLFlBQVksQ0FBQztvQkFBRSxHQUFHRixJQUFJO29CQUFFakYsVUFBVWlGLEtBQUtoRSxFQUFFO2dCQUFDO2dCQUU5RCxPQUFPO1lBQ1Q7UUFDRjtRQUVBcEMsT0FBT21HLElBQUksQ0FJUixtQkFBbUIsT0FBT2pGO1lBQzNCLE9BQU8sTUFBTWhCLG9CQUFvQjtnQkFDL0IsTUFBTSxFQUFFaUIsUUFBUSxFQUFFLEdBQUdELFFBQVFtRixJQUFJO2dCQUNqQyxPQUFPLE1BQU1qSCxPQUFPdUIsTUFBTSxDQUFDNEYsU0FBUyxDQUFDcEY7WUFDdkM7UUFDRjtRQUVBbkIsT0FBT21HLElBQUksQ0FTUixnQ0FBZ0MsT0FBT2pGO1lBQ3hDLE9BQU8sTUFBTWhCLG9CQUFvQjtnQkFDL0IsTUFBTSxFQUFFaUIsUUFBUSxFQUFFcUYsU0FBUyxFQUFFLEdBQUd0RixRQUFRbUYsSUFBSTtnQkFDNUMsTUFBTTdFLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFDakNLLE9BQU9TLEtBQUssR0FBR3VFLFVBQVV2RSxLQUFLO2dCQUM5QlQsT0FBT2lGLEtBQUssR0FBR0QsVUFBVUMsS0FBSztnQkFDOUJqRixPQUFPd0QsUUFBUSxHQUFHd0IsVUFBVXhCLFFBQVE7Z0JBQ3BDLE1BQU14RCxPQUFPa0YsSUFBSTtnQkFFakIsT0FBTztZQUNUO1FBQ0Y7UUFFQTFHLE9BQU9tRyxJQUFJLENBTVIsNEJBQTRCLE9BQU9qRjtZQUNwQyxPQUFPLE1BQU1oQixvQkFBb0I7Z0JBQy9CLE1BQU0sRUFBRWlCLFFBQVEsRUFBRXdGLFNBQVMsRUFBRUMsTUFBTSxFQUFFLEdBQUcxRixRQUFRbUYsSUFBSTtnQkFDcEQsTUFBTTdFLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFDakNLLE9BQU9xRixPQUFPLENBQUNGLFVBQVUsR0FBR0M7Z0JBQzVCLE1BQU1wRixPQUFPa0YsSUFBSTtnQkFFakIsT0FBTztvQkFBRUksU0FBU0Y7Z0JBQU87WUFDM0I7UUFDRjtRQUVBNUcsT0FBT21HLElBQUksQ0FLUix5QkFBeUIsT0FBT2pGO1lBQ2pDLE9BQU8sTUFBTWhCLG9CQUFvQjtnQkFDL0IsTUFBTSxFQUFFaUIsUUFBUSxFQUFFd0YsU0FBUyxFQUFFLEdBQUd6RixRQUFRbUYsSUFBSTtnQkFDNUMsTUFBTTdFLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFDakMsT0FBT0ssT0FBT3FGLE9BQU8sQ0FBQ0YsVUFBVTtnQkFDaEMsTUFBTW5GLE9BQU9rRixJQUFJO2dCQUVqQixPQUFPO1lBQ1Q7UUFDRjtRQUVBMUcsT0FBT21HLElBQUksQ0FNUiwwQkFBMEIsT0FBT2pGO1lBQ2xDLE9BQU8sTUFBTWhCLG9CQUFvQjtnQkFDL0IsTUFBTSxFQUFFaUIsUUFBUSxFQUFFNEYsRUFBRSxFQUFFQyxPQUFPLEVBQUUsR0FBRzlGLFFBQVFtRixJQUFJO2dCQUM5QyxNQUFNN0UsU0FBU25DLGNBQWMyQixHQUFHLENBQUNHO2dCQUNqQyxNQUFNSyxPQUFPeUYsVUFBVSxDQUFDRCxTQUFTRDtnQkFDakMsT0FBTztZQUNUO1FBQ0Y7UUFFQS9HLE9BQU9tRyxJQUFJLENBTVIsMEJBQTBCLE9BQU9qRjtZQUNsQyxPQUFPLE1BQU1oQixvQkFBb0I7Z0JBQy9CLE1BQU0sRUFBRWlCLFFBQVEsRUFBRTRGLEVBQUUsRUFBRUMsT0FBTyxFQUFFLEdBQUc5RixRQUFRbUYsSUFBSTtnQkFFOUMsTUFBTTdFLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFDakNLLE9BQU8wRixVQUFVLENBQUNGLFNBQVNEO2dCQUUzQixPQUFPO1lBQ1Q7UUFDRjtRQUVBL0csT0FBT21HLElBQUksQ0FLUix1QkFBdUIsT0FBT2pGO1lBQy9CLE9BQU8sTUFBTWhCLG9CQUFvQjtnQkFDL0IsTUFBTSxFQUFFaUIsUUFBUSxFQUFFNEYsRUFBRSxFQUFFLEdBQUc3RixRQUFRbUYsSUFBSTtnQkFFckMsTUFBTTdFLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFDakNLLE9BQU8yRixPQUFPLENBQUNKO2dCQUNmLE9BQU87WUFDVDtRQUNGO1FBRUEvRyxPQUFPbUcsSUFBSSxDQU1SLHdCQUF3QixPQUFPakY7WUFDaEMsT0FBTyxNQUFNaEIsb0JBQW9CO2dCQUMvQixNQUFNLEVBQUVpQixRQUFRLEVBQUU0RixFQUFFLEVBQUVLLEVBQUUsRUFBRSxHQUFHbEcsUUFBUW1GLElBQUk7Z0JBRXpDLE1BQU03RSxTQUFTbkMsY0FBYzJCLEdBQUcsQ0FBQ0c7Z0JBQ2pDSyxPQUFPNkYsUUFBUSxDQUFDTixJQUFJSztnQkFFcEIsT0FBTztZQUNUO1FBQ0Y7UUFFQXBILE9BQU9tRyxJQUFJLENBS1IsNkJBQTZCLE9BQU9qRjtZQUNyQyxPQUFPLE1BQU1oQixvQkFBb0I7Z0JBQy9CLE1BQU0sRUFBRWlCLFFBQVEsRUFBRW1HLE9BQU8sRUFBRSxHQUFHcEcsUUFBUW1GLElBQUk7Z0JBQzFDLE1BQU03RSxTQUFTbkMsY0FBYzJCLEdBQUcsQ0FBQ0c7Z0JBQ2pDSyxPQUFPOEYsT0FBTyxHQUFHQTtnQkFDakIsTUFBTTlGLE9BQU9rRixJQUFJO2dCQUVqQixPQUFPO29CQUFFSSxTQUFTUTtnQkFBUTtZQUM1QjtRQUNGO1FBRUF0SCxPQUFPbUcsSUFBSSxDQUtSLGdDQUFnQyxPQUFPakY7WUFDeEMsT0FBTyxNQUFNaEIsb0JBQW9CO2dCQUMvQixNQUFNLEVBQUVpQixRQUFRLEVBQUUrRSxVQUFVLEVBQUUsR0FBR2hGLFFBQVFtRixJQUFJO2dCQUM3QyxNQUFNN0UsU0FBU25DLGNBQWMyQixHQUFHLENBQUNHO2dCQUNqQ0ssT0FBTzBFLFVBQVUsR0FBR0E7Z0JBQ3BCLE1BQU0xRSxPQUFPa0YsSUFBSTtnQkFFakIsT0FBTztvQkFBRUksU0FBU1o7Z0JBQVc7WUFDL0I7UUFDRjtRQUVBbEcsT0FBT21HLElBQUksQ0FLUiw0QkFBNEIsT0FBT2pGO1lBQ3BDLE9BQU8sTUFBTWhCLG9CQUFvQjtnQkFDL0IsTUFBTSxFQUFFaUIsUUFBUSxFQUFFb0csU0FBUyxFQUFFLEdBQUdyRyxRQUFRbUYsSUFBSTtnQkFDNUMsTUFBTTdFLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFFakMsSUFBSUssT0FBTzBFLFVBQVUsQ0FBQ3FCLFVBQVUsRUFBRTtvQkFDaEMsTUFBTSxJQUFJQyxNQUFNLENBQUMsbUJBQW1CLEVBQUVELFdBQVc7Z0JBQ25EO2dCQUVBL0YsT0FBTzBFLFVBQVUsQ0FBQ3FCLFVBQVUsR0FBRztvQkFDN0IsR0FBSUEsVUFBVUUsUUFBUSxDQUFDLFlBQ25CO3dCQUNFQyxRQUFRO3dCQUNSQyxRQUFRO29CQUNWLElBQ0E7d0JBQ0UsSUFBSTtvQkFDTixDQUFDO2dCQUNQO2dCQUNBLE1BQU1uRyxPQUFPa0YsSUFBSTtnQkFFakIsT0FBTztZQUNUO1FBQ0Y7UUFFQTFHLE9BQU9tRyxJQUFJLENBUVIsNEJBQTRCLE9BQU9qRjtZQUNwQyxPQUFPLE1BQU1oQixvQkFBb0I7Z0JBQy9CLE1BQU0sRUFBRWlCLFFBQVEsRUFBRXlHLE1BQU0sRUFBRSxHQUFHMUcsUUFBUW1GLElBQUk7Z0JBQ3pDLE1BQU1sQyxZQUFZOUUsY0FBYzJDLFNBQVM7Z0JBQ3pDLE1BQU02RixXQUFXMUQsVUFBVTJELElBQUksQ0FBQyxDQUFDM0c7b0JBQy9CLE1BQU1LLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztvQkFDakMsT0FBT29FLE9BQU9VLElBQUksQ0FBQ3pFLE9BQU8wRSxVQUFVLEVBQUV0QyxRQUFRLENBQUNnRSxPQUFPRyxLQUFLO2dCQUM3RDtnQkFDQSxJQUFJRixVQUFVO29CQUNaLE1BQU0sSUFBSUwsTUFBTSxDQUFDLG1CQUFtQixFQUFFSSxPQUFPRyxLQUFLLEVBQUU7Z0JBQ3REO2dCQUVBLE1BQU12RyxTQUFTbkMsY0FBYzJCLEdBQUcsQ0FBQ0c7Z0JBQ2pDSyxPQUFPMEUsVUFBVSxDQUFDMEIsT0FBT0csS0FBSyxDQUFDLEdBQUd2RyxPQUFPMEUsVUFBVSxDQUFDMEIsT0FBT0ksTUFBTSxDQUFDO2dCQUNsRSxPQUFPeEcsT0FBTzBFLFVBQVUsQ0FBQzBCLE9BQU9JLE1BQU0sQ0FBQztnQkFFdkMsTUFBTXhHLE9BQU9rRixJQUFJO2dCQUVqQixLQUFLLE1BQU12RixZQUFZZ0QsVUFBVztvQkFDaEMsTUFBTTNDLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztvQkFDakMsS0FBSyxNQUFNcUIsUUFBUWhCLE9BQU9jLEtBQUssQ0FBRTt3QkFDL0IsSUFBSUUsS0FBS3FELElBQUksS0FBSyxVQUFVckQsS0FBS0osRUFBRSxLQUFLd0YsT0FBT0ksTUFBTSxFQUFFOzRCQUNyRHhGLEtBQUtKLEVBQUUsR0FBR3dGLE9BQU9HLEtBQUs7d0JBQ3hCO29CQUNGO29CQUNBLE1BQU12RyxPQUFPa0YsSUFBSTtnQkFDbkI7WUFDRjtRQUNGO1FBRUExRyxPQUFPbUcsSUFBSSxDQUtSLDRCQUE0QixPQUFPakY7WUFDcEMsT0FBTyxNQUFNaEIsb0JBQW9CO2dCQUMvQixNQUFNLEVBQUVpQixRQUFRLEVBQUV5RyxNQUFNLEVBQUUsR0FBRzFHLFFBQVFtRixJQUFJO2dCQUV6QyxNQUFNbEMsWUFBWTlFLGNBQWMyQyxTQUFTO2dCQUN6QyxNQUFNaUcsZUFBZTlELFVBQ2xCakIsT0FBTyxDQUFDLENBQUMvQixXQUFhOUIsY0FBYzJCLEdBQUcsQ0FBQ0csVUFBVW1CLEtBQUssRUFDdkR3RixJQUFJLENBQUMsQ0FBQ3RGLE9BQVNBLEtBQUtxRCxJQUFJLEtBQUssVUFBVXJELEtBQUtKLEVBQUUsS0FBS3dGO2dCQUN0RCxJQUFJSyxjQUFjO29CQUNoQixNQUFNLElBQUlULE1BQU0sR0FBR0ksT0FBTyxtQkFBbUIsQ0FBQztnQkFDaEQ7Z0JBRUEsTUFBTXBHLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztnQkFDakMsT0FBT0ssT0FBTzBFLFVBQVUsQ0FBQzBCLE9BQU87Z0JBQ2hDLE1BQU1wRyxPQUFPa0YsSUFBSTtZQUNuQjtRQUNGO1FBRUExRyxPQUFPZ0IsR0FBRyxDQUlQLCtCQUErQixPQUFPRTtZQUN2QyxNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHRCxRQUFRSSxLQUFLO1lBQ2xDLE1BQU1FLFNBQVNuQyxjQUFjMkIsR0FBRyxDQUFDRztZQUNqQyxNQUFNK0csVUFBVTFHLE9BQU8yRyxlQUFlO1lBQ3RDLE9BQU87Z0JBQUVEO1lBQVE7UUFDbkI7UUFFQWxJLE9BQU9nQixHQUFHLENBQUMsMEJBQTBCO1lBQ25DLE1BQU1vSCxTQUFTLE1BQU1uSSxTQUFTb0ksU0FBUztZQUV2QyxPQUFPO2dCQUFFRDtZQUFPO1FBQ2xCO1FBRUFwSSxPQUFPbUcsSUFBSSxDQUtSLDZCQUE2QixPQUFPakY7WUFDckMsTUFBTSxFQUFFb0gsTUFBTSxFQUFFQyxPQUFPLEVBQUUsR0FBR3JILFFBQVFtRixJQUFJO1lBRXhDLElBQUlpQyxXQUFXLFVBQVU7Z0JBQ3ZCLE9BQU9ySSxTQUFTdUksYUFBYTtZQUMvQixPQUFPO2dCQUNMLE9BQU92SSxTQUFTd0ksU0FBUyxDQUFDSCxRQUFRQztZQUNwQztRQUNGO1FBRUF2SSxPQUFPbUcsSUFBSSxDQUlSLDRCQUE0QixPQUFPakY7WUFDcEMsTUFBTSxFQUFFd0gsU0FBUyxFQUFFLEdBQUd4SCxRQUFRbUYsSUFBSTtZQUNsQyxPQUFPLE1BQU1wRyxTQUFTMEksUUFBUSxDQUFDRDtRQUNqQztRQUVBMUksT0FBT21HLElBQUksQ0FBQyx5Q0FBeUMsT0FBT3lDO1lBQzFELE9BQU8sTUFBTTNJLFNBQVM0SSxxQkFBcUI7UUFDN0M7UUFFQTdJLE9BQU9tRyxJQUFJLENBT1IsOEJBQThCLE9BQU9qRjtZQUN0QyxNQUFNLEVBQUU0SCxpQkFBaUIsRUFBRTNFLFNBQVMsRUFBRTRFLGNBQWNDLGFBQWEsRUFBRWhELE9BQU8sRUFBRSxHQUFHOUUsUUFBUW1GLElBQUk7WUFDM0YsSUFBSSxBQUFDbEMsQ0FBQUEsYUFBYSxFQUFFLEFBQUQsRUFBR2xCLE1BQU0sS0FBSyxHQUFHO2dCQUNsQyxNQUFNLElBQUkzRCxvQkFBb0I7WUFDaEMsT0FBTyxJQUFJLEFBQUMwSixDQUFBQSxpQkFBaUIsRUFBRSxBQUFELEVBQUcvRixNQUFNLEtBQUssR0FBRztnQkFDN0MsTUFBTSxJQUFJM0Qsb0JBQW9CO1lBQ2hDLE9BQU8sSUFBSXdKLHNCQUFzQixXQUFXLEFBQUM5QyxDQUFBQSxXQUFXLEVBQUUsQUFBRCxFQUFHL0MsTUFBTSxLQUFLLEdBQUc7Z0JBQ3hFLE1BQU0sSUFBSTNELG9CQUFvQjtZQUNoQztZQUVBLFVBQVU7WUFDVjZFLFVBQVVTLElBQUksQ0FBQyxDQUFDQyxHQUFHQyxJQUFPRCxJQUFJQyxJQUFJLENBQUMsSUFBSUQsSUFBSUMsSUFBSSxJQUFJO1lBQ25ELE1BQU1pRSxlQUFlcEosWUFBWXNKLE9BQU8sQ0FBQzlELE1BQU0sQ0FBQyxDQUFDK0QsS0FBT0YsY0FBY3BGLFFBQVEsQ0FBQ3NGO1lBRS9FLE1BQU1sRyxlQUFlbUIsVUFBVWpCLE9BQU8sQ0FBQyxDQUFDL0I7Z0JBQ3RDLElBQUkySCxzQkFBc0IsU0FBUztvQkFDakMsTUFBTTNFLFlBQVk7d0JBQUNoRDsyQkFBYTlCLGNBQWM4SixjQUFjLENBQUNoSTtxQkFBVTtvQkFDdkUsTUFBTWlJLGFBQWFqRixVQUFVakIsT0FBTyxDQUFDLENBQUMvQixXQUNwQ29FLE9BQU9VLElBQUksQ0FBQzVHLGNBQWMyQixHQUFHLENBQUNHLFVBQVUrRSxVQUFVO29CQUVwRCxPQUFPNkMsYUFBYTdGLE9BQU8sQ0FBQyxDQUFDbUcsY0FDM0JELFdBQ0dqRSxNQUFNLENBQUMsQ0FBQ3lDLFNBQVc1QixRQUFRcEMsUUFBUSxDQUFDZ0UsU0FDcEMvRCxHQUFHLENBQUMsQ0FBQytELFNBQVc7Z0NBQUN6RztnQ0FBVWtJO2dDQUFhekI7NkJBQU87Z0JBRXRELE9BQU87b0JBQ0wsT0FBT21CLGFBQWFsRixHQUFHLENBQUMsQ0FBQ3dGLGNBQWdCOzRCQUFDbEk7NEJBQVVrSTt5QkFBWTtnQkFDbEU7WUFDRjtZQUVBLE1BQU1DLFdBQVcsTUFBTWpKLFFBQVFxRSxHQUFHLENBQ2hDMUIsYUFBYWEsR0FBRyxDQUFDLE9BQU8sQ0FBQzFDLFVBQVVrSSxhQUFhekIsT0FBTztnQkFDckQsTUFBTSxFQUFFMkIsT0FBTyxFQUFFQyxRQUFRLEVBQUUzQixRQUFRLEVBQUUsR0FBRyxNQUFNekksT0FBT3VCLE1BQU0sQ0FBQzhJLGtCQUFrQixDQUM1RXRJLFVBQ0FrSSxhQUNBekI7Z0JBRUYsT0FBTztvQkFDTHpHO29CQUNBMkg7b0JBQ0FPO29CQUNBekI7b0JBQ0EyQjtvQkFDQUM7b0JBQ0EzQjtnQkFDRjtZQUNGO1lBRUYsT0FBTztnQkFBRXlCO1lBQVM7UUFDcEI7UUFFQXRKLE9BQU9tRyxJQUFJLENBU1IsNkJBQTZCLE9BQU9qRjtZQUNyQyxNQUFNLEVBQUUrSCxPQUFPLEVBQUUsR0FBRy9ILFFBQVFtRixJQUFJO1lBQ2hDLElBQUk0QyxRQUFRaEcsTUFBTSxLQUFLLEdBQUc7Z0JBQ3hCLE1BQU0sSUFBSTNELG9CQUFvQjtZQUNoQztZQUVBLE1BQU15QixTQUFTLE1BQU1WLFFBQVFxRSxHQUFHLENBQzlCdUUsUUFBUXBGLEdBQUcsQ0FBQyxPQUFPLEVBQUUxQyxRQUFRLEVBQUVrSSxXQUFXLEVBQUV6QixNQUFNLEVBQUU4QixTQUFTLEVBQUU7Z0JBQzdELElBQUk7b0JBQ0YsT0FBTyxNQUFNdEssT0FBT3VCLE1BQU0sQ0FBQ2dKLGdCQUFnQixDQUN6Q04sYUFDQTt3QkFDRWxJO3dCQUNBeUc7b0JBQ0YsR0FJQTt3QkFDRThCO29CQUNGO2dCQUVKLEVBQUUsT0FBT0UsR0FBRztvQkFDVixJQUFJckssY0FBY3FLLE1BQU1BLEVBQUVDLFVBQVUsS0FBSyxLQUFLO3dCQUM1QyxPQUFPO29CQUNULE9BQU87d0JBQ0w1RixRQUFRNkYsS0FBSyxDQUFDRjt3QkFDZCxNQUFNQTtvQkFDUjtnQkFDRjtZQUNGO1lBRUYzRixRQUFRQyxHQUFHLENBQUNuRDtZQUVaLElBQUlBLE9BQU9vRSxNQUFNLENBQUN2RixhQUFhcUQsTUFBTSxLQUFLLEdBQUc7Z0JBQzNDLE1BQU0sSUFBSXpELDRCQUE0QjtZQUN4QztZQUNBLE9BQU91QjtRQUNUO1FBRUFmLE9BQU9tRyxJQUFJLENBUVIsNEJBQTRCLE9BQU9qRjtZQUNwQyxNQUFNLEVBQUU2SSxNQUFNLEVBQUUsR0FBRzdJLFFBQVFtRixJQUFJO1lBRS9CLElBQUk7Z0JBQ0YsTUFBTSxFQUFFZ0QsV0FBVyxFQUFFLEdBQUdXLGlCQUFpQixHQUFHRDtnQkFDNUMsTUFBTUUsZUFBZSxNQUFNN0ssT0FBT3VCLE1BQU0sQ0FBQ3VKLGNBQWMsQ0FDckRiLGFBQ0FXO2dCQUdGLE9BQU87b0JBQUVDO2dCQUFhO1lBQ3hCLEVBQUUsT0FBT0wsR0FBRztnQkFDVjNGLFFBQVE2RixLQUFLLENBQUNGO2dCQUNkLE1BQU1BO1lBQ1I7UUFDRjtRQUVBNUosT0FBT21HLElBQUksQ0FBQyxnQkFBZ0IsT0FBT2pGO1lBQ2pDLE1BQU0sRUFBRWlKLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLGNBQWMsRUFBRSxHQUFHcEosUUFBUW1GLElBQUk7WUFPbkUsT0FBTzNHLGVBQWU2SyxXQUFXLENBQUNKLFVBQVVDLFVBQVVDLFFBQVFDO1FBQ2hFO1FBRUF0SyxPQUFPbUcsSUFBSSxDQUFDLHVCQUF1QixPQUFPakY7WUFDeEMsTUFBTSxFQUFFc0osRUFBRSxFQUFFQyxRQUFRLEVBQUUsR0FBR3ZKLFFBQVFtRixJQUFJO1lBS3JDLE9BQU8zRyxlQUFlZ0wsY0FBYyxDQUFDRixJQUFJQztRQUMzQztRQUVBekssT0FBT21HLElBQUksQ0FBQyxpQ0FBaUMsT0FBT2pGO1lBQ2xELE1BQU0sRUFBRXlKLElBQUksRUFBRSxHQUFHekosUUFBUW1GLElBQUk7WUFFN0IsT0FBTzNHLGVBQWVrTCxnQkFBZ0IsQ0FBQ0Q7UUFDekM7UUFFQSxrQkFBa0I7UUFDbEIsTUFBTUUsYUFBYTNMLEtBQUtvQixPQUFPLENBQUMsWUFBWXdLLE9BQU8sRUFBRTtRQUNyRDlLLE9BQU9ELFFBQVEsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0I7WUFDL0NnTCxNQUFNN0wsS0FBS3FFLElBQUksQ0FBQ3NILFlBQVk7WUFDNUJHLFFBQVE7WUFDUkMsZUFBZTtRQUNqQjtRQUVBLGlEQUFpRDtRQUNqRGpMLE9BQU9nQixHQUFHLENBQUMsS0FBSyxPQUFPa0ssVUFBVUM7WUFDL0JBLE1BQU1DLE9BQU8sQ0FBQztnQkFBRSxnQkFBZ0I7WUFBWSxHQUFHQyxJQUFJLENBQ2pEck0sR0FDR3NNLFlBQVksQ0FBQ3BNLEtBQUtvQixPQUFPLENBQUMsWUFBWXdLLE9BQU8sRUFBRSx5QkFDL0NTLFFBQVEsR0FDUjNJLE9BQU8sQ0FBQyxtQkFBbUJ4RCxPQUFPNkIsTUFBTSxDQUFDdUssV0FBVyxJQUFJO1FBRS9EO0lBQ0YsR0FDQTtRQUFFUixRQUFRO0lBQWE7QUFFM0IifQ==
|
|
689
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyByYW5nZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHR5cGUgeyBTb25hbXVEQkNvbmZpZyB9IGZyb20gXCIuLi9kYXRhYmFzZS9kYlwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIEJhZFJlcXVlc3RFeGNlcHRpb24sXG4gIGlzU29FeGNlcHRpb24sXG4gIFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbixcbn0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgdHlwZSBNaWdyYXRpb25SZXN1bHQsIE1pZ3JhdG9yIH0gZnJvbSBcIi4uL21pZ3JhdGlvbi9taWdyYXRvclwiO1xuaW1wb3J0IHsgdHlwZSBEdXBsaWNhdGVDaGVja09wdGlvbnMsIEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5U3Vic2V0Um93LFxuICB0eXBlIEZpeHR1cmVSZWNvcmQsXG4gIHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMsXG4gIHR5cGUgRmxhdHRlblN1YnNldFJvdyxcbiAgdHlwZSBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNvbmFtdVVJQXBpUGx1Z2luKGZhc3RpZnk6IEZhc3RpZnlJbnN0YW5jZSkge1xuICBmYXN0aWZ5LnJlZ2lzdGVyKFxuICAgIGFzeW5jIChzZXJ2ZXIpID0+IHtcbiAgICAgIC8vIG1pZ3JhdG9yXG4gICAgICBjb25zdCBtaWdyYXRvciA9IG5ldyBNaWdyYXRvcigpO1xuXG4gICAgICAvLyB3YWl0Rm9ySE1SQ29tcGxldGVkXG4gICAgICBhc3luYyBmdW5jdGlvbiB3YWl0Rm9ySE1SQ29tcGxldGVkPFQ+KGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHdhaXRQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSwgMTUwMCk7XG5cbiAgICAgICAgICBjb25zdCBoYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgU29uYW11LnN5bmNlci5ldmVudEVtaXR0ZXIub2ZmKFwib25ITVJDb21wbGV0ZWRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIFNvbmFtdS5zeW5jZXIuZXZlbnRFbWl0dGVyLm9uY2UoXCJvbkhNUkNvbXBsZXRlZFwiLCBoYW5kbGVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oKTtcbiAgICAgICAgYXdhaXQgd2FpdFByb21pc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL3NvbmFtdS9jb25maWdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gU29uYW11LmNvbmZpZztcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBlbnRpdHlJZD86IHN0cmluZztcbiAgICAgICAgICBwcmVzZXQ/OiBcInR5cGVzXCIgfCBcImVudGl0eS5qc29uXCIgfCBcImdlbmVyYXRlZFwiO1xuICAgICAgICAgIGFic1BhdGg/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvdG9vbHMvb3BlblZzY29kZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBwcmVzZXQsIGFic1BhdGggfSA9IHJlcXVlc3QucXVlcnk7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9ICgoKSA9PiB7XG4gICAgICAgICAgaWYgKGVudGl0eUlkICYmIHByZXNldCkge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgY29uc3QgeyBuYW1lcyB9ID0gZW50aXR5O1xuXG4gICAgICAgICAgICBjb25zdCB7IGFwaVJvb3RQYXRoIH0gPSBTb25hbXU7XG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9ICgoKSA9PiB7XG4gICAgICAgICAgICAgIHN3aXRjaCAocHJlc2V0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInR5cGVzXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZXMuZnN9LnR5cGVzLnRzYDtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZW50aXR5Lmpzb25cIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJnZW5lcmF0ZWRcIjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtuYW1lcy5mc30uZ2VuZXJhdGVkLnRzYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiBgJHthcGlSb290UGF0aH0vc3JjL2FwcGxpY2F0aW9uLyR7ZW50aXR5Lm5hbWVzLnBhcmVudEZzfS8ke2ZpbGVuYW1lfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghYWJzUGF0aCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihcInByZXNldCBvciBhYnNQYXRoIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWJzUGF0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGV4ZWNTeW5jKGBjb2RlICR7dGFyZ2V0UGF0aH1gKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUXVlcnlzdHJpbmc6IHtcbiAgICAgICAgICBvcmlnaW46IHN0cmluZztcbiAgICAgICAgICBlbnRpdHlJZD86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS90b29scy9nZXRTdWdnZXN0aW9uXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgb3JpZ2luLCBlbnRpdHlJZCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICAvLyDsuZjtmZgg7Jqp7Ja07KeRXG4gICAgICAgIGNvbnN0IGdsb3NzYXJ5ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICAgICAgICAgIFtcInN0YXR1c1wiLCBcIuyDge2DnFwiXSxcbiAgICAgICAgICBbXCJ0eXBlXCIsIFwi7YOA7J6FXCJdLFxuICAgICAgICAgIFtcImltYWdlXCIsIFwi7J2066+47KeAXCJdLFxuICAgICAgICAgIFtcImltYWdlc1wiLCBcIuydtOuvuOyngOumrOyKpO2KuFwiXSxcbiAgICAgICAgICBbXCJ1cmxcIiwgXCJVUkxcIl0sXG4gICAgICAgICAgW1wiaWRcIiwgXCJJRFwiXSxcbiAgICAgICAgICBbXCJuYW1lXCIsIGB7RW50aXR5SUR966qFYF0sXG4gICAgICAgICAgW1widGl0bGVcIiwgXCJ7RW50aXR5SUR966qFXCJdLFxuICAgICAgICAgIFtcInBhcmVudFwiLCBcIuyDgeychHtFbnRpdHlJRH1cIl0sXG4gICAgICAgICAgW1wiZGVzY1wiLCBcIuyEpOuqhVwiXSxcbiAgICAgICAgICBbXCJhdFwiLCBcIuydvOyLnFwiXSxcbiAgICAgICAgICBbXCJjcmVhdGVkXCIsIFwi65Ox66GdXCJdLFxuICAgICAgICAgIFtcInVwZGF0ZWRcIiwgXCLsiJjsoJVcIl0sXG4gICAgICAgICAgW1wiZGVsZXRlZFwiLCBcIuyCreygnFwiXSxcbiAgICAgICAgICBbXCJieVwiLCBcIuycoOyggFwiXSxcbiAgICAgICAgICBbXCJkYXRlXCIsIFwi7J287J6QXCJdLFxuICAgICAgICAgIFtcInRpbWVcIiwgXCLsi5zqsIRcIl0sXG4gICAgICAgICAgW1wia29cIiwgXCIo7ZWc6riAKVwiXSxcbiAgICAgICAgICBbXCJlblwiLCBcIijsmIHrrLgpXCJdLFxuICAgICAgICAgIFtcImtyd1wiLCBcIijsm5ApXCJdLFxuICAgICAgICAgIFtcInVzZFwiLCBcIihVU0QpXCJdLFxuICAgICAgICAgIFtcImNvbG9yXCIsIFwi7Lus65+sXCJdLFxuICAgICAgICAgIFtcImNvZGVcIiwgXCLsvZTrk5xcIl0sXG4gICAgICAgICAgW1wieFwiLCBcIljsooztkZxcIl0sXG4gICAgICAgICAgW1wieVwiLCBcIlnsooztkZxcIl0sXG4gICAgICAgICAgW1wiY3VycmVudFwiLCBcIu2YhOyerFwiXSxcbiAgICAgICAgICBbXCJzdG9ja1wiLCBcIuyerOqzoFwiXSxcbiAgICAgICAgICBbXCJ0b3RhbFwiLCBcIuy0nVwiXSxcbiAgICAgICAgICBbXCJhZG1pblwiLCBcIuq0gOumrOyekFwiXSxcbiAgICAgICAgICBbXCJncm91cFwiLCBcIuq3uOujuVwiXSxcbiAgICAgICAgICBbXCJpdGVtXCIsIFwi7JWE7J207YWcXCJdLFxuICAgICAgICAgIFtcImNudFwiLCBcIuyImOufiVwiXSxcbiAgICAgICAgICBbXCJwcmljZVwiLCBcIuqwgOqyqVwiXSxcbiAgICAgICAgICBbXCJwcmVzZXRcIiwgXCLtlITrpqzshYtcIl0sXG4gICAgICAgICAgW1wiYWNjdFwiLCBcIuqzhOyijFwiXSxcbiAgICAgICAgICBbXCJ0ZWxcIiwgXCLsoITtmZTrsojtmLhcIl0sXG4gICAgICAgICAgW1wibm9cIiwgXCLrsojtmLhcIl0sXG4gICAgICAgICAgW1wiYm9keVwiLCBcIuuCtOyaqVwiXSxcbiAgICAgICAgICBbXCJjb250ZW50XCIsIFwi64K07JqpXCJdLFxuICAgICAgICAgIFtcIm9yZGVybm9cIiwgXCLsoJXroKzsiJzshJxcIl0sXG4gICAgICAgICAgW1wicHJpb3JpdHlcIiwgXCLsmrDshKDsiJzsnIRcIl0sXG4gICAgICAgICAgW1widGV4dFwiLCBcIu2FjeyKpO2KuFwiXSxcbiAgICAgICAgICBbXCJrZXlcIiwgXCLtgqRcIl0sXG4gICAgICAgICAgW1wic3VtXCIsIFwi7ZWp7IKwXCJdLFxuICAgICAgICAgIFtcImV4cGVjdGVkXCIsIFwi7JiI7IOBXCJdLFxuICAgICAgICAgIFtcImFjdHVhbFwiLCBcIuyLpOygnFwiXSxcbiAgICAgICAgXSk7XG4gICAgICAgIC8vIOyghOyytCDsl5Tti7Dti7Ag7Iic7ZqM7ZWY66mwLCDsl5Tti7Dti7Ag7YOA7J207YuA6rO8IO2UhOuhrSDshKTrqoXsnYQg7LmY7ZmYIOyaqeyWtOynkeyXkCDstpTqsIBcbiAgICAgICAgZm9yIChjb25zdCBlbnRpdHlJZCBvZiBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpKSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGlmICgoZW50aXR5LnRpdGxlID8/IFwiXCIpICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBnbG9zc2FyeS5zZXQoaW5mbGVjdGlvbi51bmRlcnNjb3JlKGVudGl0eS5pZCksIGVudGl0eS50aXRsZSk7XG4gICAgICAgICAgICBnbG9zc2FyeS5zZXQoXG4gICAgICAgICAgICAgIGluZmxlY3Rpb24udW5kZXJzY29yZShpbmZsZWN0aW9uLnBsdXJhbGl6ZShlbnRpdHkuaWQpKSxcbiAgICAgICAgICAgICAgYCR7ZW50aXR5LnRpdGxlfeumrOyKpO2KuGAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudGl0eS5wcm9wcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBpZiAoZ2xvc3NhcnkuaGFzKHByb3AubmFtZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb3AuZGVzYykge1xuICAgICAgICAgICAgICBnbG9zc2FyeS5zZXQocHJvcC5uYW1lLCBwcm9wLmRlc2MucmVwbGFjZShlbnRpdHkudGl0bGUgPz8gXCJcIiwgXCJ7RW50aXR5SUR9XCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1Z2dlc3RlZCA9ICgoKSA9PiB7XG4gICAgICAgICAgLy8g64uo7Ja0IOu2hOumrCwg6rCA64ql7ZWcIOyhsO2VqSDsg53shLFcbiAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yaWdpbi5zcGxpdChcIl9cIik7XG4gICAgICAgICAgY29uc3QgY29tYmluYXRpb25zID0gWy4uLnJhbmdlKHdvcmRzLmxlbmd0aCwgMCwgLTEpXS5mbGF0TWFwKChsZW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIC4uLnJhbmdlKDAsIHdvcmRzLmxlbmd0aCAtIGxlbiArIDEsIChpZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbGVuLFxuICAgICAgICAgICAgICAgICAgdzogd29yZHMuc2xpY2UoaWR4LCBpZHggKyBsZW4pLmpvaW4oXCJfXCIpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIOyhsO2VqeydhCDsiJztmoztlZjrqbAsIOy5mO2ZmCDsmqnslrTsp5Hsl5Ag7J6I64qUIOuLqOyWtOqwgCDtj6ztlajrkJwg6rK97JqwLCDsuZjtmZgg7Jqp7Ja066GcIOy5mO2ZmFxuICAgICAgICAgIGNvbnN0IFJFUExBQ0VEX1BSRUZJWCA9IFwiI1JFUExBQ0VELy9cIjsgLy8g7LmY7ZmY65CcIOuLqOyWtOulvCBqb2luIOydtO2bhOyXkOuPhCDsi53rs4TtlZjquLAg7JyE7ZW0IHByZWZpeCDstpTqsIBcbiAgICAgICAgICBsZXQgcmVtYWluQXJyOiBzdHJpbmdbXSA9IFsuLi53b3Jkc107XG4gICAgICAgICAgZm9yIChjb25zdCBjb21iIG9mIGNvbWJpbmF0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVtYWluU3RyID0gcmVtYWluQXJyLmpvaW4oXCJfXCIpO1xuICAgICAgICAgICAgaWYgKHJlbWFpblN0ci5pbmNsdWRlcyhjb21iLncpICYmIGdsb3NzYXJ5Lmhhcyhjb21iLncpKSB7XG4gICAgICAgICAgICAgIHJlbWFpbkFyciA9IHJlbWFpblN0clxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGNvbWIudywgUkVQTEFDRURfUFJFRklYICsgZ2xvc3NhcnkuZ2V0KGNvbWIudykpXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiX1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVtYWluQXJyXG4gICAgICAgICAgICAubWFwKChyKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyLnN0YXJ0c1dpdGgoUkVQTEFDRURfUFJFRklYKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByLnJlcGxhY2UoUkVQTEFDRURfUFJFRklYLCBcIlwiKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC97RW50aXR5SUR9L2csIGVudGl0eUlkID8gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpLnRpdGxlIDogXCJcIik7XG4gICAgICAgIH0pKCk7XG5cbiAgICAgICAgY29uc29sZS5sb2coeyBlbnRpdHlJZCwgb3JpZ2luLCBzdWdnZXN0ZWQgfSk7XG4gICAgICAgIHJldHVybiB7IHN1Z2dlc3RlZCB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2VudGl0eS9maW5kTWFueVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmxhdHRlblN1YnNldFJvd3Moc3Vic2V0Um93czogRW50aXR5U3Vic2V0Um93W10pOiBGbGF0dGVuU3Vic2V0Um93W10ge1xuICAgICAgICAgIHJldHVybiBzdWJzZXRSb3dzLmZsYXRNYXAoKHN1YnNldFJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgLi4uc1JvdyB9ID0gc3Vic2V0Um93O1xuICAgICAgICAgICAgcmV0dXJuIFtzUm93LCAuLi5mbGF0dGVuU3Vic2V0Um93cyhjaGlsZHJlbildO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50aXRpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBlbnRpdHlJZHMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2V0Um93cyA9IGVudGl0eS5nZXRTdWJzZXRSb3dzKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgICAgZmxhdHRlblN1YnNldFJvd3M6IGZsYXR0ZW5TdWJzZXRSb3dzKHN1YnNldFJvd3MpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRpdGllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgYUlkID0gYS5wYXJlbnRJZCA/PyBhLmlkO1xuICAgICAgICAgIGNvbnN0IGJJZCA9IGIucGFyZW50SWQgPz8gYi5pZDtcbiAgICAgICAgICBpZiAoYUlkIDwgYklkKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKGFJZCA+IGJJZCkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGFJZCA9PT0gYklkKSB7XG4gICAgICAgICAgICBpZiAoYS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAoYi5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGVudGl0aWVzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZmlsdGVyPzogXCJlbnVtc1wiIHwgXCJ0eXBlc1wiO1xuICAgICAgICAgIHJlbG9hZD86IFwiMVwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS90eXBlSWRzXCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHR5cGVJZHM6IHN0cmluZ1tdIH0+ID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXIsIHJlbG9hZCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICBpZiAocmVsb2FkID09PSBcIjFcIikge1xuICAgICAgICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuYXV0b2xvYWRUeXBlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZUlkcyA9ICgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdHlwZUlkcyA9IE9iamVjdC5lbnRyaWVzKFNvbmFtdS5zeW5jZXIudHlwZXMpXG4gICAgICAgICAgICAuZmlsdGVyKChbX3R5cGVJZCwgem9kVHlwZV0pID0+ICh6b2RUeXBlLmRlZi50eXBlIGFzIHN0cmluZykgIT09IFwiZW51bVwiKVxuICAgICAgICAgICAgLm1hcCgoW3R5cGVJZCwgX3pvZFR5cGVdKSA9PiB0eXBlSWQpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlciA9PT0gXCJ0eXBlc1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZUlkcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnVtSWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKS5mbGF0TWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChmaWx0ZXIgPT09IFwiZW51bXNcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVudW1JZHM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4udHlwZUlkcywgLi4uZW51bUlkc107XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZUlkcyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBmb3JtOiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgIHRhYmxlOiBzdHJpbmc7XG4gICAgICAgICAgICBwYXJlbnRJZD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9jcmVhdGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZm9ybSB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuY3JlYXRlRW50aXR5KHsgLi4uZm9ybSwgZW50aXR5SWQ6IGZvcm0uaWQgfSk7XG5cbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IFNvbmFtdS5zeW5jZXIuZGVsRW50aXR5KGVudGl0eUlkKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdWYWx1ZXM6IHtcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgICAgICAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW50aXR5QmFzZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgbmV3VmFsdWVzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS50aXRsZSA9IG5ld1ZhbHVlcy50aXRsZTtcbiAgICAgICAgICBlbnRpdHkudGFibGUgPSBuZXdWYWx1ZXMudGFibGU7XG4gICAgICAgICAgZW50aXR5LnBhcmVudElkID0gbmV3VmFsdWVzLnBhcmVudElkO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBzdWJzZXRLZXk6IHN0cmluZztcbiAgICAgICAgICBmaWVsZHM6IHN0cmluZ1tdO1xuICAgICAgICAgIGZpZWxkc0ludGVybmFsPzogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeVN1YnNldFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgc3Vic2V0S2V5LCBmaWVsZHMsIGZpZWxkc0ludGVybmFsIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV0gPSBmaWVsZHM7XG4gICAgICAgICAgaWYgKGZpZWxkc0ludGVybmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZHNJbnRlcm5hbC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGVudGl0eS5zdWJzZXRzSW50ZXJuYWxbc3Vic2V0S2V5XSA9IGZpZWxkc0ludGVybmFsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGVudGl0eS5zdWJzZXRzSW50ZXJuYWxbc3Vic2V0S2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiB7IHVwZGF0ZWQ6IGZpZWxkcywgdXBkYXRlZEludGVybmFsOiBmaWVsZHNJbnRlcm5hbCB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHN1YnNldEtleTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxTdWJzZXRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHN1YnNldEtleSB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LnN1YnNldHNJbnRlcm5hbFtzdWJzZXRLZXldO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdQcm9wOiBFbnRpdHlQcm9wO1xuICAgICAgICAgIGF0PzogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9jcmVhdGVQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCwgbmV3UHJvcCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuY3JlYXRlUHJvcChuZXdQcm9wLCBhdCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3UHJvcDogRW50aXR5UHJvcDtcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCwgbmV3UHJvcCB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5tb2RpZnlQcm9wKG5ld1Byb3AsIGF0KTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGF0OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbFByb3BcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGF0IH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmRlbFByb3AoYXQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGF0OiBudW1iZXI7XG4gICAgICAgICAgdG86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW92ZVByb3BcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGF0LCB0byB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5tb3ZlUHJvcChhdCwgdG8pO1xuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgaW5kZXhlczogRW50aXR5SW5kZXhbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5SW5kZXhlc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgaW5kZXhlcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuaW5kZXhlcyA9IGluZGV4ZXM7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiB7IHVwZGF0ZWQ6IGluZGV4ZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBlbnVtTGFiZWxzOiBFbnRpdHlbXCJlbnVtTGFiZWxzXCJdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlFbnVtTGFiZWxzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBlbnVtTGFiZWxzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5lbnVtTGFiZWxzID0gZW51bUxhYmVscztcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIHsgdXBkYXRlZDogZW51bUxhYmVscyB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld0VudW1JZDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9jcmVhdGVFbnVtSWRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIG5ld0VudW1JZCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcblxuICAgICAgICAgIGlmIChlbnRpdHkuZW51bUxhYmVsc1tuZXdFbnVtSWRdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOydtOuvuCDsobTsnqztlZjripQgZW51bUlk7J6F64uI64ukOiAke25ld0VudW1JZH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRpdHkuZW51bUxhYmVsc1tuZXdFbnVtSWRdID0ge1xuICAgICAgICAgICAgLi4uKG5ld0VudW1JZC5lbmRzV2l0aChcIlN0YXR1c1wiKVxuICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZTogXCLrhbjstpxcIixcbiAgICAgICAgICAgICAgICAgIGhpZGRlbjogXCLsiKjquYBcIixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgXCJcIjogXCJcIixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBlbnVtSWQ6IHtcbiAgICAgICAgICAgIGJlZm9yZTogc3RyaW5nO1xuICAgICAgICAgICAgYWZ0ZXI6IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlFbnVtSWRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGVudW1JZCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgICAgICAgY29uc3QgaXNFeGlzdHMgPSBlbnRpdHlJZHMuc29tZSgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRpdHkuZW51bUxhYmVscykuaW5jbHVkZXMoZW51bUlkLmFmdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoaXNFeGlzdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg7J2066+4IOyhtOyerO2VmOuKlCBFbnVtSWTsnoXri4jri6Q6ICR7ZW51bUlkLmFmdGVyfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWQuYWZ0ZXJdID0gZW50aXR5LmVudW1MYWJlbHNbZW51bUlkLmJlZm9yZV07XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZC5iZWZvcmVdO1xuXG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgZW50aXR5SWRzKSB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZW50aXR5LnByb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChwcm9wLnR5cGUgPT09IFwiZW51bVwiICYmIHByb3AuaWQgPT09IGVudW1JZC5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICBwcm9wLmlkID0gZW51bUlkLmFmdGVyO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBlbnVtSWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsZXRlRW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBlbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG4gICAgICAgICAgY29uc3QgaXNSZWZlcmVuY2VkID0gZW50aXR5SWRzXG4gICAgICAgICAgICAuZmxhdE1hcCgoZW50aXR5SWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcylcbiAgICAgICAgICAgIC5zb21lKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwiZW51bVwiICYmIHByb3AuaWQgPT09IGVudW1JZCk7XG4gICAgICAgICAgaWYgKGlzUmVmZXJlbmNlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2VudW1JZH3rpbwg7LC47KGw7ZWY64qUIO2UhOuhnO2NvO2LsOqwgCDsobTsnqztlanri4jri6QuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWRdO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2dldFRhYmxlQ29sdW1uc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eUlkIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBlbnRpdHkuZ2V0VGFibGVDb2x1bW5zKCk7XG4gICAgICAgIHJldHVybiB7IGNvbHVtbnMgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9taWdyYXRpb25zL3N0YXR1c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IG1pZ3JhdG9yLmdldFN0YXR1cygpO1xuXG4gICAgICAgIHJldHVybiB7IHN0YXR1cyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGFjdGlvbjogXCJhcHBseVwiIHwgXCJyb2xsYmFja1wiIHwgXCJzaGFkb3dcIjtcbiAgICAgICAgICB0YXJnZXRzOiAoa2V5b2YgU29uYW11REJDb25maWcpW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9ydW5BY3Rpb25cIiwgYXN5bmMgKHJlcXVlc3QpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdD4gPT4ge1xuICAgICAgICBjb25zdCB7IGFjdGlvbiwgdGFyZ2V0cyB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIGlmIChhY3Rpb24gPT09IFwic2hhZG93XCIpIHtcbiAgICAgICAgICByZXR1cm4gbWlncmF0b3IucnVuU2hhZG93VGVzdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWdyYXRvci5ydW5BY3Rpb24oYWN0aW9uLCB0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGNvZGVOYW1lczogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvbWlncmF0aW9ucy9kZWxDb2Rlc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNvZGVOYW1lcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICByZXR1cm4gYXdhaXQgbWlncmF0b3IuZGVsQ29kZXMoY29kZU5hbWVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvbWlncmF0aW9ucy9nZW5lcmF0ZVByZXBhcmVkQ29kZXNcIiwgYXN5bmMgKF9yZXF1ZXN0dCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGVQcmVwYXJlZENvZGVzKCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgdGVtcGxhdGVHcm91cE5hbWU6IFwiRW50aXR5XCIgfCBcIkVudW1zXCI7XG4gICAgICAgICAgZW50aXR5SWRzOiBzdHJpbmdbXTtcbiAgICAgICAgICB0ZW1wbGF0ZUtleXM6IHN0cmluZ1tdO1xuICAgICAgICAgIGVudW1JZHM6IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NjYWZmb2xkaW5nL2dldFN0YXR1c1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IHRlbXBsYXRlR3JvdXBOYW1lLCBlbnRpdHlJZHMsIHRlbXBsYXRlS2V5czogX3RlbXBsYXRlS2V5cywgZW51bUlkcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICBpZiAoKGVudGl0eUlkcyA/PyBbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXCJlbnRpdHlJZHMgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICgoX3RlbXBsYXRlS2V5cyA/PyBbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXCJ0ZW1wbGF0ZUtleXMgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh0ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gXCJFbnVtc1wiICYmIChlbnVtSWRzID8/IFtdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbihcImVudW1JZHMgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNvcnRpbmdcbiAgICAgICAgZW50aXR5SWRzLnNvcnQoKGEsIGIpID0+IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCkpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUtleXMgPSBUZW1wbGF0ZUtleS5vcHRpb25zLmZpbHRlcigodGspID0+IF90ZW1wbGF0ZUtleXMuaW5jbHVkZXModGspKTtcblxuICAgICAgICBjb25zdCBjb21iaW5hdGlvbnMgPSBlbnRpdHlJZHMuZmxhdE1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICBpZiAodGVtcGxhdGVHcm91cE5hbWUgPT09IFwiRW51bXNcIikge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5SWRzID0gW2VudGl0eUlkLCAuLi5FbnRpdHlNYW5hZ2VyLmdldENoaWxkcmVuSWRzKGVudGl0eUlkKV07XG4gICAgICAgICAgICBjb25zdCBhbGxFbnVtSWRzID0gZW50aXR5SWRzLmZsYXRNYXAoKGVudGl0eUlkKSA9PlxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkuZW51bUxhYmVscyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRlbXBsYXRlS2V5cy5mbGF0TWFwKCh0ZW1wbGF0ZUtleSkgPT5cbiAgICAgICAgICAgICAgYWxsRW51bUlkc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGVudW1JZCkgPT4gZW51bUlkcy5pbmNsdWRlcyhlbnVtSWQpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGVudW1JZCkgPT4gW2VudGl0eUlkLCB0ZW1wbGF0ZUtleSwgZW51bUlkXSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcGxhdGVLZXlzLm1hcCgodGVtcGxhdGVLZXkpID0+IFtlbnRpdHlJZCwgdGVtcGxhdGVLZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHN0YXR1c2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgY29tYmluYXRpb25zLm1hcChhc3luYyAoW2VudGl0eUlkLCB0ZW1wbGF0ZUtleSwgZW51bUlkXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBzdWJQYXRoLCBmdWxsUGF0aCwgaXNFeGlzdHMgfSA9IGF3YWl0IFNvbmFtdS5zeW5jZXIuY2hlY2tFeGlzdHNHZW5Db2RlKFxuICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICAgIGVudW1JZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgdGVtcGxhdGVHcm91cE5hbWUsXG4gICAgICAgICAgICAgIHRlbXBsYXRlS2V5LFxuICAgICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICAgIGZ1bGxQYXRoLFxuICAgICAgICAgICAgICBpc0V4aXN0cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IHN0YXR1c2VzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgICBvdmVyd3JpdGU/OiBib29sZWFuO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9nZW5lcmF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oXCJvcHRpb25zIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBvcHRpb25zLm1hcChhc3luYyAoeyBlbnRpdHlJZCwgdGVtcGxhdGVLZXksIGVudW1JZCwgb3ZlcndyaXRlIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgICAgICAgfSBhcyB7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc1NvRXhjZXB0aW9uKGUpICYmIGUuc3RhdHVzQ29kZSA9PT0gNTQxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5maWx0ZXIobm9uTnVsbGFibGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24oXCLsnbTrr7gg66qo65OgIO2MjOydvOydtCDsg53shLHrkJwg7IOB7YOc7J6F64uI64ukLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIG9wdGlvbjoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9wcmV2aWV3XCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHBhdGhBbmRDb2RlczogUGF0aEFuZENvZGVbXSB9PiA9PiB7XG4gICAgICAgIGNvbnN0IHsgb3B0aW9uIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHRlbXBsYXRlS2V5LCAuLi50ZW1wbGF0ZU9wdGlvbnMgfSA9IG9wdGlvbjtcbiAgICAgICAgICBjb25zdCBwYXRoQW5kQ29kZXMgPSBhd2FpdCBTb25hbXUuc3luY2VyLnJlbmRlclRlbXBsYXRlKFxuICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICB0ZW1wbGF0ZU9wdGlvbnMsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7IHBhdGhBbmRDb2RlcyB9O1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL2ZpeHR1cmVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBzb3VyY2VEQiwgdGFyZ2V0REIsIHNlYXJjaCwgZHVwbGljYXRlQ2hlY2sgfSA9IHJlcXVlc3QuYm9keSBhcyB7XG4gICAgICAgICAgc291cmNlREI6IGtleW9mIFNvbmFtdURCQ29uZmlnO1xuICAgICAgICAgIHRhcmdldERCOiBrZXlvZiBTb25hbXVEQkNvbmZpZztcbiAgICAgICAgICBzZWFyY2g6IEZpeHR1cmVTZWFyY2hPcHRpb25zO1xuICAgICAgICAgIGR1cGxpY2F0ZUNoZWNrPzogRHVwbGljYXRlQ2hlY2tPcHRpb25zO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBGaXh0dXJlTWFuYWdlci5nZXRGaXh0dXJlcyhzb3VyY2VEQiwgdGFyZ2V0REIsIHNlYXJjaCwgZHVwbGljYXRlQ2hlY2spO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9maXh0dXJlL2ltcG9ydFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRiLCBmaXh0dXJlcyB9ID0gcmVxdWVzdC5ib2R5IGFzIHtcbiAgICAgICAgICBkYjoga2V5b2YgU29uYW11REJDb25maWc7XG4gICAgICAgICAgZml4dHVyZXM6IEZpeHR1cmVSZWNvcmRbXTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gRml4dHVyZU1hbmFnZXIuaW5zZXJ0Rml4dHVyZXMoZGIsIGZpeHR1cmVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvZml4dHVyZS9hZGRGaXh0dXJlTG9hZGVyXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29kZSB9ID0gcmVxdWVzdC5ib2R5IGFzIHsgY29kZTogc3RyaW5nIH07XG5cbiAgICAgICAgcmV0dXJuIEZpeHR1cmVNYW5hZ2VyLmFkZEZpeHR1cmVMb2FkZXIoY29kZSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gdWktd2ViIOu5jOuTnCDtjIzsnbwg7ISc67mZXG4gICAgICBjb25zdCB1aURpc3RQYXRoID0gcGF0aC5yZXNvbHZlKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiLi4vdWktd2ViXCIpO1xuICAgICAgc2VydmVyLnJlZ2lzdGVyKGF3YWl0IGltcG9ydChcIkBmYXN0aWZ5L3N0YXRpY1wiKSwge1xuICAgICAgICByb290OiBwYXRoLmpvaW4odWlEaXN0UGF0aCwgXCJhc3NldHNcIiksXG4gICAgICAgIHByZWZpeDogXCIvYXNzZXRzXCIsXG4gICAgICAgIGRlY29yYXRlUmVwbHk6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNQQSBmYWxsYmFjayAtIC9zb25hbXUtdWkvKiDqsr3roZzripQg7KCE67aAIGluZGV4Lmh0bWzroZxcbiAgICAgIHNlcnZlci5nZXQoXCIqXCIsIGFzeW5jIChfcmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgcmVwbHkuaGVhZGVycyh7IFwiQ29udGVudC10eXBlXCI6IFwidGV4dC9odG1sXCIgfSkuc2VuZChcbiAgICAgICAgICBmc1xuICAgICAgICAgICAgLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLi91aS13ZWIvaW5kZXguaHRtbFwiKSlcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZShcInt7cHJvamVjdE5hbWV9fVwiLCBTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IFwiVW5rbm93blNvbmFtdVByb2plY3RcIiksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHsgcHJlZml4OiBcIi9zb25hbXUtdWlcIiB9LFxuICApO1xufVxuIl0sIm5hbWVzIjpbImV4ZWNTeW5jIiwiZnMiLCJpbmZsZWN0aW9uIiwicGF0aCIsInJhbmdlIiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIkJhZFJlcXVlc3RFeGNlcHRpb24iLCJpc1NvRXhjZXB0aW9uIiwiU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIiwiTWlncmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsIlRlbXBsYXRlS2V5Iiwibm9uTnVsbGFibGUiLCJzb25hbXVVSUFwaVBsdWdpbiIsImZhc3RpZnkiLCJyZWdpc3RlciIsInNlcnZlciIsIm1pZ3JhdG9yIiwid2FpdEZvckhNUkNvbXBsZXRlZCIsImZuIiwid2FpdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlciIsImNsZWFyVGltZW91dCIsInN5bmNlciIsImV2ZW50RW1pdHRlciIsIm9mZiIsIm9uY2UiLCJyZXN1bHQiLCJnZXQiLCJjb25maWciLCJyZXF1ZXN0IiwiZW50aXR5SWQiLCJwcmVzZXQiLCJhYnNQYXRoIiwicXVlcnkiLCJ0YXJnZXRQYXRoIiwiZW50aXR5IiwibmFtZXMiLCJhcGlSb290UGF0aCIsImZpbGVuYW1lIiwicGFyZW50RnMiLCJvcmlnaW4iLCJnbG9zc2FyeSIsIk1hcCIsImdldEFsbElkcyIsInRpdGxlIiwic2V0IiwidW5kZXJzY29yZSIsImlkIiwicGx1cmFsaXplIiwicHJvcHMiLCJmb3JFYWNoIiwicHJvcCIsImhhcyIsIm5hbWUiLCJkZXNjIiwicmVwbGFjZSIsInN1Z2dlc3RlZCIsIndvcmRzIiwic3BsaXQiLCJjb21iaW5hdGlvbnMiLCJsZW5ndGgiLCJmbGF0TWFwIiwibGVuIiwiaWR4IiwidyIsInNsaWNlIiwiam9pbiIsIlJFUExBQ0VEX1BSRUZJWCIsInJlbWFpbkFyciIsImNvbWIiLCJyZW1haW5TdHIiLCJpbmNsdWRlcyIsIm1hcCIsInIiLCJzdGFydHNXaXRoIiwidG9VcHBlckNhc2UiLCJjb25zb2xlIiwibG9nIiwiZW50aXR5SWRzIiwiZmxhdHRlblN1YnNldFJvd3MiLCJzdWJzZXRSb3dzIiwic3Vic2V0Um93IiwiY2hpbGRyZW4iLCJzUm93IiwiZW50aXRpZXMiLCJhbGwiLCJnZXRTdWJzZXRSb3dzIiwic29ydCIsImEiLCJiIiwiYUlkIiwicGFyZW50SWQiLCJiSWQiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJyZWxvYWQiLCJhdXRvbG9hZFR5cGVzIiwidHlwZUlkcyIsIk9iamVjdCIsImVudHJpZXMiLCJ0eXBlcyIsIl90eXBlSWQiLCJ6b2RUeXBlIiwiZGVmIiwidHlwZSIsInR5cGVJZCIsIl96b2RUeXBlIiwiZW51bUlkcyIsImtleXMiLCJlbnVtTGFiZWxzIiwicG9zdCIsImZvcm0iLCJib2R5IiwiY3JlYXRlRW50aXR5IiwiZGVsRW50aXR5IiwibmV3VmFsdWVzIiwidGFibGUiLCJzYXZlIiwic3Vic2V0S2V5IiwiZmllbGRzIiwiZmllbGRzSW50ZXJuYWwiLCJzdWJzZXRzIiwic3Vic2V0c0ludGVybmFsIiwidXBkYXRlZCIsInVwZGF0ZWRJbnRlcm5hbCIsImF0IiwibmV3UHJvcCIsImNyZWF0ZVByb3AiLCJtb2RpZnlQcm9wIiwiZGVsUHJvcCIsInRvIiwibW92ZVByb3AiLCJpbmRleGVzIiwibmV3RW51bUlkIiwiRXJyb3IiLCJlbmRzV2l0aCIsImFjdGl2ZSIsImhpZGRlbiIsImVudW1JZCIsImlzRXhpc3RzIiwic29tZSIsImFmdGVyIiwiYmVmb3JlIiwiaXNSZWZlcmVuY2VkIiwiY29sdW1ucyIsImdldFRhYmxlQ29sdW1ucyIsInN0YXR1cyIsImdldFN0YXR1cyIsImFjdGlvbiIsInRhcmdldHMiLCJydW5TaGFkb3dUZXN0IiwicnVuQWN0aW9uIiwiY29kZU5hbWVzIiwiZGVsQ29kZXMiLCJfcmVxdWVzdHQiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJ0ZW1wbGF0ZUdyb3VwTmFtZSIsInRlbXBsYXRlS2V5cyIsIl90ZW1wbGF0ZUtleXMiLCJvcHRpb25zIiwidGsiLCJnZXRDaGlsZHJlbklkcyIsImFsbEVudW1JZHMiLCJ0ZW1wbGF0ZUtleSIsInN0YXR1c2VzIiwic3ViUGF0aCIsImZ1bGxQYXRoIiwiY2hlY2tFeGlzdHNHZW5Db2RlIiwib3ZlcndyaXRlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImUiLCJzdGF0dXNDb2RlIiwiZXJyb3IiLCJvcHRpb24iLCJ0ZW1wbGF0ZU9wdGlvbnMiLCJwYXRoQW5kQ29kZXMiLCJyZW5kZXJUZW1wbGF0ZSIsInNvdXJjZURCIiwidGFyZ2V0REIiLCJzZWFyY2giLCJkdXBsaWNhdGVDaGVjayIsImdldEZpeHR1cmVzIiwiZGIiLCJmaXh0dXJlcyIsImluc2VydEZpeHR1cmVzIiwiY29kZSIsImFkZEZpeHR1cmVMb2FkZXIiLCJ1aURpc3RQYXRoIiwiZGlybmFtZSIsInJvb3QiLCJwcmVmaXgiLCJkZWNvcmF0ZVJlcGx5IiwiX3JlcXVlc3QiLCJyZXBseSIsImhlYWRlcnMiLCJzZW5kIiwicmVhZEZpbGVTeW5jIiwidG9TdHJpbmciLCJwcm9qZWN0TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsUUFBUSxRQUFRLGdCQUFnQjtBQUV6QyxPQUFPQyxRQUFRLEtBQUs7QUFDcEIsT0FBT0MsZ0JBQWdCLGFBQWE7QUFDcEMsT0FBT0MsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLEtBQUssUUFBUSxVQUFVO0FBQ2hDLFNBQVNDLE1BQU0sUUFBUSxtQkFBZ0I7QUFHdkMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUNFQyxtQkFBbUIsRUFDbkJDLGFBQWEsRUFDYkMsMkJBQTJCLFFBQ3RCLGlDQUE4QjtBQUNyQyxTQUErQkMsUUFBUSxRQUFRLDJCQUF3QjtBQUN2RSxTQUFxQ0MsY0FBYyxRQUFRLGdDQUE2QjtBQUN4RixTQVFFQyxXQUFXLFFBQ04sb0JBQWlCO0FBQ3hCLFNBQVNDLFdBQVcsUUFBUSxvQkFBaUI7QUFFN0MsT0FBTyxlQUFlQyxrQkFBa0JDLE9BQXdCO0lBQzlEQSxRQUFRQyxRQUFRLENBQ2QsT0FBT0M7UUFDTCxXQUFXO1FB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
|