@lifeready/core 8.0.10 → 8.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/lifeready-core.umd.js +54 -46
- package/bundles/lifeready-core.umd.js.map +1 -1
- package/bundles/lifeready-core.umd.min.js +1 -1
- package/bundles/lifeready-core.umd.min.js.map +1 -1
- package/esm2015/lib/api/query-processor/query-processor.service.js +13 -1
- package/esm2015/lib/api/types/lr-graphql.types.js +1 -1
- package/esm2015/lib/scenario/scenario.private.gql.js +1 -14
- package/esm2015/lib/scenario/scenario.service.js +35 -28
- package/fesm2015/lifeready-core.js +46 -40
- package/fesm2015/lifeready-core.js.map +1 -1
- package/lib/api/types/lr-graphql.types.d.ts +19 -5
- package/lib/scenario/scenario.service.d.ts +0 -7
- package/lifeready-core.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -551,33 +551,40 @@ let ScenarioService = class ScenarioService extends LrService {
|
|
|
551
551
|
};
|
|
552
552
|
});
|
|
553
553
|
}
|
|
554
|
-
prepareReceiveClaim(scenarioId, sharedClaimId) {
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
}
|
|
554
|
+
// async prepareReceiveClaim(scenarioId: string, sharedClaimId: string) {
|
|
555
|
+
// // Get all the shared items
|
|
556
|
+
// const sharedScenario = (
|
|
557
|
+
// await this.getSharedScenario(scenarioId, sharedClaimId)
|
|
558
|
+
// ).sharedScenario;
|
|
559
|
+
// if (sharedScenario.state !== ScenarioState.APPROVED) {
|
|
560
|
+
// throwClaimNotApproved();
|
|
561
|
+
// }
|
|
562
|
+
// const approvals = mapEdges(
|
|
563
|
+
// sharedScenario.sharedClaim.asClaimReceiver.approvals
|
|
564
|
+
// );
|
|
565
|
+
// const assemblyKey = await this.recoverAssemblyKey(approvals);
|
|
566
|
+
// // Decrypt all items
|
|
567
|
+
// const receiverDirectories = await Promise.all(
|
|
568
|
+
// sharedScenario.asReceiver.receiverItems.receiverDirectories.edges
|
|
569
|
+
// .map((edge) => edge.node)
|
|
570
|
+
// .map(async (receiverDirectory) => {
|
|
571
|
+
// const wrappedItemKey = await this.encryptionService.decrypt(
|
|
572
|
+
// assemblyKey,
|
|
573
|
+
// receiverDirectory.wrappedItemKey
|
|
574
|
+
// );
|
|
575
|
+
// return {
|
|
576
|
+
// receiverDirectoryId: receiverDirectory.id,
|
|
577
|
+
// // Looks like receiverDirectory.wrappedItemKey has no other content in side it except a wrapped key.
|
|
578
|
+
// // So we can turn this in to a doubly wrapped key and just release the assembly key.
|
|
579
|
+
// receiverSharedKeyWrappedItemKey: wrappedItemKey, // the wrappedItemKey is already wrapped by receiverSharedKey
|
|
580
|
+
// };
|
|
581
|
+
// })
|
|
582
|
+
// );
|
|
583
|
+
// return {
|
|
584
|
+
// scenarioClaimId: sharedClaimId,
|
|
585
|
+
// receiverDirectories,
|
|
586
|
+
// };
|
|
587
|
+
// }
|
|
581
588
|
recoverAssemblyKey(approvals) {
|
|
582
589
|
return __awaiter(this, void 0, void 0, function* () {
|
|
583
590
|
const partials = yield Promise.all(approvals.map((approval) => this.keyGraph.decryptFromString(approval.pxk.id, approval.receiverCipherPartialAssemblyKey)));
|
|
@@ -665,4 +672,4 @@ ScenarioService = __decorate([
|
|
|
665
672
|
})
|
|
666
673
|
], ScenarioService);
|
|
667
674
|
export { ScenarioService };
|
|
668
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zY2VuYXJpby9zY2VuYXJpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLFFBQVEsRUFHUixhQUFhLEVBR2Isb0JBQW9CLEdBRXJCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXRFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHNCQUFzQixHQUN2QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxh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WUFaMUIsaUJBQWlCOztBQXdEYixlQUFlO0lBTjNCLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVyxlQUFlLENBczVCM0I7U0F0NUJZLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJNZXJnZWRNdXRhdGlvbiwgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHtcbiAgQWNjZXNzUm9sZUNob2ljZSxcbiAgSlNPTk9iamVjdCxcbiAgbWFwRWRnZXMsXG4gIFNjZW5hcmlvTm9kZSxcbiAgU2NlbmFyaW9SZWNlaXZlck5vZGUsXG4gIFNjZW5hcmlvU3RhdGUsXG4gIFNoYXJlZFNjZW5hcmlvQ2xhaW1SZWNlaXZlZEFwcHJvdmFsTm9kZSxcbiAgU2hhcmVkVHBDbGFpbUFwcHJvdmVyTm9kZSxcbiAgVHBDbGFpbUFwcHJvdmVyU3RhdGUsXG4gIFRwTm9kZSxcbn0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vZW5jcnlwdGlvbi9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICcuLi9pdGVtL2l0ZW0uc2VydmljZSc7XG5pbXBvcnQgeyBJZEtleVBhaXIgfSBmcm9tICcuLi9pdGVtL2l0ZW0udHlwZXMnO1xuaW1wb3J0IHsgS2V5R3JhcGhTZXJ2aWNlIH0gZnJvbSAnLi4va2V5L2tleS1ncmFwaC5zZXJ2aWNlJztcbmltcG9ydCB7IFRwc0tleXNRdWVyeSB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5LnByaXZhdGUuZ3FsJztcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3RwLWFzc2VtYmx5L3RwLWFzc2VtYmx5LnR5cGVzJztcbmltcG9ydCB7XG4gIEtjQmFkQXJndW1lbnRFeGNlcHRpb24sXG4gIEtjQmFkU3RhdGVFeGNlcHRpb24sXG59IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBSdW5PdXRzaWRlQW5ndWxhciB9IGZyb20gJy4uL19jb21tb24vcnVuLW91dHNpZGUtYW5ndWxhcic7XG5pbXBvcnQgeyBhc3NlcnRfeG9yIH0gZnJvbSAnLi4vX2NvbW1vbi91dGlscyc7XG5pbXBvcnQgeyBTY2VuYXJpb0Fzc2VtYmx5Q29udHJvbGxlciB9IGZyb20gJy4vc2NlbmFyaW8uY29udHJvbGxlcic7XG5pbXBvcnQge1xuICBBcHByb3ZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBDYW5jZWxTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIENyZWF0ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgRGVidWdFeHBpcmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIERlbGV0ZVNjZW5hcmlvTXV0YXRpb24sXG4gIFJlY2VpdmVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIFJlamVjdFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgVXBkYXRlU2NlbmFyaW9NdXRhdGlvbixcbn0gZnJvbSAnLi9zY2VuYXJpby5ncWwnO1xuaW1wb3J0IHsgU2NlbmFyaW9RdWVyeSwgU2hhcmVkU2NlbmFyaW9RdWVyeSB9IGZyb20gJy4vc2NlbmFyaW8ucHJpdmF0ZS5ncWwnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlQ2xhaW1hbnRPcHRpb25zLFxuICBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnMsXG4gIENyZWF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgQ3JlYXRlU2NlbmFyaW9PcHRpb25zLFxuICBQYXJ0aWNpcGFudE9wdGlvbnMsXG4gIFJlY2VpdmVyRGlyZWN0b3J5T3B0aW9ucyxcbiAgUmVjZWl2ZXJGaWxlT3B0aW9ucyxcbiAgUmVjZWl2ZXJJdGVtT3B0aW9ucyxcbiAgUmVzZXRTY2VuYXJpb09wdGlvbnMsXG4gIFVwZGF0ZUNsYWltYW50T3B0aW9ucyxcbiAgVXBkYXRlUmVjZWl2ZXJPcHRpb25zLFxuICBVcGRhdGVTY2VuYXJpb09wdGlvbnMsXG59IGZyb20gJy4vc2NlbmFyaW8udHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dDbGFpbUlkTWlzbWF0Y2goKSB7XG4gIHRocm93IG5ldyBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICdjbGFpbUlkIGRvZXMgbm90IG1hdGNoIHdpdGggdGhlIGN1cnJlbnQgY2xhaW1JZCBvZiB0aGUgc2NlbmFyaW8nXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0NsYWltTm90QXBwcm92ZWQoKSB7XG4gIHRocm93IG5ldyBLY0JhZFN0YXRlRXhjZXB0aW9uKCdTY2VuYXJpbyBjbGFpbSBoYXMgbm90IGJlZW4gYXBwcm92ZWQnKTtcbn1cblxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcbiAgbmdab25lTmFtZTogJ25nWm9uZScsXG59KVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFNjZW5hcmlvU2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXNzZW1ibHlDb250cm9sbGVyOiBTY2VuYXJpb0Fzc2VtYmx5Q29udHJvbGxlcixcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZVxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBTTElQMzlfUEFTU1BIUkFTRSA9ICdsaWZlcmVhZHknO1xuXG4gIHByaXZhdGUgcHJlcGFyZUFkZFJlY2VpdmVyRGlyZWN0b3J5ID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJEaXJlY3Rvcnk7XG4gIHByaXZhdGUgcHJlcGFyZVVwZGF0ZVJlY2VpdmVyRGlyZWN0b3J5ID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJEaXJlY3Rvcnk7XG5cbiAgcHJpdmF0ZSBwcmVwYXJlQWRkUmVjZWl2ZXJGaWxlID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJGaWxlO1xuICBwcml2YXRlIHByZXBhcmVVcGRhdGVSZWNlaXZlckZpbGUgPSB0aGlzLnByZXBhcmVSZWNlaXZlckZpbGU7XG5cbiAgLy8gU2NlbmFyaW9zXG4gIGFzeW5jIGNyZWF0ZVNjZW5hcmlvKG9wdGlvbnM6IENyZWF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBDcmVhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVTY2VuYXJpb011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNjZW5hcmlvKG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnVwZGF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlU2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBVcGRhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCBzY2VuYXJpbyA9IChhd2FpdCB0aGlzLmdldFNjZW5hcmlvKG9wdGlvbnMuc2NlbmFyaW9JZCkpLnNjZW5hcmlvO1xuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlU2NlbmFyaW8ob3B0aW9ucywgc2NlbmFyaW8pO1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZXNldFNjZW5hcmlvKG9wdGlvbnM6IFJlc2V0U2NlbmFyaW9PcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMucmVzZXRTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0U2NlbmFyaW9NdXRhdGlvbihvcHRpb25zOiBSZXNldFNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IHNjZW5hcmlvID0gKGF3YWl0IHRoaXMuZ2V0U2NlbmFyaW8ob3B0aW9ucy5zY2VuYXJpb0lkKSkuc2NlbmFyaW87XG5cbiAgICBjb25zdCB7IGFzc2VtYmx5IH0gPSBzY2VuYXJpbztcblxuICAgIC8vIEp1c3QgbmVlZCB0byBkbyBhbiB1cGRhdGUgd2l0aG91dCBjaGFuZ2luZyBhcHByb3ZlcnMuIFRoaXMgd2lsbCByZWNyZWF0ZVxuICAgIC8vIGFsbCBhc3NlbWJseSBrZXlzLlxuICAgIGNvbnN0IHVwZGF0ZVN1YkFzc2VtYmxpZXMgPSBtYXBFZGdlcyhhc3NlbWJseS5zdWJBc3NlbWJsaWVzKS5tYXAoKHNhKSA9PiB7XG4gICAgICBjb25zdCBhcHByb3ZlclRwcyA9IG1hcEVkZ2VzKHNhLmFwcHJvdmVycykubWFwKChhcHByb3ZlcikgPT4gKHtcbiAgICAgICAgdHBJZDogYXBwcm92ZXIudHAuaWQsXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBzYS5pZCxcbiAgICAgICAgcXVvcnVtOiBzYS5xdW9ydW0sXG4gICAgICAgIHNpbmdsZVJlamVjdDogc2Euc2luZ2xlUmVqZWN0LFxuICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YUNsZWFySnNvbjogc2Euc3ViamVjdENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIGFwcHJvdmVyVHBzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGlucHV0ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlU2NlbmFyaW8oXG4gICAgICB7XG4gICAgICAgIHNjZW5hcmlvSWQ6IG9wdGlvbnMuc2NlbmFyaW9JZCxcbiAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgICB1cGRhdGVBc3NlbWJseToge1xuICAgICAgICAgIHF1b3J1bTogYXNzZW1ibHkucXVvcnVtLFxuICAgICAgICAgIHNpbmdsZVJlamVjdDogYXNzZW1ibHkuc2luZ2xlUmVqZWN0LFxuICAgICAgICAgIHVwZGF0ZVN1YkFzc2VtYmxpZXMsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgc2NlbmFyaW9cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBVcGRhdGVTY2VuYXJpb011dGF0aW9uLCAvLyB1cGRhdGluZyBzY2VuYXJpbyByZXNldHMgaXRcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5sckdyYXBoUUwubHJNdXRhdGUodGhpcy5kZWxldGVTY2VuYXJpb011dGF0aW9uKHNjZW5hcmlvSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVNjZW5hcmlvTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWxldGVTY2VuYXJpb011dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7IGlucHV0OiB7IHNjZW5hcmlvSWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2xhaW1zXG4gIGFzeW5jIGNyZWF0ZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZCkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dDogeyBzY2VuYXJpb0lkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbENsYWltKGNsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNhbmNlbENsYWltTXV0YXRpb24oY2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgY2FuY2VsQ2xhaW1NdXRhdGlvbihjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENhbmNlbFNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dDogeyBjbGFpbUlkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlamVjdENsYWltKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMucmVqZWN0Q2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkLCBjbGFpbUlkKSk7XG4gIH1cblxuICBhc3luYyByZWplY3RDbGFpbU11dGF0aW9uKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbXV0YXRpb25zID0gYXdhaXQgdGhpcy5wcmVwYXJlUmVqZWN0Q2xhaW1NdXRhdGlvbnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZFxuICAgICk7XG4gICAgcmV0dXJuIExyTWVyZ2VkTXV0YXRpb24uY3JlYXRlKGF3YWl0IFByb21pc2UuYWxsKG11dGF0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgYXBwcm92ZUNsYWltKHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgLy8gVE9ETyB0aGlzIG5lZWRzIGEgY2FzdCBzbyB0aGUgcmVzdWx0IGlzIG5vdCBBTlkuXG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKFxuICAgICAgdGhpcy5hcHByb3ZlQ2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKVxuICAgICk7XG4gIH1cblxuICBhc3luYyBhcHByb3ZlQ2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG11dGF0aW9ucyA9IGF3YWl0IHRoaXMucHJlcGFyZUFwcHJvdmVDbGFpbU11dGF0aW9ucyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgICBzaGFyZWRDbGFpbUlkXG4gICAgKTtcbiAgICByZXR1cm4gTHJNZXJnZWRNdXRhdGlvbi5jcmVhdGUoYXdhaXQgUHJvbWlzZS5hbGwobXV0YXRpb25zKSk7XG4gIH1cblxuICBhc3luYyByZWNlaXZlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5yZWNlaXZlQ2xhaW0yTXV0YXRpb24oc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZUNsYWltMk11dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBSZWNlaXZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVSZWNlaXZlQ2xhaW0yKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRlYnVnRXhwaXJlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuZGVidWdFeHBpcmVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGRlYnVnRXhwaXJlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlYnVnRXhwaXJlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7IHNjZW5hcmlvSWQgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBIZWxwZXJzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2NlbmFyaW8oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoe1xuICAgICAgcXVlcnk6IFNjZW5hcmlvUXVlcnksXG4gICAgICB2YXJpYWJsZXM6IHsgc2NlbmFyaW9JZCB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRTaGFyZWRTY2VuYXJpbyhzY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXQgPSBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBTaGFyZWRTY2VuYXJpb1F1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIHNjZW5hcmlvSWQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKGNsYWltSWQgJiYgcmV0LnNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmlkICE9PSBjbGFpbUlkKSB7XG4gICAgICB0aHJvd0NsYWltSWRNaXNtYXRjaCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFBhcnRpY2lwYW50VHBzS2V5cyhvcHRpb25zOiBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnNbXSkge1xuICAgIGNvbnN0IHRwSWRzID0gb3B0aW9ucy5tYXAoKHgpID0+IHgudHBJZCk7XG5cbiAgICAvLyBUaGlzIHNob3VsZCBjb250YWluIGFsbCB0aGUgVFBzIHRoYXQgd2UgbmVlZCB0byB1cGRhdGUgdGhlIGFzc2VtYmx5LlxuICAgIGNvbnN0IHRwcyA9IG1hcEVkZ2VzKFxuICAgICAgKFxuICAgICAgICBhd2FpdCB0aGlzLmxyR3JhcGhRTC5xdWVyeSh7XG4gICAgICAgICAgcXVlcnk6IFRwc0tleXNRdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlkczogdHBJZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICkudHBzXG4gICAgKTtcblxuICAgIHJldHVybiB0cHM7XG4gIH1cblxuICBwcml2YXRlIGZpbGxUcFNoYXJlZEtleUlkKFxuICAgIG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9uc1tdLFxuICAgIHRwczogVHBOb2RlW11cbiAgKSB7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChwYXJ0aWNpcGFudCkgPT4ge1xuICAgICAgaWYgKCFwYXJ0aWNpcGFudC50cFNoYXJlZEtleUlkKSB7XG4gICAgICAgIGNvbnN0IHRwID0gdHBzLmZpbmQoKHgpID0+IHguaWQgPT09IHBhcnRpY2lwYW50LnRwSWQpO1xuICAgICAgICBwYXJ0aWNpcGFudC50cFNoYXJlZEtleUlkID1cbiAgICAgICAgICB0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5LnNoYXJlZEtleS5pZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3QgeyBhc3NlbWJseUtleSwgbXV0YXRpb25JbnB1dDogY3JlYXRlQXNzZW1ibHkgfSA9XG4gICAgICBhd2FpdCB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5wcmVwYXJlQ3JlYXRlKG9wdGlvbnMuY3JlYXRlQXNzZW1ibHkpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzIHx8IFtdO1xuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50c09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyB8fCBbXTtcblxuICAgIC8vIEZldGNoIGFsbCB0aGUgVFBzIHNvIHdlIGRvbid0IGhhdmUgdG8gcGFzcyBpbiB0cFNoYXJlZEtleUlkXG4gICAgY29uc3QgY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zID0gY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5jb25jYXQoXG4gICAgICBjcmVhdGVDbGFpbWFudHNPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHRwcyA9IGF3YWl0IHRoaXMuZ2V0UGFydGljaXBhbnRUcHNLZXlzKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyk7XG5cbiAgICB0aGlzLmZpbGxUcFNoYXJlZEtleUlkKGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucywgdHBzKTtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzT3B0aW9ucy5tYXAoKHJlY2VpdmVyKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVDcmVhdGVSZWNlaXZlcihyZWNlaXZlciwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucy5tYXAoKHgpID0+IHRoaXMucHJlcGFyZUNyZWF0ZUNsYWltYW50KHgpKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgY3JlYXRlQXNzZW1ibHksXG4gICAgICBjcmVhdGVSZWNlaXZlcnMsXG4gICAgICBjcmVhdGVDbGFpbWFudHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVNjZW5hcmlvKFxuICAgIG9wdGlvbnM6IFVwZGF0ZVNjZW5hcmlvT3B0aW9ucyxcbiAgICBzY2VuYXJpbzogU2NlbmFyaW9Ob2RlXG4gICkge1xuICAgIGxldCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KFxuICAgICAgc2NlbmFyaW8uYXNzZW1ibHkuYXNzZW1ibHlLZXkuaWRcbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlQXNzZW1ibHkgPSBvcHRpb25zLnVwZGF0ZUFzc2VtYmx5XG4gICAgICA/IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gQXNzZW1ibHkga2V5IGlzIGFsd2F5cyByb3RhdGVkIHdoZW4gdXBkYXRpbmcgYXNzZW1ibHkuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hc3NlbWJseUNvbnRyb2xsZXIucHJlcGFyZVVwZGF0ZShcbiAgICAgICAgICAgIG9wdGlvbnMudXBkYXRlQXNzZW1ibHksXG4gICAgICAgICAgICBzY2VuYXJpby5hc3NlbWJseVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gVXNlIG5ldyBhc3NlbWJseSBrZXkuXG4gICAgICAgICAgYXNzZW1ibHlLZXkgPSByZXN1bHQuYXNzZW1ibHlLZXk7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5tdXRhdGlvbklucHV0O1xuICAgICAgICB9KSgpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZVJlY2VpdmVycyB8fCBbXTtcbiAgICBjb25zdCBjcmVhdGVDbGFpbWFudHNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVDbGFpbWFudHMgfHwgW107XG5cbiAgICAvLyBGZXRjaCBhbGwgdGhlIFRQcyBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgaW4gdHBTaGFyZWRLZXlJZFxuICAgIGNvbnN0IGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyA9IGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMuY29uY2F0KFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCB0cHMgPSBhd2FpdCB0aGlzLmdldFBhcnRpY2lwYW50VHBzS2V5cyhjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMpO1xuXG4gICAgdGhpcy5maWxsVHBTaGFyZWRLZXlJZChjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMsIHRwcyk7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnMgPVxuICAgICAgb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUNyZWF0ZVJlY2VpdmVyKHgsIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nUmVjZWl2ZXJzID0gbWFwRWRnZXMoc2NlbmFyaW8ucmVjZWl2ZXJzKTtcbiAgICBsZXQgdXBkYXRlUmVjZWl2ZXJzID0gb3B0aW9ucy51cGRhdGVSZWNlaXZlcnNcbiAgICAgID8gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgb3B0aW9ucy51cGRhdGVSZWNlaXZlcnMubWFwKCh1cGRhdGVSZWNlaXZlcikgPT4ge1xuICAgICAgICAgICAgLy8gRmluZCB0aGUgcmVjZWl2ZXIgd2UgYXJlIHVwZGF0aW5nXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1JlY2VpdmVyID0gZXhpc3RpbmdSZWNlaXZlcnMuZmluZChcbiAgICAgICAgICAgICAgKHgpID0+IHgudHAuaWQgPT09IHVwZGF0ZVJlY2VpdmVyLnRwSWRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlcihcbiAgICAgICAgICAgICAgdXBkYXRlUmVjZWl2ZXIsXG4gICAgICAgICAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgICAgICAgICBleGlzdGluZ1JlY2VpdmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIDogW107XG5cbiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHJlY2VpdmVycyB3aGVuIHVwZGF0aW5nIGFzc2VtYmx5LlxuICAgIGlmIChvcHRpb25zLnVwZGF0ZUFzc2VtYmx5KSB7XG4gICAgICAvLyBGaWx0ZXIgb3V0IHRoZSByZWNlaXZlcnMgdGhhdCB3aWxsIGJlIGRlbGV0ZWQgb3IgYWxyZWFkeSB1cGRhdGVkLlxuICAgICAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ1JlY2VpdmVycy5maWx0ZXIoXG4gICAgICAgIChleGlzdGluZ1JlY2VpdmVyKSA9PlxuICAgICAgICAgICEob3B0aW9ucy5kZWxldGVSZWNlaXZlcnMgfHwgW10pLmluY2x1ZGVzKGV4aXN0aW5nUmVjZWl2ZXIudHAuaWQpICYmXG4gICAgICAgICAgIXVwZGF0ZVJlY2VpdmVycy5zb21lKFxuICAgICAgICAgICAgKHVwZGF0ZVJlY2VpdmVyKSA9PiB1cGRhdGVSZWNlaXZlci50cElkID09PSBleGlzdGluZ1JlY2VpdmVyLnRwLmlkXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHVwZGF0ZVJlY2VpdmVycyA9IHVwZGF0ZVJlY2VpdmVycy5jb25jYXQoXG4gICAgICAgIGF3YWl0IHRoaXMucHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXJzKGV4aXN0aW5nLCBhc3NlbWJseUtleSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzID1cbiAgICAgIG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzLm1hcCgoeCkgPT4gdGhpcy5wcmVwYXJlQ3JlYXRlQ2xhaW1hbnQoeCkpXG4gICAgICApKTtcblxuICAgIGNvbnN0IGV4aXN0aW5nQ2xhaW1hbnRzID0gbWFwRWRnZXMoc2NlbmFyaW8uY2xhaW1hbnRzKTtcbiAgICBjb25zdCB1cGRhdGVDbGFpbWFudHMgPVxuICAgICAgb3B0aW9ucy51cGRhdGVDbGFpbWFudHMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy51cGRhdGVDbGFpbWFudHMubWFwKCh4KSA9PiB7XG4gICAgICAgICAgLy8gRmluZCB0aGUgY2xhaW1hbnQgd2UgYXJlIHVwZGF0aW5nXG4gICAgICAgICAgY29uc3QgY2xhaW1hbnQgPSBleGlzdGluZ0NsYWltYW50cy5maW5kKFxuICAgICAgICAgICAgKGV4aXN0aW5nQ2xhaW1hbnQpID0+IGV4aXN0aW5nQ2xhaW1hbnQudHAuaWQgPT09IHgudHBJZFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZVVwZGF0ZUNsYWltYW50KHgsIGNsYWltYW50LnNoYXJlZEtleS5pZCk7XG4gICAgICAgIH0pXG4gICAgICApKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzY2VuYXJpb0lkOiBvcHRpb25zLnNjZW5hcmlvSWQsXG4gICAgICBlbmFibGVkOiBvcHRpb25zLmVuYWJsZWQsXG4gICAgICB1cGRhdGVBc3NlbWJseSxcbiAgICAgIGNyZWF0ZVJlY2VpdmVycyxcbiAgICAgIHVwZGF0ZVJlY2VpdmVycyxcbiAgICAgIGRlbGV0ZVJlY2VpdmVyczogb3B0aW9ucy5kZWxldGVSZWNlaXZlcnMsXG4gICAgICBjcmVhdGVDbGFpbWFudHMsXG4gICAgICB1cGRhdGVDbGFpbWFudHMsXG4gICAgICBkZWxldGVDbGFpbWFudHM6IG9wdGlvbnMuZGVsZXRlQ2xhaW1hbnRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNlaXZlckl0ZW0ob3B0aW9uczoge1xuICAgIHJlY2VpdmVySXRlbU9wdGlvbnM6IFJlY2VpdmVySXRlbU9wdGlvbnM7XG4gICAgcmVjZWl2ZXJTaGFyZWRLZXk6IEpXSy5LZXk7XG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXk7XG4gICAgZGlyZWN0b3J5PzogSWRLZXlQYWlyO1xuICAgIGZpbGU/OiBJZEtleVBhaXI7XG4gIH0pIHtcbiAgICBjb25zdCB7XG4gICAgICByZWNlaXZlckl0ZW1PcHRpb25zLFxuICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGRpcmVjdG9yeSxcbiAgICAgIGZpbGUsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBhc3NlcnRfeG9yKHsgZGlyZWN0b3J5LCBmaWxlIH0pO1xuXG4gICAgY29uc3QgeyBhY2Nlc3NSb2xlIH0gPSByZWNlaXZlckl0ZW1PcHRpb25zO1xuXG4gICAgaWYgKGFjY2Vzc1JvbGUgPT0gQWNjZXNzUm9sZUNob2ljZS5ERU5ZKSB7XG4gICAgICBjb25zdCByZXQgPSB7XG4gICAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICAgIHdyYXBwZWRJdGVtS2V5OiBudWxsLFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhOiBudWxsLFxuICAgICAgfTtcblxuICAgICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgICAvLyBDcnlwdG9ncmFwaGljIGFjY2VzcyB0byBpdGVtIGlzIG5vdCByZXF1aXJlZC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXQsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETyB0aGlzIHNob3VsZCBiZSBiYXRjaGVkXG4gICAgICBsZXQgaXRlbUtleTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgaXRlbUtleSA9IGF3YWl0IHRoaXMuaXRlbVNlcnZpY2UuZ2V0RGlyZWN0b3J5S2V5KFxuICAgICAgICAgIGRpcmVjdG9yeS5pZCxcbiAgICAgICAgICBkaXJlY3Rvcnkua2V5SWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1LZXkgPSBhd2FpdCB0aGlzLml0ZW1TZXJ2aWNlLmdldEZpbGVLZXkoZmlsZS5pZCwgZmlsZS5rZXlJZCk7XG4gICAgICB9XG5cbiAgICAgIGxldCB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgICAgaXRlbUtleS5qd2sudG9KU09OKHRydWUpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzaGFyZWRDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgICByZWNlaXZlckl0ZW1PcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICAgICk7XG5cbiAgICAgIHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgICB3cmFwcGVkSXRlbUtleVxuICAgICAgKTtcblxuICAgICAgY29uc3QgcmV0ID0ge1xuICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICB3cmFwcGVkSXRlbUtleSxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXQsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGRpcmVjdG9yeS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVSZWNlaXZlckRpcmVjdG9yeShcbiAgICBvcHRpb25zOiBSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnMsXG4gICAgcmVjZWl2ZXJTaGFyZWRLZXk6IEpXSy5LZXksXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlY2VpdmVySXRlbSh7XG4gICAgICByZWNlaXZlckl0ZW1PcHRpb25zOiBvcHRpb25zLFxuICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGRpcmVjdG9yeToge1xuICAgICAgICBpZDogb3B0aW9ucy5kaXJlY3RvcnlJZCxcbiAgICAgICAga2V5SWQ6IG9wdGlvbnMuZGlyZWN0b3J5S2V5SWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJGaWxlKFxuICAgIG9wdGlvbnM6IFJlY2VpdmVyRmlsZU9wdGlvbnMsXG4gICAgcmVjZWl2ZXJTaGFyZWRLZXk6IEpXSy5LZXksXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlY2VpdmVySXRlbSh7XG4gICAgICByZWNlaXZlckl0ZW1PcHRpb25zOiBvcHRpb25zLFxuICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGZpbGU6IHtcbiAgICAgICAgaWQ6IG9wdGlvbnMuZmlsZUlkLFxuICAgICAgICBrZXlJZDogb3B0aW9ucy5maWxlS2V5SWQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlUmVjZWl2ZXIoXG4gICAgb3B0aW9uczogQ3JlYXRlUmVjZWl2ZXJPcHRpb25zLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIGNvbnN0IHsgc2hhcmVkS2V5LCBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgYWRkRGlyZWN0b3JpZXMgPVxuICAgICAgb3B0aW9ucy5hZGREaXJlY3RvcmllcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXkua2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBhZGRGaWxlcyA9XG4gICAgICBvcHRpb25zLmFkZEZpbGVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRmlsZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRmlsZSh4LCBzaGFyZWRLZXkua2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubXV0YXRpb25JbnB1dCxcbiAgICAgIGFkZERpcmVjdG9yaWVzLFxuICAgICAgYWRkRmlsZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVJlY2VpdmVyKFxuICAgIG9wdGlvbnM6IFVwZGF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgICBhc3NlbWJseUtleTogSldLLktleSxcbiAgICBleGlzdGluZ1JlY2VpdmVyOiBTY2VuYXJpb1JlY2VpdmVyTm9kZVxuICApIHtcbiAgICBjb25zdCBzaGFyZWRLZXlJZCA9IGV4aXN0aW5nUmVjZWl2ZXIuc2hhcmVkS2V5LmlkO1xuXG4gICAgY29uc3QgZGVsZXRlRGlyZWN0b3JpZXNPcHRpb25zID0gb3B0aW9ucy5kZWxldGVEaXJlY3RvcmllcyB8fCBbXTtcbiAgICBjb25zdCB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMgPSBvcHRpb25zLnVwZGF0ZURpcmVjdG9yaWVzIHx8IFtdO1xuXG4gICAgY29uc3QgZGVsZXRlRmlsZXNPcHRpb25zID0gb3B0aW9ucy5kZWxldGVGaWxlcyB8fCBbXTtcbiAgICBjb25zdCB1cGRhdGVGaWxlc09wdGlvbnMgPSBvcHRpb25zLnVwZGF0ZUZpbGVzIHx8IFtdO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyB1cGRhdGUgZGlyZWN0b3JpZXNcbiAgICBtYXBFZGdlcyhleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJEaXJlY3RvcmllcykuZm9yRWFjaChcbiAgICAgIChleGlzdGluZ0RpcmVjdG9yeSkgPT4ge1xuICAgICAgICBpZiAoZGVsZXRlRGlyZWN0b3JpZXNPcHRpb25zLmluY2x1ZGVzKGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAoeCkgPT4geC5kaXJlY3RvcnlJZCA9PT0gZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmlkXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMucHVzaCh7XG4gICAgICAgICAgYWNjZXNzUm9sZTogZXhpc3RpbmdEaXJlY3RvcnkuYWNjZXNzUm9sZSxcbiAgICAgICAgICBkaXJlY3RvcnlJZDogZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmlkLFxuICAgICAgICAgIGRpcmVjdG9yeUtleUlkOiBleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3Rvcnkua2V5SWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjpcbiAgICAgICAgICAgIGV4aXN0aW5nRGlyZWN0b3J5LnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHVwZGF0ZSBkaXJlY3Rvcmllc1xuICAgIG1hcEVkZ2VzKGV4aXN0aW5nUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckZpbGVzKS5mb3JFYWNoKFxuICAgICAgKGV4aXN0aW5nRmlsZSkgPT4ge1xuICAgICAgICBpZiAoZGVsZXRlRmlsZXNPcHRpb25zLmluY2x1ZGVzKGV4aXN0aW5nRmlsZS5maWxlLmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cGRhdGVGaWxlc09wdGlvbnMuZmluZCgoeCkgPT4geC5maWxlSWQgPT09IGV4aXN0aW5nRmlsZS5maWxlLmlkKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUZpbGVzT3B0aW9ucy5wdXNoKHtcbiAgICAgICAgICBhY2Nlc3NSb2xlOiBleGlzdGluZ0ZpbGUuYWNjZXNzUm9sZSxcbiAgICAgICAgICBmaWxlSWQ6IGV4aXN0aW5nRmlsZS5maWxlLmlkLFxuICAgICAgICAgIGZpbGVLZXlJZDogZXhpc3RpbmdGaWxlLmZpbGUua2V5SWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbjogZXhpc3RpbmdGaWxlLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB7IHNoYXJlZEtleSwgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgICBvcHRpb25zLFxuICAgICAgc2hhcmVkS2V5SWRcbiAgICApO1xuXG4gICAgY29uc3QgYWRkRGlyZWN0b3JpZXMgPVxuICAgICAgb3B0aW9ucy5hZGREaXJlY3RvcmllcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZERpcmVjdG9yaWVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IGFkZEZpbGVzID1cbiAgICAgIG9wdGlvbnMuYWRkRmlsZXMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5hZGRGaWxlcy5tYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5wcmVwYXJlQWRkUmVjZWl2ZXJGaWxlKHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5tYXAoKHgpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyRGlyZWN0b3J5KHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpbGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB1cGRhdGVGaWxlc09wdGlvbnMubWFwKCh4KSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlckZpbGUoeCwgc2hhcmVkS2V5LCBhc3NlbWJseUtleSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm11dGF0aW9uSW5wdXQsXG4gICAgICBhZGREaXJlY3RvcmllcyxcbiAgICAgIGFkZEZpbGVzLFxuICAgICAgdXBkYXRlRGlyZWN0b3JpZXMsXG4gICAgICB1cGRhdGVGaWxlcyxcbiAgICAgIGRlbGV0ZURpcmVjdG9yaWVzOiBvcHRpb25zLmRlbGV0ZURpcmVjdG9yaWVzLFxuICAgICAgZGVsZXRlRmlsZXM6IG9wdGlvbnMuZGVsZXRlRmlsZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXIoXG4gICAgZXhpc3RpbmdSZWNlaXZlcjogU2NlbmFyaW9SZWNlaXZlck5vZGUsXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXMgPSBtYXBFZGdlcyhcbiAgICAgIGV4aXN0aW5nUmVjZWl2ZXIucmVjZWl2ZXJJdGVtcy5yZWNlaXZlckRpcmVjdG9yaWVzXG4gICAgKS5tYXAoKHsgYWNjZXNzUm9sZSwgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbiwgZGlyZWN0b3J5IH0pID0+ICh7XG4gICAgICBhY2Nlc3NSb2xlLFxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICBkaXJlY3RvcnlLZXlJZDogZGlyZWN0b3J5LmtleUlkLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHVwZGF0ZUZpbGVzID0gbWFwRWRnZXMoXG4gICAgICBleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJGaWxlc1xuICAgICkubWFwKCh7IGFjY2Vzc1JvbGUsIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sIGZpbGUgfSkgPT4gKHtcbiAgICAgIGFjY2Vzc1JvbGUsXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgZmlsZUlkOiBmaWxlLmlkLFxuICAgICAgZmlsZUtleUlkOiBmaWxlLmtleUlkLFxuICAgIH0pKTtcblxuICAgIC8vIEZpbGwgaXQgaW4gd2l0aCBleGlzdGluZyByZWNlaXZlci5cbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgICB7XG4gICAgICAgIHRwSWQ6IGV4aXN0aW5nUmVjZWl2ZXIudHAuaWQsXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb246IGV4aXN0aW5nUmVjZWl2ZXIuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXMsXG4gICAgICAgIHVwZGF0ZUZpbGVzLFxuICAgICAgfSxcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgZXhpc3RpbmdSZWNlaXZlclxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVFeGlzdGluZ1JlY2VpdmVycyhcbiAgICBleGlzdGluZ1JlY2VpdmVyczogU2NlbmFyaW9SZWNlaXZlck5vZGVbXSxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBleGlzdGluZ1JlY2VpdmVycy5tYXAoKGV4aXN0aW5nUmVjZWl2ZXIpID0+XG4gICAgICAgIHRoaXMucHJlcGFyZUV4aXN0aW5nUmVjZWl2ZXIoZXhpc3RpbmdSZWNlaXZlciwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KG9wdGlvbnM6IENyZWF0ZVBhcnRpY2lwYW50T3B0aW9ucykge1xuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFdpdGhOZXdLZXkoXG4gICAgICBvcHRpb25zLnRwU2hhcmVkS2V5SWQsXG4gICAgICBvcHRpb25zLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24gfHwgJydcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRLZXksXG4gICAgICBtdXRhdGlvbklucHV0OiB7XG4gICAgICAgIHRwSWQ6IG9wdGlvbnMudHBJZCxcbiAgICAgICAgdHBTaGFyZWRLZXlJZDogb3B0aW9ucy50cFNoYXJlZEtleUlkLFxuICAgICAgICB0cFNoYXJlZEtleVdyYXBwZWRTaGFyZWRLZXk6IHNoYXJlZEtleS53cmFwcGVkS2V5LFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhOiBzaGFyZWRLZXkuY2lwaGVyLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgb3B0aW9uczogUGFydGljaXBhbnRPcHRpb25zLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRKd2tLZXkoc2hhcmVkS2V5SWQpO1xuXG4gICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgb3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaGFyZWRLZXksXG4gICAgICBtdXRhdGlvbklucHV0OiB7XG4gICAgICAgIHRwSWQ6IG9wdGlvbnMudHBJZCxcbiAgICAgICAgc2hhcmVkS2V5SWQsXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGEsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVDbGFpbWFudChvcHRpb25zOiBDcmVhdGVDbGFpbWFudE9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZUNyZWF0ZVBhcnRpY2lwYW50KG9wdGlvbnMpO1xuICAgIHJldHVybiBtdXRhdGlvbklucHV0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlVXBkYXRlQ2xhaW1hbnQoXG4gICAgb3B0aW9uczogVXBkYXRlQ2xhaW1hbnRPcHRpb25zLFxuICAgIHNoYXJlZEtleUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgY29uc3QgeyBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVVcGRhdGVQYXJ0aWNpcGFudChcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzaGFyZWRLZXlJZFxuICAgICk7XG5cbiAgICByZXR1cm4gbXV0YXRpb25JbnB1dDtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVSZWNlaXZlQ2xhaW0yKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgLy8gR2V0IGFsbCB0aGUgc2hhcmVkIGl0ZW1zXG4gICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpXG4gICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAgIGlmIChzaGFyZWRTY2VuYXJpby5zdGF0ZSAhPT0gU2NlbmFyaW9TdGF0ZS5BUFBST1ZFRCkge1xuICAgICAgdGhyb3dDbGFpbU5vdEFwcHJvdmVkKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwcm92YWxzID0gbWFwRWRnZXMoXG4gICAgICBzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5hc0NsYWltUmVjZWl2ZXIuYXBwcm92YWxzXG4gICAgKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5yZWNvdmVyQXNzZW1ibHlLZXkoYXBwcm92YWxzKTtcblxuICAgIC8vIFdyYXAgYXNzZW1ibHkga2V5IHdpdGggc2hhcmVkIGtleS5cbiAgICAvLz8/P1xuICAgIC8vIFRoaXMgc2hhcmVkS2V5IGlzIGNyZWF0ZWQganVzdCBmb3IgdGhpcyBzY2VuYXJpby4gSXQncyB3cmFwcGVkIGJ5IHRoZSB0cFNoYXJlZEtleS5cbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShcbiAgICAgIHNoYXJlZFNjZW5hcmlvLmFzUmVjZWl2ZXIuc2hhcmVkS2V5LmlkXG4gICAgKTtcblxuICAgIGNvbnN0IHNoYXJlZEtleVdyYXBwZWRBc3NlbWJseUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc2hhcmVkS2V5LFxuICAgICAgYXNzZW1ibHlLZXkudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzY2VuYXJpb0NsYWltSWQ6IHNoYXJlZENsYWltSWQsXG4gICAgICBzaGFyZWRLZXlXcmFwcGVkQXNzZW1ibHlLZXksXG4gICAgICBzaGFyZWRLZXlJZDogc2hhcmVkS2V5LmlkLFxuICAgICAgYXNzZW1ibHlLZXlJZDogc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uYXNDbGFpbVJlY2VpdmVyLmFzc2VtYmx5S2V5SWQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHByZXBhcmVSZWNlaXZlQ2xhaW0oc2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICAvLyBHZXQgYWxsIHRoZSBzaGFyZWQgaXRlbXNcbiAgICBjb25zdCBzaGFyZWRTY2VuYXJpbyA9IChcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2hhcmVkU2NlbmFyaW8oc2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZClcbiAgICApLnNoYXJlZFNjZW5hcmlvO1xuXG4gICAgaWYgKHNoYXJlZFNjZW5hcmlvLnN0YXRlICE9PSBTY2VuYXJpb1N0YXRlLkFQUFJPVkVEKSB7XG4gICAgICB0aHJvd0NsYWltTm90QXBwcm92ZWQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHByb3ZhbHMgPSBtYXBFZGdlcyhcbiAgICAgIHNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmFzQ2xhaW1SZWNlaXZlci5hcHByb3ZhbHNcbiAgICApO1xuXG4gICAgY29uc3QgYXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLnJlY292ZXJBc3NlbWJseUtleShhcHByb3ZhbHMpO1xuXG4gICAgLy8gRGVjcnlwdCBhbGwgaXRlbXNcbiAgICBjb25zdCByZWNlaXZlckRpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBzaGFyZWRTY2VuYXJpby5hc1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJEaXJlY3Rvcmllcy5lZGdlc1xuICAgICAgICAubWFwKChlZGdlKSA9PiBlZGdlLm5vZGUpXG4gICAgICAgIC5tYXAoYXN5bmMgKHJlY2VpdmVyRGlyZWN0b3J5KSA9PiB7XG4gICAgICAgICAgY29uc3Qgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgICAgIHJlY2VpdmVyRGlyZWN0b3J5LndyYXBwZWRJdGVtS2V5XG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWNlaXZlckRpcmVjdG9yeUlkOiByZWNlaXZlckRpcmVjdG9yeS5pZCxcbiAgICAgICAgICAgIC8vIExvb2tzIGxpa2UgcmVjZWl2ZXJEaXJlY3Rvcnkud3JhcHBlZEl0ZW1LZXkgaGFzIG5vIG90aGVyIGNvbnRlbnQgaW4gc2lkZSBpdCBleGNlcHQgYSB3cmFwcGVkIGtleS5cbiAgICAgICAgICAgIC8vIFNvIHdlIGNhbiB0dXJuIHRoaXMgaW4gdG8gYSBkb3VibHkgd3JhcHBlZCBrZXkgYW5kIGp1c3QgcmVsZWFzZSB0aGUgYXNzZW1ibHkga2V5LlxuXG4gICAgICAgICAgICByZWNlaXZlclNoYXJlZEtleVdyYXBwZWRJdGVtS2V5OiB3cmFwcGVkSXRlbUtleSwgLy8gdGhlIHdyYXBwZWRJdGVtS2V5IGlzIGFscmVhZHkgd3JhcHBlZCBieSByZWNlaXZlclNoYXJlZEtleVxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzY2VuYXJpb0NsYWltSWQ6IHNoYXJlZENsYWltSWQsXG4gICAgICByZWNlaXZlckRpcmVjdG9yaWVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY292ZXJBc3NlbWJseUtleShcbiAgICBhcHByb3ZhbHM6IFNoYXJlZFNjZW5hcmlvQ2xhaW1SZWNlaXZlZEFwcHJvdmFsTm9kZVtdXG4gICkge1xuICAgIGNvbnN0IHBhcnRpYWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBhcHByb3ZhbHMubWFwKChhcHByb3ZhbCkgPT5cbiAgICAgICAgdGhpcy5rZXlHcmFwaC5kZWNyeXB0RnJvbVN0cmluZzxQYXJ0aWFsQXNzZW1ibHlLZXk+KFxuICAgICAgICAgIGFwcHJvdmFsLnB4ay5pZCxcbiAgICAgICAgICBhcHByb3ZhbC5yZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFzc2VtYmx5Q29udHJvbGxlci5yZWNvdmVyQXNzZW1ibHlLZXkocGFydGlhbHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhc0NsYWltQXBwcm92ZXJzKFxuICAgIHNoYXJlZFNjZW5hcmlvSWQsXG4gICAgY2xhaW1JZCxcbiAgICBzdGF0ZTogVHBDbGFpbUFwcHJvdmVyU3RhdGVcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNoYXJlZFNjZW5hcmlvSWQsIGNsYWltSWQpXG4gICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAgIHJldHVybiBtYXBFZGdlcyhzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5jbGFpbS5hc0NsYWltQXBwcm92ZXJzKS5maWx0ZXIoXG4gICAgICAoYXNDbGFpbUFwcHJvdmVyKSA9PiBhc0NsYWltQXBwcm92ZXIuc3RhdGUgPT09IHN0YXRlXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVDbGFpbU11dGF0aW9ucyhcbiAgICBzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsXG4gICAgY2xhaW1JZDogc3RyaW5nXG4gICkge1xuICAgIC8vIFRoZSBjdXJyZW50IHVzZXIgbWF5IGJlIGFjdGluZyBhcyBhcHByb3ZlcnMgaW4gbXVsdGlwbGUgc3ViLWFzc2VtYmxpZXMgc29cbiAgICAvLyB3ZSBhcHByb3ZlIHRoZW0gYWxsLlxuICAgIGNvbnN0IGFzQ2xhaW1BcHByb3ZlcnMgPSBhd2FpdCB0aGlzLmFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZCxcbiAgICAgIFRwQ2xhaW1BcHByb3ZlclN0YXRlLkNMQUlNRURcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzQ2xhaW1BcHByb3ZlcnMubWFwKFxuICAgICAgYXN5bmMgKGFzQ2xhaW1BcHByb3ZlcikgPT5cbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBBcHByb3ZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgaW5wdXQ6IGF3YWl0IHRoaXMucHJlcGFyZUFwcHJvdmVDbGFpbShhc0NsYWltQXBwcm92ZXIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVDbGFpbShcbiAgICBhc0NsYWltQXBwcm92ZXI6IFNoYXJlZFRwQ2xhaW1BcHByb3Zlck5vZGVcbiAgKSB7XG4gICAgY29uc3QgcmVjZWl2ZXJBcHByb3ZhbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1hcEVkZ2VzKGFzQ2xhaW1BcHByb3Zlci5yZWNlaXZlckFwcHJvdmFscykubWFwKChyZWNlaXZlckFwcHJvdmFsKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVSZWNlaXZlckFwcHJvdmFsKHtcbiAgICAgICAgICByZWNlaXZlckFwcHJvdmFsSWQ6IHJlY2VpdmVyQXBwcm92YWwuaWQsXG4gICAgICAgICAgcmVjZWl2ZXJBcHByb3ZhbFB4a0lkOiByZWNlaXZlckFwcHJvdmFsLnB4ay5pZCxcbiAgICAgICAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb246XG4gICAgICAgICAgICBhc0NsYWltQXBwcm92ZXIuc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2xhaW1BcHByb3ZlcklkOiBhc0NsYWltQXBwcm92ZXIuaWQsXG4gICAgICByZWNlaXZlckFwcHJvdmFscyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJBcHByb3ZhbChvcHRpb25zOiB7XG4gICAgcmVjZWl2ZXJBcHByb3ZhbElkOiBzdHJpbmc7XG4gICAgcmVjZWl2ZXJBcHByb3ZhbFB4a0lkOiBzdHJpbmc7XG4gICAgc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uOiBKU09OT2JqZWN0O1xuICB9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlY2VpdmVyQXBwcm92YWxJZDogb3B0aW9ucy5yZWNlaXZlckFwcHJvdmFsSWQsXG4gICAgICAvLyBUT0RPIGFsbG93IHNlbmRpbmcgb2YgbWVzc2FnZXMgdG8gcmVjZWl2ZXIuXG4gICAgICByZWNlaXZlckNpcGhlcjogJycsXG4gICAgICByZWNlaXZlckNpcGhlclBhcnRpYWxBc3NlbWJseUtleTogYXdhaXQgdGhpcy5rZXlHcmFwaC5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICAgIG9wdGlvbnMucmVjZWl2ZXJBcHByb3ZhbFB4a0lkLFxuICAgICAgICBvcHRpb25zLnNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvblxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVqZWN0Q2xhaW1NdXRhdGlvbnMoXG4gICAgc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLFxuICAgIGNsYWltSWQ6IHN0cmluZ1xuICApIHtcbiAgICAvLyBUaGUgY3VycmVudCB1c2VyIG1heSBiZSBhY3RpbmcgYXMgYXBwcm92ZXJzIGluIG11bHRpcGxlIHN1Yi1hc3NlbWJsaWVzIHNvXG4gICAgLy8gd2UgcmVqZWN0IHRoZW0gYWxsLlxuICAgIGNvbnN0IGFzQ2xhaW1BcHByb3ZlcnMgPSBhd2FpdCB0aGlzLmFzQ2xhaW1BcHByb3ZlcnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgY2xhaW1JZCxcbiAgICAgIFRwQ2xhaW1BcHByb3ZlclN0YXRlLkNMQUlNRURcbiAgICApO1xuXG4gICAgcmV0dXJuIGFzQ2xhaW1BcHByb3ZlcnMubWFwKFxuICAgICAgYXN5bmMgKGFzQ2xhaW1BcHByb3ZlcikgPT5cbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBSZWplY3RTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpbnB1dDogeyBjbGFpbUFwcHJvdmVySWQ6IGFzQ2xhaW1BcHByb3Zlci5pZCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
675
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmFyaW8uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xpYi9zY2VuYXJpby9zY2VuYXJpby5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBRWhCLFFBQVEsRUFHUixhQUFhLEVBR2Isb0JBQW9CLEdBRXJCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXRFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFDTCw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQixzQkFBc0IsRUFDdEIsZ0NBQWdDLEVBQ2hDLHNCQUFzQixFQUN0Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHNCQUFzQixHQUN2QixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxh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QyxnQkFBZ0IsQ0FDbEQsZ0JBQWdCLEVBQ2hCLE9BQU8sRUFDUCxvQkFBb0IsQ0FBQyxPQUFPLENBQzdCLENBQUM7WUFFRixPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FDekIsQ0FBTyxlQUFlLEVBQUUsRUFBRTtnQkFDeEIsT0FBQSxJQUFJLFVBQVUsQ0FBQztvQkFDYixRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxTQUFTLEVBQUU7d0JBQ1QsS0FBSyxFQUFFLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUU7cUJBQy9DO2lCQUNGLENBQUMsQ0FBQTtjQUFBLENBQ0wsQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGLENBQUE7QUEzNEJlLGlDQUFpQixHQUFHLFdBQVcsQ0FBQzs7O1lBZC9DLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBdEU4QixNQUFNO1lBQWhCLFFBQVE7WUFrQnBCLGVBQWU7WUFGZixXQUFXO1lBV1gsMEJBQTBCO1lBWjFCLGlCQUFpQjs7QUF3RGIsZUFBZTtJQU4zQixpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcsZUFBZSxDQXM1QjNCO1NBdDVCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSldLIH0gZnJvbSAnbm9kZS1qb3NlJztcbmltcG9ydCB7IExyTWVyZ2VkTXV0YXRpb24sIExyTXV0YXRpb24sIExyU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1ncmFwaHFsJztcbmltcG9ydCB7XG4gIEFjY2Vzc1JvbGVDaG9pY2UsXG4gIEpTT05PYmplY3QsXG4gIG1hcEVkZ2VzLFxuICBTY2VuYXJpb05vZGUsXG4gIFNjZW5hcmlvUmVjZWl2ZXJOb2RlLFxuICBTY2VuYXJpb1N0YXRlLFxuICBTaGFyZWRTY2VuYXJpb0NsYWltUmVjZWl2ZWRBcHByb3ZhbE5vZGUsXG4gIFNoYXJlZFRwQ2xhaW1BcHByb3Zlck5vZGUsXG4gIFRwQ2xhaW1BcHByb3ZlclN0YXRlLFxuICBUcE5vZGUsXG59IGZyb20gJy4uL2FwaS90eXBlcyc7XG5pbXBvcnQgeyBFbmNyeXB0aW9uU2VydmljZSB9IGZyb20gJy4uL2VuY3J5cHRpb24vZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEl0ZW1TZXJ2aWNlIH0gZnJvbSAnLi4vaXRlbS9pdGVtLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWRLZXlQYWlyIH0gZnJvbSAnLi4vaXRlbS9pdGVtLnR5cGVzJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2tleS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBUcHNLZXlzUXVlcnkgfSBmcm9tICcuLi90cC1hc3NlbWJseS90cC1hc3NlbWJseS5wcml2YXRlLmdxbCc7XG5pbXBvcnQgeyBQYXJ0aWFsQXNzZW1ibHlLZXkgfSBmcm9tICcuLi90cC1hc3NlbWJseS90cC1hc3NlbWJseS50eXBlcyc7XG5pbXBvcnQge1xuICBLY0JhZEFyZ3VtZW50RXhjZXB0aW9uLFxuICBLY0JhZFN0YXRlRXhjZXB0aW9uLFxufSBmcm9tICcuLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgUnVuT3V0c2lkZUFuZ3VsYXIgfSBmcm9tICcuLi9fY29tbW9uL3J1bi1vdXRzaWRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgYXNzZXJ0X3hvciB9IGZyb20gJy4uL19jb21tb24vdXRpbHMnO1xuaW1wb3J0IHsgU2NlbmFyaW9Bc3NlbWJseUNvbnRyb2xsZXIgfSBmcm9tICcuL3NjZW5hcmlvLmNvbnRyb2xsZXInO1xuaW1wb3J0IHtcbiAgQXBwcm92ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgQ2FuY2VsU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBDcmVhdGVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIENyZWF0ZVNjZW5hcmlvTXV0YXRpb24sXG4gIERlYnVnRXhwaXJlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBEZWxldGVTY2VuYXJpb011dGF0aW9uLFxuICBSZWNlaXZlU2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICBSZWplY3RTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gIFVwZGF0ZVNjZW5hcmlvTXV0YXRpb24sXG59IGZyb20gJy4vc2NlbmFyaW8uZ3FsJztcbmltcG9ydCB7IFNjZW5hcmlvUXVlcnksIFNoYXJlZFNjZW5hcmlvUXVlcnkgfSBmcm9tICcuL3NjZW5hcmlvLnByaXZhdGUuZ3FsJztcbmltcG9ydCB7XG4gIENyZWF0ZUNsYWltYW50T3B0aW9ucyxcbiAgQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zLFxuICBDcmVhdGVSZWNlaXZlck9wdGlvbnMsXG4gIENyZWF0ZVNjZW5hcmlvT3B0aW9ucyxcbiAgUGFydGljaXBhbnRPcHRpb25zLFxuICBSZWNlaXZlckRpcmVjdG9yeU9wdGlvbnMsXG4gIFJlY2VpdmVyRmlsZU9wdGlvbnMsXG4gIFJlY2VpdmVySXRlbU9wdGlvbnMsXG4gIFJlc2V0U2NlbmFyaW9PcHRpb25zLFxuICBVcGRhdGVDbGFpbWFudE9wdGlvbnMsXG4gIFVwZGF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgVXBkYXRlU2NlbmFyaW9PcHRpb25zLFxufSBmcm9tICcuL3NjZW5hcmlvLnR5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRocm93Q2xhaW1JZE1pc21hdGNoKCkge1xuICB0aHJvdyBuZXcgS2NCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAnY2xhaW1JZCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBjdXJyZW50IGNsYWltSWQgb2YgdGhlIHNjZW5hcmlvJ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dDbGFpbU5vdEFwcHJvdmVkKCkge1xuICB0aHJvdyBuZXcgS2NCYWRTdGF0ZUV4Y2VwdGlvbignU2NlbmFyaW8gY2xhaW0gaGFzIG5vdCBiZWVuIGFwcHJvdmVkJyk7XG59XG5cbkBSdW5PdXRzaWRlQW5ndWxhcih7XG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxufSlcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY2VuYXJpb1NlcnZpY2UgZXh0ZW5kcyBMclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUga2V5R3JhcGg6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIGl0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcbiAgICBwcml2YXRlIGFzc2VtYmx5Q29udHJvbGxlcjogU2NlbmFyaW9Bc3NlbWJseUNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG4gIHB1YmxpYyBzdGF0aWMgU0xJUDM5X1BBU1NQSFJBU0UgPSAnbGlmZXJlYWR5JztcblxuICBwcml2YXRlIHByZXBhcmVBZGRSZWNlaXZlckRpcmVjdG9yeSA9IHRoaXMucHJlcGFyZVJlY2VpdmVyRGlyZWN0b3J5O1xuICBwcml2YXRlIHByZXBhcmVVcGRhdGVSZWNlaXZlckRpcmVjdG9yeSA9IHRoaXMucHJlcGFyZVJlY2VpdmVyRGlyZWN0b3J5O1xuXG4gIHByaXZhdGUgcHJlcGFyZUFkZFJlY2VpdmVyRmlsZSA9IHRoaXMucHJlcGFyZVJlY2VpdmVyRmlsZTtcbiAgcHJpdmF0ZSBwcmVwYXJlVXBkYXRlUmVjZWl2ZXJGaWxlID0gdGhpcy5wcmVwYXJlUmVjZWl2ZXJGaWxlO1xuXG4gIC8vIFNjZW5hcmlvc1xuICBhc3luYyBjcmVhdGVTY2VuYXJpbyhvcHRpb25zOiBDcmVhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogQ3JlYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3QgaW5wdXQgPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpO1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ3JlYXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVTY2VuYXJpbyhvcHRpb25zOiBVcGRhdGVTY2VuYXJpb09wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogVXBkYXRlU2NlbmFyaW9PcHRpb25zKSB7XG4gICAgY29uc3Qgc2NlbmFyaW8gPSAoYXdhaXQgdGhpcy5nZXRTY2VuYXJpbyhvcHRpb25zLnNjZW5hcmlvSWQpKS5zY2VuYXJpbztcbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVNjZW5hcmlvKG9wdGlvbnMsIHNjZW5hcmlvKTtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVNjZW5hcmlvTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVzZXRTY2VuYXJpbyhvcHRpb25zOiBSZXNldFNjZW5hcmlvT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJlc2V0U2NlbmFyaW9NdXRhdGlvbihvcHRpb25zKSk7XG4gIH1cblxuICBhc3luYyByZXNldFNjZW5hcmlvTXV0YXRpb24ob3B0aW9uczogUmVzZXRTY2VuYXJpb09wdGlvbnMpIHtcbiAgICBjb25zdCBzY2VuYXJpbyA9IChhd2FpdCB0aGlzLmdldFNjZW5hcmlvKG9wdGlvbnMuc2NlbmFyaW9JZCkpLnNjZW5hcmlvO1xuXG4gICAgY29uc3QgeyBhc3NlbWJseSB9ID0gc2NlbmFyaW87XG5cbiAgICAvLyBKdXN0IG5lZWQgdG8gZG8gYW4gdXBkYXRlIHdpdGhvdXQgY2hhbmdpbmcgYXBwcm92ZXJzLiBUaGlzIHdpbGwgcmVjcmVhdGVcbiAgICAvLyBhbGwgYXNzZW1ibHkga2V5cy5cbiAgICBjb25zdCB1cGRhdGVTdWJBc3NlbWJsaWVzID0gbWFwRWRnZXMoYXNzZW1ibHkuc3ViQXNzZW1ibGllcykubWFwKChzYSkgPT4ge1xuICAgICAgY29uc3QgYXBwcm92ZXJUcHMgPSBtYXBFZGdlcyhzYS5hcHByb3ZlcnMpLm1hcCgoYXBwcm92ZXIpID0+ICh7XG4gICAgICAgIHRwSWQ6IGFwcHJvdmVyLnRwLmlkLFxuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogc2EuaWQsXG4gICAgICAgIHF1b3J1bTogc2EucXVvcnVtLFxuICAgICAgICBzaW5nbGVSZWplY3Q6IHNhLnNpbmdsZVJlamVjdCxcbiAgICAgICAgc3ViamVjdENpcGhlckRhdGFDbGVhckpzb246IHNhLnN1YmplY3RDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgICBhcHByb3ZlclRwcyxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dCA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVNjZW5hcmlvKFxuICAgICAge1xuICAgICAgICBzY2VuYXJpb0lkOiBvcHRpb25zLnNjZW5hcmlvSWQsXG4gICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuZW5hYmxlZCxcbiAgICAgICAgdXBkYXRlQXNzZW1ibHk6IHtcbiAgICAgICAgICBxdW9ydW06IGFzc2VtYmx5LnF1b3J1bSxcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IGFzc2VtYmx5LnNpbmdsZVJlamVjdCxcbiAgICAgICAgICB1cGRhdGVTdWJBc3NlbWJsaWVzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHNjZW5hcmlvXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlU2NlbmFyaW9NdXRhdGlvbiwgLy8gdXBkYXRpbmcgc2NlbmFyaW8gcmVzZXRzIGl0XG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlU2NlbmFyaW8oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubHJHcmFwaFFMLmxyTXV0YXRlKHRoaXMuZGVsZXRlU2NlbmFyaW9NdXRhdGlvbihzY2VuYXJpb0lkKSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVTY2VuYXJpb011dGF0aW9uKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlU2NlbmFyaW9NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczogeyBpbnB1dDogeyBzY2VuYXJpb0lkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIENsYWltc1xuICBhc3luYyBjcmVhdGVDbGFpbShzY2VuYXJpb0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jcmVhdGVDbGFpbU11dGF0aW9uKHNjZW5hcmlvSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQ6IHsgc2NlbmFyaW9JZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBjYW5jZWxDbGFpbShjbGFpbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jYW5jZWxDbGFpbU11dGF0aW9uKGNsYWltSWQpKTtcbiAgfVxuXG4gIGFzeW5jIGNhbmNlbENsYWltTXV0YXRpb24oY2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDYW5jZWxTY2VuYXJpb0NsYWltTXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHsgaW5wdXQ6IHsgY2xhaW1JZCB9IH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyByZWplY3RDbGFpbShzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLnJlamVjdENsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZCwgY2xhaW1JZCkpO1xuICB9XG5cbiAgYXN5bmMgcmVqZWN0Q2xhaW1NdXRhdGlvbihzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIGNsYWltSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG11dGF0aW9ucyA9IGF3YWl0IHRoaXMucHJlcGFyZVJlamVjdENsYWltTXV0YXRpb25zKFxuICAgICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICAgIGNsYWltSWRcbiAgICApO1xuICAgIHJldHVybiBMck1lcmdlZE11dGF0aW9uLmNyZWF0ZShhd2FpdCBQcm9taXNlLmFsbChtdXRhdGlvbnMpKTtcbiAgfVxuXG4gIGFzeW5jIGFwcHJvdmVDbGFpbShzaGFyZWRTY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIC8vIFRPRE8gdGhpcyBuZWVkcyBhIGNhc3Qgc28gdGhlIHJlc3VsdCBpcyBub3QgQU5ZLlxuICAgIHJldHVybiB0aGlzLm11dGF0ZShcbiAgICAgIHRoaXMuYXBwcm92ZUNsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZCwgc2hhcmVkQ2xhaW1JZClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYXBwcm92ZUNsYWltTXV0YXRpb24oc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLCBzaGFyZWRDbGFpbUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtdXRhdGlvbnMgPSBhd2FpdCB0aGlzLnByZXBhcmVBcHByb3ZlQ2xhaW1NdXRhdGlvbnMoXG4gICAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgICAgc2hhcmVkQ2xhaW1JZFxuICAgICk7XG4gICAgcmV0dXJuIExyTWVyZ2VkTXV0YXRpb24uY3JlYXRlKGF3YWl0IFByb21pc2UuYWxsKG11dGF0aW9ucykpO1xuICB9XG5cbiAgYXN5bmMgcmVjZWl2ZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMucmVjZWl2ZUNsYWltMk11dGF0aW9uKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpKTtcbiAgfVxuXG4gIGFzeW5jIHJlY2VpdmVDbGFpbTJNdXRhdGlvbihzY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogUmVjZWl2ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogYXdhaXQgdGhpcy5wcmVwYXJlUmVjZWl2ZUNsYWltMihzY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWJ1Z0V4cGlyZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlYnVnRXhwaXJlQ2xhaW1NdXRhdGlvbihzY2VuYXJpb0lkKSk7XG4gIH1cblxuICBhc3luYyBkZWJ1Z0V4cGlyZUNsYWltTXV0YXRpb24oc2NlbmFyaW9JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBEZWJ1Z0V4cGlyZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogeyBzY2VuYXJpb0lkIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gSGVscGVyc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICBwcml2YXRlIGFzeW5jIGdldFNjZW5hcmlvKHNjZW5hcmlvSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KHtcbiAgICAgIHF1ZXJ5OiBTY2VuYXJpb1F1ZXJ5LFxuICAgICAgdmFyaWFibGVzOiB7IHNjZW5hcmlvSWQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U2hhcmVkU2NlbmFyaW8oc2NlbmFyaW9JZDogc3RyaW5nLCBjbGFpbUlkPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmV0ID0gYXdhaXQgdGhpcy5xdWVyeSh7XG4gICAgICBxdWVyeTogU2hhcmVkU2NlbmFyaW9RdWVyeSxcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBzY2VuYXJpb0lkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChjbGFpbUlkICYmIHJldC5zaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5pZCAhPT0gY2xhaW1JZCkge1xuICAgICAgdGhyb3dDbGFpbUlkTWlzbWF0Y2goKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRQYXJ0aWNpcGFudFRwc0tleXMob3B0aW9uczogQ3JlYXRlUGFydGljaXBhbnRPcHRpb25zW10pIHtcbiAgICBjb25zdCB0cElkcyA9IG9wdGlvbnMubWFwKCh4KSA9PiB4LnRwSWQpO1xuXG4gICAgLy8gVGhpcyBzaG91bGQgY29udGFpbiBhbGwgdGhlIFRQcyB0aGF0IHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhc3NlbWJseS5cbiAgICBjb25zdCB0cHMgPSBtYXBFZGdlcyhcbiAgICAgIChcbiAgICAgICAgYXdhaXQgdGhpcy5sckdyYXBoUUwucXVlcnkoe1xuICAgICAgICAgIHF1ZXJ5OiBUcHNLZXlzUXVlcnksXG4gICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICBpZHM6IHRwSWRzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApLnRwc1xuICAgICk7XG5cbiAgICByZXR1cm4gdHBzO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWxsVHBTaGFyZWRLZXlJZChcbiAgICBvcHRpb25zOiBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnNbXSxcbiAgICB0cHM6IFRwTm9kZVtdXG4gICkge1xuICAgIG9wdGlvbnMuZm9yRWFjaCgocGFydGljaXBhbnQpID0+IHtcbiAgICAgIGlmICghcGFydGljaXBhbnQudHBTaGFyZWRLZXlJZCkge1xuICAgICAgICBjb25zdCB0cCA9IHRwcy5maW5kKCh4KSA9PiB4LmlkID09PSBwYXJ0aWNpcGFudC50cElkKTtcbiAgICAgICAgcGFydGljaXBhbnQudHBTaGFyZWRLZXlJZCA9XG4gICAgICAgICAgdHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleS5zaGFyZWRLZXkuaWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVTY2VuYXJpb011dGF0aW9uKG9wdGlvbnM6IENyZWF0ZVNjZW5hcmlvT3B0aW9ucykge1xuICAgIGNvbnN0IHsgYXNzZW1ibHlLZXksIG11dGF0aW9uSW5wdXQ6IGNyZWF0ZUFzc2VtYmx5IH0gPVxuICAgICAgYXdhaXQgdGhpcy5hc3NlbWJseUNvbnRyb2xsZXIucHJlcGFyZUNyZWF0ZShvcHRpb25zLmNyZWF0ZUFzc2VtYmx5KTtcblxuICAgIGNvbnN0IGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMgPSBvcHRpb25zLmNyZWF0ZVJlY2VpdmVycyB8fCBbXTtcbiAgICBjb25zdCBjcmVhdGVDbGFpbWFudHNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVDbGFpbWFudHMgfHwgW107XG5cbiAgICAvLyBGZXRjaCBhbGwgdGhlIFRQcyBzbyB3ZSBkb24ndCBoYXZlIHRvIHBhc3MgaW4gdHBTaGFyZWRLZXlJZFxuICAgIGNvbnN0IGNyZWF0UGFydGljaXBhbnRzT3B0aW9ucyA9IGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMuY29uY2F0KFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCB0cHMgPSBhd2FpdCB0aGlzLmdldFBhcnRpY2lwYW50VHBzS2V5cyhjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMpO1xuXG4gICAgdGhpcy5maWxsVHBTaGFyZWRLZXlJZChjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMsIHRwcyk7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNyZWF0ZVJlY2VpdmVyc09wdGlvbnMubWFwKChyZWNlaXZlcikgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlQ3JlYXRlUmVjZWl2ZXIocmVjZWl2ZXIsIGFzc2VtYmx5S2V5KVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBjcmVhdGVDbGFpbWFudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNyZWF0ZUNsYWltYW50c09wdGlvbnMubWFwKCh4KSA9PiB0aGlzLnByZXBhcmVDcmVhdGVDbGFpbWFudCh4KSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuZW5hYmxlZCxcbiAgICAgIGNyZWF0ZUFzc2VtYmx5LFxuICAgICAgY3JlYXRlUmVjZWl2ZXJzLFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVTY2VuYXJpbyhcbiAgICBvcHRpb25zOiBVcGRhdGVTY2VuYXJpb09wdGlvbnMsXG4gICAgc2NlbmFyaW86IFNjZW5hcmlvTm9kZVxuICApIHtcbiAgICBsZXQgYXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEp3a0tleShcbiAgICAgIHNjZW5hcmlvLmFzc2VtYmx5LmFzc2VtYmx5S2V5LmlkXG4gICAgKTtcblxuICAgIGNvbnN0IHVwZGF0ZUFzc2VtYmx5ID0gb3B0aW9ucy51cGRhdGVBc3NlbWJseVxuICAgICAgPyBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEFzc2VtYmx5IGtleSBpcyBhbHdheXMgcm90YXRlZCB3aGVuIHVwZGF0aW5nIGFzc2VtYmx5LlxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXNzZW1ibHlDb250cm9sbGVyLnByZXBhcmVVcGRhdGUoXG4gICAgICAgICAgICBvcHRpb25zLnVwZGF0ZUFzc2VtYmx5LFxuICAgICAgICAgICAgc2NlbmFyaW8uYXNzZW1ibHlcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIFVzZSBuZXcgYXNzZW1ibHkga2V5LlxuICAgICAgICAgIGFzc2VtYmx5S2V5ID0gcmVzdWx0LmFzc2VtYmx5S2V5O1xuICAgICAgICAgIHJldHVybiByZXN1bHQubXV0YXRpb25JbnB1dDtcbiAgICAgICAgfSkoKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBjcmVhdGVSZWNlaXZlcnNPcHRpb25zID0gb3B0aW9ucy5jcmVhdGVSZWNlaXZlcnMgfHwgW107XG4gICAgY29uc3QgY3JlYXRlQ2xhaW1hbnRzT3B0aW9ucyA9IG9wdGlvbnMuY3JlYXRlQ2xhaW1hbnRzIHx8IFtdO1xuXG4gICAgLy8gRmV0Y2ggYWxsIHRoZSBUUHMgc28gd2UgZG9uJ3QgaGF2ZSB0byBwYXNzIGluIHRwU2hhcmVkS2V5SWRcbiAgICBjb25zdCBjcmVhdFBhcnRpY2lwYW50c09wdGlvbnMgPSBjcmVhdGVSZWNlaXZlcnNPcHRpb25zLmNvbmNhdChcbiAgICAgIGNyZWF0ZUNsYWltYW50c09wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgdHBzID0gYXdhaXQgdGhpcy5nZXRQYXJ0aWNpcGFudFRwc0tleXMoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zKTtcblxuICAgIHRoaXMuZmlsbFRwU2hhcmVkS2V5SWQoY3JlYXRQYXJ0aWNpcGFudHNPcHRpb25zLCB0cHMpO1xuXG4gICAgY29uc3QgY3JlYXRlUmVjZWl2ZXJzID1cbiAgICAgIG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuY3JlYXRlUmVjZWl2ZXJzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVDcmVhdGVSZWNlaXZlcih4LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBleGlzdGluZ1JlY2VpdmVycyA9IG1hcEVkZ2VzKHNjZW5hcmlvLnJlY2VpdmVycyk7XG4gICAgbGV0IHVwZGF0ZVJlY2VpdmVycyA9IG9wdGlvbnMudXBkYXRlUmVjZWl2ZXJzXG4gICAgICA/IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIG9wdGlvbnMudXBkYXRlUmVjZWl2ZXJzLm1hcCgodXBkYXRlUmVjZWl2ZXIpID0+IHtcbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJlY2VpdmVyIHdlIGFyZSB1cGRhdGluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSZWNlaXZlciA9IGV4aXN0aW5nUmVjZWl2ZXJzLmZpbmQoXG4gICAgICAgICAgICAgICh4KSA9PiB4LnRwLmlkID09PSB1cGRhdGVSZWNlaXZlci50cElkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXIoXG4gICAgICAgICAgICAgIHVwZGF0ZVJlY2VpdmVyLFxuICAgICAgICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgICAgICAgZXhpc3RpbmdSZWNlaXZlclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICA6IFtdO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyByZWNlaXZlcnMgd2hlbiB1cGRhdGluZyBhc3NlbWJseS5cbiAgICBpZiAob3B0aW9ucy51cGRhdGVBc3NlbWJseSkge1xuICAgICAgLy8gRmlsdGVyIG91dCB0aGUgcmVjZWl2ZXJzIHRoYXQgd2lsbCBiZSBkZWxldGVkIG9yIGFscmVhZHkgdXBkYXRlZC5cbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gZXhpc3RpbmdSZWNlaXZlcnMuZmlsdGVyKFxuICAgICAgICAoZXhpc3RpbmdSZWNlaXZlcikgPT5cbiAgICAgICAgICAhKG9wdGlvbnMuZGVsZXRlUmVjZWl2ZXJzIHx8IFtdKS5pbmNsdWRlcyhleGlzdGluZ1JlY2VpdmVyLnRwLmlkKSAmJlxuICAgICAgICAgICF1cGRhdGVSZWNlaXZlcnMuc29tZShcbiAgICAgICAgICAgICh1cGRhdGVSZWNlaXZlcikgPT4gdXBkYXRlUmVjZWl2ZXIudHBJZCA9PT0gZXhpc3RpbmdSZWNlaXZlci50cC5pZFxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgICB1cGRhdGVSZWNlaXZlcnMgPSB1cGRhdGVSZWNlaXZlcnMuY29uY2F0KFxuICAgICAgICBhd2FpdCB0aGlzLnByZXBhcmVFeGlzdGluZ1JlY2VpdmVycyhleGlzdGluZywgYXNzZW1ibHlLZXkpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZUNsYWltYW50cyA9XG4gICAgICBvcHRpb25zLmNyZWF0ZUNsYWltYW50cyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmNyZWF0ZUNsYWltYW50cy5tYXAoKHgpID0+IHRoaXMucHJlcGFyZUNyZWF0ZUNsYWltYW50KHgpKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBleGlzdGluZ0NsYWltYW50cyA9IG1hcEVkZ2VzKHNjZW5hcmlvLmNsYWltYW50cyk7XG4gICAgY29uc3QgdXBkYXRlQ2xhaW1hbnRzID1cbiAgICAgIG9wdGlvbnMudXBkYXRlQ2xhaW1hbnRzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMudXBkYXRlQ2xhaW1hbnRzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGNsYWltYW50IHdlIGFyZSB1cGRhdGluZ1xuICAgICAgICAgIGNvbnN0IGNsYWltYW50ID0gZXhpc3RpbmdDbGFpbWFudHMuZmluZChcbiAgICAgICAgICAgIChleGlzdGluZ0NsYWltYW50KSA9PiBleGlzdGluZ0NsYWltYW50LnRwLmlkID09PSB4LnRwSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVVcGRhdGVDbGFpbWFudCh4LCBjbGFpbWFudC5zaGFyZWRLZXkuaWQpO1xuICAgICAgICB9KVxuICAgICAgKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NlbmFyaW9JZDogb3B0aW9ucy5zY2VuYXJpb0lkLFxuICAgICAgZW5hYmxlZDogb3B0aW9ucy5lbmFibGVkLFxuICAgICAgdXBkYXRlQXNzZW1ibHksXG4gICAgICBjcmVhdGVSZWNlaXZlcnMsXG4gICAgICB1cGRhdGVSZWNlaXZlcnMsXG4gICAgICBkZWxldGVSZWNlaXZlcnM6IG9wdGlvbnMuZGVsZXRlUmVjZWl2ZXJzLFxuICAgICAgY3JlYXRlQ2xhaW1hbnRzLFxuICAgICAgdXBkYXRlQ2xhaW1hbnRzLFxuICAgICAgZGVsZXRlQ2xhaW1hbnRzOiBvcHRpb25zLmRlbGV0ZUNsYWltYW50cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJJdGVtKG9wdGlvbnM6IHtcbiAgICByZWNlaXZlckl0ZW1PcHRpb25zOiBSZWNlaXZlckl0ZW1PcHRpb25zO1xuICAgIHJlY2VpdmVyU2hhcmVkS2V5OiBKV0suS2V5O1xuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5O1xuICAgIGRpcmVjdG9yeT86IElkS2V5UGFpcjtcbiAgICBmaWxlPzogSWRLZXlQYWlyO1xuICB9KSB7XG4gICAgY29uc3Qge1xuICAgICAgcmVjZWl2ZXJJdGVtT3B0aW9ucyxcbiAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICBkaXJlY3RvcnksXG4gICAgICBmaWxlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgYXNzZXJ0X3hvcih7IGRpcmVjdG9yeSwgZmlsZSB9KTtcblxuICAgIGNvbnN0IHsgYWNjZXNzUm9sZSB9ID0gcmVjZWl2ZXJJdGVtT3B0aW9ucztcblxuICAgIGlmIChhY2Nlc3NSb2xlID09IEFjY2Vzc1JvbGVDaG9pY2UuREVOWSkge1xuICAgICAgY29uc3QgcmV0ID0ge1xuICAgICAgICBhY2Nlc3NSb2xlLFxuICAgICAgICB3cmFwcGVkSXRlbUtleTogbnVsbCxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YTogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgLy8gQ3J5cHRvZ3JhcGhpYyBhY2Nlc3MgdG8gaXRlbSBpcyBub3QgcmVxdWlyZWQuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJldCxcbiAgICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8gdGhpcyBzaG91bGQgYmUgYmF0Y2hlZFxuICAgICAgbGV0IGl0ZW1LZXk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGl0ZW1LZXkgPSBhd2FpdCB0aGlzLml0ZW1TZXJ2aWNlLmdldERpcmVjdG9yeUtleShcbiAgICAgICAgICBkaXJlY3RvcnkuaWQsXG4gICAgICAgICAgZGlyZWN0b3J5LmtleUlkXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtS2V5ID0gYXdhaXQgdGhpcy5pdGVtU2VydmljZS5nZXRGaWxlS2V5KGZpbGUuaWQsIGZpbGUua2V5SWQpO1xuICAgICAgfVxuXG4gICAgICBsZXQgd3JhcHBlZEl0ZW1LZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgcmVjZWl2ZXJTaGFyZWRLZXksXG4gICAgICAgIGl0ZW1LZXkuandrLnRvSlNPTih0cnVlKVxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc2hhcmVkQ2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICByZWNlaXZlclNoYXJlZEtleSxcbiAgICAgICAgcmVjZWl2ZXJJdGVtT3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgICApO1xuXG4gICAgICB3cmFwcGVkSXRlbUtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBhc3NlbWJseUtleSxcbiAgICAgICAgd3JhcHBlZEl0ZW1LZXlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJldCA9IHtcbiAgICAgICAgYWNjZXNzUm9sZSxcbiAgICAgICAgd3JhcHBlZEl0ZW1LZXksXG4gICAgICAgIHNoYXJlZENpcGhlckRhdGEsXG4gICAgICB9O1xuXG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmV0LFxuICAgICAgICAgIGRpcmVjdG9yeUlkOiBkaXJlY3RvcnkuaWQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJldCxcbiAgICAgICAgICBmaWxlSWQ6IGZpbGUuaWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlUmVjZWl2ZXJEaXJlY3RvcnkoXG4gICAgb3B0aW9uczogUmVjZWl2ZXJEaXJlY3RvcnlPcHRpb25zLFxuICAgIHJlY2VpdmVyU2hhcmVkS2V5OiBKV0suS2V5LFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVSZWNlaXZlckl0ZW0oe1xuICAgICAgcmVjZWl2ZXJJdGVtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICBkaXJlY3Rvcnk6IHtcbiAgICAgICAgaWQ6IG9wdGlvbnMuZGlyZWN0b3J5SWQsXG4gICAgICAgIGtleUlkOiBvcHRpb25zLmRpcmVjdG9yeUtleUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlY2VpdmVyRmlsZShcbiAgICBvcHRpb25zOiBSZWNlaXZlckZpbGVPcHRpb25zLFxuICAgIHJlY2VpdmVyU2hhcmVkS2V5OiBKV0suS2V5LFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVSZWNlaXZlckl0ZW0oe1xuICAgICAgcmVjZWl2ZXJJdGVtT3B0aW9uczogb3B0aW9ucyxcbiAgICAgIHJlY2VpdmVyU2hhcmVkS2V5LFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICBmaWxlOiB7XG4gICAgICAgIGlkOiBvcHRpb25zLmZpbGVJZCxcbiAgICAgICAga2V5SWQ6IG9wdGlvbnMuZmlsZUtleUlkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUNyZWF0ZVJlY2VpdmVyKFxuICAgIG9wdGlvbnM6IENyZWF0ZVJlY2VpdmVyT3B0aW9ucyxcbiAgICBhc3NlbWJseUtleTogSldLLktleVxuICApIHtcbiAgICBjb25zdCB7IHNoYXJlZEtleSwgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlQ3JlYXRlUGFydGljaXBhbnQoXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGFkZERpcmVjdG9yaWVzID1cbiAgICAgIG9wdGlvbnMuYWRkRGlyZWN0b3JpZXMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5hZGREaXJlY3Rvcmllcy5tYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5wcmVwYXJlQWRkUmVjZWl2ZXJEaXJlY3RvcnkoeCwgc2hhcmVkS2V5LmtleSwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgY29uc3QgYWRkRmlsZXMgPVxuICAgICAgb3B0aW9ucy5hZGRGaWxlcyAmJlxuICAgICAgKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBvcHRpb25zLmFkZEZpbGVzLm1hcCgoeCkgPT5cbiAgICAgICAgICB0aGlzLnByZXBhcmVBZGRSZWNlaXZlckZpbGUoeCwgc2hhcmVkS2V5LmtleSwgYXNzZW1ibHlLZXkpXG4gICAgICAgIClcbiAgICAgICkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm11dGF0aW9uSW5wdXQsXG4gICAgICBhZGREaXJlY3RvcmllcyxcbiAgICAgIGFkZEZpbGVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVVcGRhdGVSZWNlaXZlcihcbiAgICBvcHRpb25zOiBVcGRhdGVSZWNlaXZlck9wdGlvbnMsXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXksXG4gICAgZXhpc3RpbmdSZWNlaXZlcjogU2NlbmFyaW9SZWNlaXZlck5vZGVcbiAgKSB7XG4gICAgY29uc3Qgc2hhcmVkS2V5SWQgPSBleGlzdGluZ1JlY2VpdmVyLnNoYXJlZEtleS5pZDtcblxuICAgIGNvbnN0IGRlbGV0ZURpcmVjdG9yaWVzT3B0aW9ucyA9IG9wdGlvbnMuZGVsZXRlRGlyZWN0b3JpZXMgfHwgW107XG4gICAgY29uc3QgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zID0gb3B0aW9ucy51cGRhdGVEaXJlY3RvcmllcyB8fCBbXTtcblxuICAgIGNvbnN0IGRlbGV0ZUZpbGVzT3B0aW9ucyA9IG9wdGlvbnMuZGVsZXRlRmlsZXMgfHwgW107XG4gICAgY29uc3QgdXBkYXRlRmlsZXNPcHRpb25zID0gb3B0aW9ucy51cGRhdGVGaWxlcyB8fCBbXTtcblxuICAgIC8vIEZpbGwgaW4gYW55IG1pc3NpbmcgdXBkYXRlIGRpcmVjdG9yaWVzXG4gICAgbWFwRWRnZXMoZXhpc3RpbmdSZWNlaXZlci5yZWNlaXZlckl0ZW1zLnJlY2VpdmVyRGlyZWN0b3JpZXMpLmZvckVhY2goXG4gICAgICAoZXhpc3RpbmdEaXJlY3RvcnkpID0+IHtcbiAgICAgICAgaWYgKGRlbGV0ZURpcmVjdG9yaWVzT3B0aW9ucy5pbmNsdWRlcyhleGlzdGluZ0RpcmVjdG9yeS5kaXJlY3RvcnkuaWQpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHVwZGF0ZURpcmVjdG9yaWVzT3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgKHgpID0+IHguZGlyZWN0b3J5SWQgPT09IGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5pZFxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlRGlyZWN0b3JpZXNPcHRpb25zLnB1c2goe1xuICAgICAgICAgIGFjY2Vzc1JvbGU6IGV4aXN0aW5nRGlyZWN0b3J5LmFjY2Vzc1JvbGUsXG4gICAgICAgICAgZGlyZWN0b3J5SWQ6IGV4aXN0aW5nRGlyZWN0b3J5LmRpcmVjdG9yeS5pZCxcbiAgICAgICAgICBkaXJlY3RvcnlLZXlJZDogZXhpc3RpbmdEaXJlY3RvcnkuZGlyZWN0b3J5LmtleUlkLFxuICAgICAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb246XG4gICAgICAgICAgICBleGlzdGluZ0RpcmVjdG9yeS5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gRmlsbCBpbiBhbnkgbWlzc2luZyB1cGRhdGUgZGlyZWN0b3JpZXNcbiAgICBtYXBFZGdlcyhleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJGaWxlcykuZm9yRWFjaChcbiAgICAgIChleGlzdGluZ0ZpbGUpID0+IHtcbiAgICAgICAgaWYgKGRlbGV0ZUZpbGVzT3B0aW9ucy5pbmNsdWRlcyhleGlzdGluZ0ZpbGUuZmlsZS5pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXBkYXRlRmlsZXNPcHRpb25zLmZpbmQoKHgpID0+IHguZmlsZUlkID09PSBleGlzdGluZ0ZpbGUuZmlsZS5pZCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVGaWxlc09wdGlvbnMucHVzaCh7XG4gICAgICAgICAgYWNjZXNzUm9sZTogZXhpc3RpbmdGaWxlLmFjY2Vzc1JvbGUsXG4gICAgICAgICAgZmlsZUlkOiBleGlzdGluZ0ZpbGUuZmlsZS5pZCxcbiAgICAgICAgICBmaWxlS2V5SWQ6IGV4aXN0aW5nRmlsZS5maWxlLmtleUlkLFxuICAgICAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb246IGV4aXN0aW5nRmlsZS5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgeyBzaGFyZWRLZXksIG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMucHJlcGFyZVVwZGF0ZVBhcnRpY2lwYW50KFxuICAgICAgb3B0aW9ucyxcbiAgICAgIHNoYXJlZEtleUlkXG4gICAgKTtcblxuICAgIGNvbnN0IGFkZERpcmVjdG9yaWVzID1cbiAgICAgIG9wdGlvbnMuYWRkRGlyZWN0b3JpZXMgJiZcbiAgICAgIChhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgb3B0aW9ucy5hZGREaXJlY3Rvcmllcy5tYXAoKHgpID0+XG4gICAgICAgICAgdGhpcy5wcmVwYXJlQWRkUmVjZWl2ZXJEaXJlY3RvcnkoeCwgc2hhcmVkS2V5LCBhc3NlbWJseUtleSlcbiAgICAgICAgKVxuICAgICAgKSk7XG5cbiAgICBjb25zdCBhZGRGaWxlcyA9XG4gICAgICBvcHRpb25zLmFkZEZpbGVzICYmXG4gICAgICAoYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIG9wdGlvbnMuYWRkRmlsZXMubWFwKCh4KSA9PlxuICAgICAgICAgIHRoaXMucHJlcGFyZUFkZFJlY2VpdmVyRmlsZSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgICApXG4gICAgICApKTtcblxuICAgIGNvbnN0IHVwZGF0ZURpcmVjdG9yaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB1cGRhdGVEaXJlY3Rvcmllc09wdGlvbnMubWFwKCh4KSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVVcGRhdGVSZWNlaXZlckRpcmVjdG9yeSh4LCBzaGFyZWRLZXksIGFzc2VtYmx5S2V5KVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCB1cGRhdGVGaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdXBkYXRlRmlsZXNPcHRpb25zLm1hcCgoeCkgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlVXBkYXRlUmVjZWl2ZXJGaWxlKHgsIHNoYXJlZEtleSwgYXNzZW1ibHlLZXkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tdXRhdGlvbklucHV0LFxuICAgICAgYWRkRGlyZWN0b3JpZXMsXG4gICAgICBhZGRGaWxlcyxcbiAgICAgIHVwZGF0ZURpcmVjdG9yaWVzLFxuICAgICAgdXBkYXRlRmlsZXMsXG4gICAgICBkZWxldGVEaXJlY3Rvcmllczogb3B0aW9ucy5kZWxldGVEaXJlY3RvcmllcyxcbiAgICAgIGRlbGV0ZUZpbGVzOiBvcHRpb25zLmRlbGV0ZUZpbGVzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVFeGlzdGluZ1JlY2VpdmVyKFxuICAgIGV4aXN0aW5nUmVjZWl2ZXI6IFNjZW5hcmlvUmVjZWl2ZXJOb2RlLFxuICAgIGFzc2VtYmx5S2V5OiBKV0suS2V5XG4gICkge1xuICAgIGNvbnN0IHVwZGF0ZURpcmVjdG9yaWVzID0gbWFwRWRnZXMoXG4gICAgICBleGlzdGluZ1JlY2VpdmVyLnJlY2VpdmVySXRlbXMucmVjZWl2ZXJEaXJlY3Rvcmllc1xuICAgICkubWFwKCh7IGFjY2Vzc1JvbGUsIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sIGRpcmVjdG9yeSB9KSA9PiAoe1xuICAgICAgYWNjZXNzUm9sZSxcbiAgICAgIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICBkaXJlY3RvcnlJZDogZGlyZWN0b3J5LmlkLFxuICAgICAgZGlyZWN0b3J5S2V5SWQ6IGRpcmVjdG9yeS5rZXlJZCxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB1cGRhdGVGaWxlcyA9IG1hcEVkZ2VzKFxuICAgICAgZXhpc3RpbmdSZWNlaXZlci5yZWNlaXZlckl0ZW1zLnJlY2VpdmVyRmlsZXNcbiAgICApLm1hcCgoeyBhY2Nlc3NSb2xlLCBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uLCBmaWxlIH0pID0+ICh7XG4gICAgICBhY2Nlc3NSb2xlLFxuICAgICAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbixcbiAgICAgIGZpbGVJZDogZmlsZS5pZCxcbiAgICAgIGZpbGVLZXlJZDogZmlsZS5rZXlJZCxcbiAgICB9KSk7XG5cbiAgICAvLyBGaWxsIGl0IGluIHdpdGggZXhpc3RpbmcgcmVjZWl2ZXIuXG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVVwZGF0ZVJlY2VpdmVyKFxuICAgICAge1xuICAgICAgICB0cElkOiBleGlzdGluZ1JlY2VpdmVyLnRwLmlkLFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uOiBleGlzdGluZ1JlY2VpdmVyLnNoYXJlZENpcGhlckRhdGFDbGVhckpzb24sXG4gICAgICAgIHVwZGF0ZURpcmVjdG9yaWVzLFxuICAgICAgICB1cGRhdGVGaWxlcyxcbiAgICAgIH0sXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGV4aXN0aW5nUmVjZWl2ZXJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlRXhpc3RpbmdSZWNlaXZlcnMoXG4gICAgZXhpc3RpbmdSZWNlaXZlcnM6IFNjZW5hcmlvUmVjZWl2ZXJOb2RlW10sXG4gICAgYXNzZW1ibHlLZXk6IEpXSy5LZXlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgZXhpc3RpbmdSZWNlaXZlcnMubWFwKChleGlzdGluZ1JlY2VpdmVyKSA9PlxuICAgICAgICB0aGlzLnByZXBhcmVFeGlzdGluZ1JlY2VpdmVyKGV4aXN0aW5nUmVjZWl2ZXIsIGFzc2VtYmx5S2V5KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVDcmVhdGVQYXJ0aWNpcGFudChvcHRpb25zOiBDcmVhdGVQYXJ0aWNpcGFudE9wdGlvbnMpIHtcbiAgICBjb25zdCBzaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRXaXRoTmV3S2V5KFxuICAgICAgb3B0aW9ucy50cFNoYXJlZEtleUlkLFxuICAgICAgb3B0aW9ucy5zaGFyZWRDaXBoZXJEYXRhQ2xlYXJKc29uIHx8ICcnXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkS2V5LFxuICAgICAgbXV0YXRpb25JbnB1dDoge1xuICAgICAgICB0cElkOiBvcHRpb25zLnRwSWQsXG4gICAgICAgIHRwU2hhcmVkS2V5SWQ6IG9wdGlvbnMudHBTaGFyZWRLZXlJZCxcbiAgICAgICAgdHBTaGFyZWRLZXlXcmFwcGVkU2hhcmVkS2V5OiBzaGFyZWRLZXkud3JhcHBlZEtleSxcbiAgICAgICAgc2hhcmVkQ2lwaGVyRGF0YTogc2hhcmVkS2V5LmNpcGhlcixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZVBhcnRpY2lwYW50KFxuICAgIG9wdGlvbnM6IFBhcnRpY2lwYW50T3B0aW9ucyxcbiAgICBzaGFyZWRLZXlJZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5R3JhcGguZ2V0SndrS2V5KHNoYXJlZEtleUlkKTtcblxuICAgIGNvbnN0IHNoYXJlZENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIG9wdGlvbnMuc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbiB8fCAnJ1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkS2V5LFxuICAgICAgbXV0YXRpb25JbnB1dDoge1xuICAgICAgICB0cElkOiBvcHRpb25zLnRwSWQsXG4gICAgICAgIHNoYXJlZEtleUlkLFxuICAgICAgICBzaGFyZWRDaXBoZXJEYXRhLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQ3JlYXRlQ2xhaW1hbnQob3B0aW9uczogQ3JlYXRlQ2xhaW1hbnRPcHRpb25zKSB7XG4gICAgY29uc3QgeyBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLnByZXBhcmVDcmVhdGVQYXJ0aWNpcGFudChvcHRpb25zKTtcbiAgICByZXR1cm4gbXV0YXRpb25JbnB1dDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVVwZGF0ZUNsYWltYW50KFxuICAgIG9wdGlvbnM6IFVwZGF0ZUNsYWltYW50T3B0aW9ucyxcbiAgICBzaGFyZWRLZXlJZDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IHsgbXV0YXRpb25JbnB1dCB9ID0gYXdhaXQgdGhpcy5wcmVwYXJlVXBkYXRlUGFydGljaXBhbnQoXG4gICAgICBvcHRpb25zLFxuICAgICAgc2hhcmVkS2V5SWRcbiAgICApO1xuXG4gICAgcmV0dXJuIG11dGF0aW9uSW5wdXQ7XG4gIH1cblxuICBhc3luYyBwcmVwYXJlUmVjZWl2ZUNsYWltMihzY2VuYXJpb0lkOiBzdHJpbmcsIHNoYXJlZENsYWltSWQ6IHN0cmluZykge1xuICAgIC8vIEdldCBhbGwgdGhlIHNoYXJlZCBpdGVtc1xuICAgIGNvbnN0IHNoYXJlZFNjZW5hcmlvID0gKFxuICAgICAgYXdhaXQgdGhpcy5nZXRTaGFyZWRTY2VuYXJpbyhzY2VuYXJpb0lkLCBzaGFyZWRDbGFpbUlkKVxuICAgICkuc2hhcmVkU2NlbmFyaW87XG5cbiAgICBpZiAoc2hhcmVkU2NlbmFyaW8uc3RhdGUgIT09IFNjZW5hcmlvU3RhdGUuQVBQUk9WRUQpIHtcbiAgICAgIHRocm93Q2xhaW1Ob3RBcHByb3ZlZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGFwcHJvdmFscyA9IG1hcEVkZ2VzKFxuICAgICAgc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uYXNDbGFpbVJlY2VpdmVyLmFwcHJvdmFsc1xuICAgICk7XG5cbiAgICBjb25zdCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMucmVjb3ZlckFzc2VtYmx5S2V5KGFwcHJvdmFscyk7XG5cbiAgICAvLyBXcmFwIGFzc2VtYmx5IGtleSB3aXRoIHNoYXJlZCBrZXkuXG4gICAgLy8/Pz9cbiAgICAvLyBUaGlzIHNoYXJlZEtleSBpcyBjcmVhdGVkIGp1c3QgZm9yIHRoaXMgc2NlbmFyaW8uIEl0J3Mgd3JhcHBlZCBieSB0aGUgdHBTaGFyZWRLZXkuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoXG4gICAgICBzaGFyZWRTY2VuYXJpby5hc1JlY2VpdmVyLnNoYXJlZEtleS5pZFxuICAgICk7XG5cbiAgICBjb25zdCBzaGFyZWRLZXlXcmFwcGVkQXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHNoYXJlZEtleSxcbiAgICAgIGFzc2VtYmx5S2V5LnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2NlbmFyaW9DbGFpbUlkOiBzaGFyZWRDbGFpbUlkLFxuICAgICAgc2hhcmVkS2V5V3JhcHBlZEFzc2VtYmx5S2V5LFxuICAgICAgc2hhcmVkS2V5SWQ6IHNoYXJlZEtleS5pZCxcbiAgICAgIGFzc2VtYmx5S2V5SWQ6IHNoYXJlZFNjZW5hcmlvLnNoYXJlZENsYWltLmFzQ2xhaW1SZWNlaXZlci5hc3NlbWJseUtleUlkLFxuICAgIH07XG4gIH1cblxuICAvLyBhc3luYyBwcmVwYXJlUmVjZWl2ZUNsYWltKHNjZW5hcmlvSWQ6IHN0cmluZywgc2hhcmVkQ2xhaW1JZDogc3RyaW5nKSB7XG4gIC8vICAgLy8gR2V0IGFsbCB0aGUgc2hhcmVkIGl0ZW1zXG4gIC8vICAgY29uc3Qgc2hhcmVkU2NlbmFyaW8gPSAoXG4gIC8vICAgICBhd2FpdCB0aGlzLmdldFNoYXJlZFNjZW5hcmlvKHNjZW5hcmlvSWQsIHNoYXJlZENsYWltSWQpXG4gIC8vICAgKS5zaGFyZWRTY2VuYXJpbztcblxuICAvLyAgIGlmIChzaGFyZWRTY2VuYXJpby5zdGF0ZSAhPT0gU2NlbmFyaW9TdGF0ZS5BUFBST1ZFRCkge1xuICAvLyAgICAgdGhyb3dDbGFpbU5vdEFwcHJvdmVkKCk7XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgYXBwcm92YWxzID0gbWFwRWRnZXMoXG4gIC8vICAgICBzaGFyZWRTY2VuYXJpby5zaGFyZWRDbGFpbS5hc0NsYWltUmVjZWl2ZXIuYXBwcm92YWxzXG4gIC8vICAgKTtcblxuICAvLyAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5yZWNvdmVyQXNzZW1ibHlLZXkoYXBwcm92YWxzKTtcblxuICAvLyAgIC8vIERlY3J5cHQgYWxsIGl0ZW1zXG4gIC8vICAgY29uc3QgcmVjZWl2ZXJEaXJlY3RvcmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAvLyAgICAgc2hhcmVkU2NlbmFyaW8uYXNSZWNlaXZlci5yZWNlaXZlckl0ZW1zLnJlY2VpdmVyRGlyZWN0b3JpZXMuZWRnZXNcbiAgLy8gICAgICAgLm1hcCgoZWRnZSkgPT4gZWRnZS5ub2RlKVxuICAvLyAgICAgICAubWFwKGFzeW5jIChyZWNlaXZlckRpcmVjdG9yeSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IHdyYXBwZWRJdGVtS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAvLyAgICAgICAgICAgYXNzZW1ibHlLZXksXG4gIC8vICAgICAgICAgICByZWNlaXZlckRpcmVjdG9yeS53cmFwcGVkSXRlbUtleVxuICAvLyAgICAgICAgICk7XG5cbiAgLy8gICAgICAgICByZXR1cm4ge1xuICAvLyAgICAgICAgICAgcmVjZWl2ZXJEaXJlY3RvcnlJZDogcmVjZWl2ZXJEaXJlY3RvcnkuaWQsXG4gIC8vICAgICAgICAgICAvLyBMb29rcyBsaWtlIHJlY2VpdmVyRGlyZWN0b3J5LndyYXBwZWRJdGVtS2V5IGhhcyBubyBvdGhlciBjb250ZW50IGluIHNpZGUgaXQgZXhjZXB0IGEgd3JhcHBlZCBrZXkuXG4gIC8vICAgICAgICAgICAvLyBTbyB3ZSBjYW4gdHVybiB0aGlzIGluIHRvIGEgZG91Ymx5IHdyYXBwZWQga2V5IGFuZCBqdXN0IHJlbGVhc2UgdGhlIGFzc2VtYmx5IGtleS5cblxuICAvLyAgICAgICAgICAgcmVjZWl2ZXJTaGFyZWRLZXlXcmFwcGVkSXRlbUtleTogd3JhcHBlZEl0ZW1LZXksIC8vIHRoZSB3cmFwcGVkSXRlbUtleSBpcyBhbHJlYWR5IHdyYXBwZWQgYnkgcmVjZWl2ZXJTaGFyZWRLZXlcbiAgLy8gICAgICAgICB9O1xuICAvLyAgICAgICB9KVxuICAvLyAgICk7XG5cbiAgLy8gICByZXR1cm4ge1xuICAvLyAgICAgc2NlbmFyaW9DbGFpbUlkOiBzaGFyZWRDbGFpbUlkLFxuICAvLyAgICAgcmVjZWl2ZXJEaXJlY3RvcmllcyxcbiAgLy8gICB9O1xuICAvLyB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWNvdmVyQXNzZW1ibHlLZXkoXG4gICAgYXBwcm92YWxzOiBTaGFyZWRTY2VuYXJpb0NsYWltUmVjZWl2ZWRBcHByb3ZhbE5vZGVbXVxuICApIHtcbiAgICBjb25zdCBwYXJ0aWFscyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgYXBwcm92YWxzLm1hcCgoYXBwcm92YWwpID0+XG4gICAgICAgIHRoaXMua2V5R3JhcGguZGVjcnlwdEZyb21TdHJpbmc8UGFydGlhbEFzc2VtYmx5S2V5PihcbiAgICAgICAgICBhcHByb3ZhbC5weGsuaWQsXG4gICAgICAgICAgYXBwcm92YWwucmVjZWl2ZXJDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hc3NlbWJseUNvbnRyb2xsZXIucmVjb3ZlckFzc2VtYmx5S2V5KHBhcnRpYWxzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXNDbGFpbUFwcHJvdmVycyhcbiAgICBzaGFyZWRTY2VuYXJpb0lkLFxuICAgIGNsYWltSWQsXG4gICAgc3RhdGU6IFRwQ2xhaW1BcHByb3ZlclN0YXRlXG4gICkge1xuICAgIGNvbnN0IHNoYXJlZFNjZW5hcmlvID0gKFxuICAgICAgYXdhaXQgdGhpcy5nZXRTaGFyZWRTY2VuYXJpbyhzaGFyZWRTY2VuYXJpb0lkLCBjbGFpbUlkKVxuICAgICkuc2hhcmVkU2NlbmFyaW87XG5cbiAgICByZXR1cm4gbWFwRWRnZXMoc2hhcmVkU2NlbmFyaW8uc2hhcmVkQ2xhaW0uY2xhaW0uYXNDbGFpbUFwcHJvdmVycykuZmlsdGVyKFxuICAgICAgKGFzQ2xhaW1BcHByb3ZlcikgPT4gYXNDbGFpbUFwcHJvdmVyLnN0YXRlID09PSBzdGF0ZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVBcHByb3ZlQ2xhaW1NdXRhdGlvbnMoXG4gICAgc2hhcmVkU2NlbmFyaW9JZDogc3RyaW5nLFxuICAgIGNsYWltSWQ6IHN0cmluZ1xuICApIHtcbiAgICAvLyBUaGUgY3VycmVudCB1c2VyIG1heSBiZSBhY3RpbmcgYXMgYXBwcm92ZXJzIGluIG11bHRpcGxlIHN1Yi1hc3NlbWJsaWVzIHNvXG4gICAgLy8gd2UgYXBwcm92ZSB0aGVtIGFsbC5cbiAgICBjb25zdCBhc0NsYWltQXBwcm92ZXJzID0gYXdhaXQgdGhpcy5hc0NsYWltQXBwcm92ZXJzKFxuICAgICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICAgIGNsYWltSWQsXG4gICAgICBUcENsYWltQXBwcm92ZXJTdGF0ZS5DTEFJTUVEXG4gICAgKTtcblxuICAgIHJldHVybiBhc0NsYWltQXBwcm92ZXJzLm1hcChcbiAgICAgIGFzeW5jIChhc0NsYWltQXBwcm92ZXIpID0+XG4gICAgICAgIG5ldyBMck11dGF0aW9uKHtcbiAgICAgICAgICBtdXRhdGlvbjogQXBwcm92ZVNjZW5hcmlvQ2xhaW1NdXRhdGlvbixcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlucHV0OiBhd2FpdCB0aGlzLnByZXBhcmVBcHByb3ZlQ2xhaW0oYXNDbGFpbUFwcHJvdmVyKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVBcHByb3ZlQ2xhaW0oXG4gICAgYXNDbGFpbUFwcHJvdmVyOiBTaGFyZWRUcENsYWltQXBwcm92ZXJOb2RlXG4gICkge1xuICAgIGNvbnN0IHJlY2VpdmVyQXBwcm92YWxzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBtYXBFZGdlcyhhc0NsYWltQXBwcm92ZXIucmVjZWl2ZXJBcHByb3ZhbHMpLm1hcCgocmVjZWl2ZXJBcHByb3ZhbCkgPT5cbiAgICAgICAgdGhpcy5wcmVwYXJlUmVjZWl2ZXJBcHByb3ZhbCh7XG4gICAgICAgICAgcmVjZWl2ZXJBcHByb3ZhbElkOiByZWNlaXZlckFwcHJvdmFsLmlkLFxuICAgICAgICAgIHJlY2VpdmVyQXBwcm92YWxQeGtJZDogcmVjZWl2ZXJBcHByb3ZhbC5weGsuaWQsXG4gICAgICAgICAgc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5Q2xlYXJKc29uOlxuICAgICAgICAgICAgYXNDbGFpbUFwcHJvdmVyLnNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvbixcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNsYWltQXBwcm92ZXJJZDogYXNDbGFpbUFwcHJvdmVyLmlkLFxuICAgICAgcmVjZWl2ZXJBcHByb3ZhbHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlY2VpdmVyQXBwcm92YWwob3B0aW9uczoge1xuICAgIHJlY2VpdmVyQXBwcm92YWxJZDogc3RyaW5nO1xuICAgIHJlY2VpdmVyQXBwcm92YWxQeGtJZDogc3RyaW5nO1xuICAgIHNoYXJlZENpcGhlclBhcnRpYWxBc3NlbWJseUtleUNsZWFySnNvbjogSlNPTk9iamVjdDtcbiAgfSkge1xuICAgIHJldHVybiB7XG4gICAgICByZWNlaXZlckFwcHJvdmFsSWQ6IG9wdGlvbnMucmVjZWl2ZXJBcHByb3ZhbElkLFxuICAgICAgLy8gVE9ETyBhbGxvdyBzZW5kaW5nIG9mIG1lc3NhZ2VzIHRvIHJlY2VpdmVyLlxuICAgICAgcmVjZWl2ZXJDaXBoZXI6ICcnLFxuICAgICAgcmVjZWl2ZXJDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXk6IGF3YWl0IHRoaXMua2V5R3JhcGguZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBvcHRpb25zLnJlY2VpdmVyQXBwcm92YWxQeGtJZCxcbiAgICAgICAgb3B0aW9ucy5zaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXlDbGVhckpzb25cbiAgICAgICksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZVJlamVjdENsYWltTXV0YXRpb25zKFxuICAgIHNoYXJlZFNjZW5hcmlvSWQ6IHN0cmluZyxcbiAgICBjbGFpbUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdXNlciBtYXkgYmUgYWN0aW5nIGFzIGFwcHJvdmVycyBpbiBtdWx0aXBsZSBzdWItYXNzZW1ibGllcyBzb1xuICAgIC8vIHdlIHJlamVjdCB0aGVtIGFsbC5cbiAgICBjb25zdCBhc0NsYWltQXBwcm92ZXJzID0gYXdhaXQgdGhpcy5hc0NsYWltQXBwcm92ZXJzKFxuICAgICAgc2hhcmVkU2NlbmFyaW9JZCxcbiAgICAgIGNsYWltSWQsXG4gICAgICBUcENsYWltQXBwcm92ZXJTdGF0ZS5DTEFJTUVEXG4gICAgKTtcblxuICAgIHJldHVybiBhc0NsYWltQXBwcm92ZXJzLm1hcChcbiAgICAgIGFzeW5jIChhc0NsYWltQXBwcm92ZXIpID0+XG4gICAgICAgIG5ldyBMck11dGF0aW9uKHtcbiAgICAgICAgICBtdXRhdGlvbjogUmVqZWN0U2NlbmFyaW9DbGFpbU11dGF0aW9uLFxuICAgICAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICAgICAgaW5wdXQ6IHsgY2xhaW1BcHByb3ZlcklkOiBhc0NsYWltQXBwcm92ZXIuaWQgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1996,12 +1996,24 @@ let QueryProcessorService = class QueryProcessorService {
|
|
|
1996
1996
|
getKeyId: ({ field }) => field.sharedKey.id,
|
|
1997
1997
|
}),
|
|
1998
1998
|
]));
|
|
1999
|
+
this.registerProcessor('SharedScenarioReceiverDirectoryNode', common.series([
|
|
2000
|
+
common.makeDecryptionProcessor({
|
|
2001
|
+
cipherFieldName: 'sharedCipherData',
|
|
2002
|
+
getKeyId: ({ field }) => field.sharedKey.id,
|
|
2003
|
+
}),
|
|
2004
|
+
]));
|
|
1999
2005
|
this.registerProcessor('ScenarioReceiverFileNode', common.series([
|
|
2000
2006
|
common.makeDecryptionProcessor({
|
|
2001
2007
|
cipherFieldName: 'sharedCipherData',
|
|
2002
2008
|
getKeyId: ({ field }) => field.sharedKey.id,
|
|
2003
2009
|
}),
|
|
2004
2010
|
]));
|
|
2011
|
+
this.registerProcessor('SharedScenarioReceiverFileNode', common.series([
|
|
2012
|
+
common.makeDecryptionProcessor({
|
|
2013
|
+
cipherFieldName: 'sharedCipherData',
|
|
2014
|
+
getKeyId: ({ field }) => field.sharedKey.id,
|
|
2015
|
+
}),
|
|
2016
|
+
]));
|
|
2005
2017
|
this.registerProcessor('SharedScenarioReceiverNode', common.series([
|
|
2006
2018
|
common.makeDecryptionProcessor({
|
|
2007
2019
|
cipherFieldName: 'sharedCipherData',
|
|
@@ -8647,12 +8659,6 @@ query ScenarioQuery(
|
|
|
8647
8659
|
id
|
|
8648
8660
|
}
|
|
8649
8661
|
accessRole
|
|
8650
|
-
|
|
8651
|
-
# The itemKey is the same as directory.keyId. It's here so we can detect
|
|
8652
|
-
# when the directory key has been rotated.
|
|
8653
|
-
itemKey {
|
|
8654
|
-
id
|
|
8655
|
-
}
|
|
8656
8662
|
directory {
|
|
8657
8663
|
id
|
|
8658
8664
|
keyId
|
|
@@ -8669,12 +8675,6 @@ query ScenarioQuery(
|
|
|
8669
8675
|
id
|
|
8670
8676
|
}
|
|
8671
8677
|
accessRole
|
|
8672
|
-
|
|
8673
|
-
# The itemKey is the same as file.keyId. It's here so we can detect
|
|
8674
|
-
# when the file key has been rotated.
|
|
8675
|
-
itemKey {
|
|
8676
|
-
id
|
|
8677
|
-
}
|
|
8678
8678
|
file {
|
|
8679
8679
|
id
|
|
8680
8680
|
keyId
|
|
@@ -8715,7 +8715,6 @@ query SharedScenarioQuery($scenarioId: LrRelayIdInput!) {
|
|
|
8715
8715
|
edges {
|
|
8716
8716
|
node {
|
|
8717
8717
|
id
|
|
8718
|
-
wrappedItemKey
|
|
8719
8718
|
}
|
|
8720
8719
|
}
|
|
8721
8720
|
}
|
|
@@ -9317,33 +9316,40 @@ let ScenarioService = class ScenarioService extends LrService {
|
|
|
9317
9316
|
};
|
|
9318
9317
|
});
|
|
9319
9318
|
}
|
|
9320
|
-
prepareReceiveClaim(scenarioId, sharedClaimId) {
|
|
9321
|
-
|
|
9322
|
-
|
|
9323
|
-
|
|
9324
|
-
|
|
9325
|
-
|
|
9326
|
-
|
|
9327
|
-
|
|
9328
|
-
|
|
9329
|
-
|
|
9330
|
-
|
|
9331
|
-
|
|
9332
|
-
|
|
9333
|
-
|
|
9334
|
-
|
|
9335
|
-
|
|
9336
|
-
|
|
9337
|
-
|
|
9338
|
-
|
|
9339
|
-
|
|
9340
|
-
|
|
9341
|
-
|
|
9342
|
-
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
}
|
|
9319
|
+
// async prepareReceiveClaim(scenarioId: string, sharedClaimId: string) {
|
|
9320
|
+
// // Get all the shared items
|
|
9321
|
+
// const sharedScenario = (
|
|
9322
|
+
// await this.getSharedScenario(scenarioId, sharedClaimId)
|
|
9323
|
+
// ).sharedScenario;
|
|
9324
|
+
// if (sharedScenario.state !== ScenarioState.APPROVED) {
|
|
9325
|
+
// throwClaimNotApproved();
|
|
9326
|
+
// }
|
|
9327
|
+
// const approvals = mapEdges(
|
|
9328
|
+
// sharedScenario.sharedClaim.asClaimReceiver.approvals
|
|
9329
|
+
// );
|
|
9330
|
+
// const assemblyKey = await this.recoverAssemblyKey(approvals);
|
|
9331
|
+
// // Decrypt all items
|
|
9332
|
+
// const receiverDirectories = await Promise.all(
|
|
9333
|
+
// sharedScenario.asReceiver.receiverItems.receiverDirectories.edges
|
|
9334
|
+
// .map((edge) => edge.node)
|
|
9335
|
+
// .map(async (receiverDirectory) => {
|
|
9336
|
+
// const wrappedItemKey = await this.encryptionService.decrypt(
|
|
9337
|
+
// assemblyKey,
|
|
9338
|
+
// receiverDirectory.wrappedItemKey
|
|
9339
|
+
// );
|
|
9340
|
+
// return {
|
|
9341
|
+
// receiverDirectoryId: receiverDirectory.id,
|
|
9342
|
+
// // Looks like receiverDirectory.wrappedItemKey has no other content in side it except a wrapped key.
|
|
9343
|
+
// // So we can turn this in to a doubly wrapped key and just release the assembly key.
|
|
9344
|
+
// receiverSharedKeyWrappedItemKey: wrappedItemKey, // the wrappedItemKey is already wrapped by receiverSharedKey
|
|
9345
|
+
// };
|
|
9346
|
+
// })
|
|
9347
|
+
// );
|
|
9348
|
+
// return {
|
|
9349
|
+
// scenarioClaimId: sharedClaimId,
|
|
9350
|
+
// receiverDirectories,
|
|
9351
|
+
// };
|
|
9352
|
+
// }
|
|
9347
9353
|
recoverAssemblyKey(approvals) {
|
|
9348
9354
|
return __awaiter(this, void 0, void 0, function* () {
|
|
9349
9355
|
const partials = yield Promise.all(approvals.map((approval) => this.keyGraph.decryptFromString(approval.pxk.id, approval.receiverCipherPartialAssemblyKey)));
|