@vendasta/meetings 1.6.0 → 1.6.3
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/esm2020/lib/_internal/enums/index.mjs +2 -2
- package/esm2020/lib/_internal/google-meet.api.service.mjs +7 -8
- package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/meeting-external.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/meeting-guest.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/meeting-host.interface.mjs +1 -1
- package/esm2020/lib/_internal/interfaces/shared.interface.mjs +1 -1
- package/esm2020/lib/_internal/meeting-external.api.service.mjs +7 -8
- package/esm2020/lib/_internal/meeting-guest.api.service.mjs +7 -8
- package/esm2020/lib/_internal/meeting-host.api.service.mjs +13 -9
- package/esm2020/lib/_internal/meeting-source-api.api.service.mjs +7 -8
- package/esm2020/lib/_internal/objects/index.mjs +4 -4
- package/esm2020/lib/_internal/objects/meeting-external.mjs +25 -72
- package/esm2020/lib/_internal/objects/meeting-guest.mjs +7 -3
- package/esm2020/lib/_internal/objects/meeting-host.mjs +89 -12
- package/esm2020/lib/_internal/objects/shared.mjs +5 -3
- package/esm2020/lib/_internal/zoom.api.service.mjs +7 -8
- package/esm2020/lib/guest/guest.service.mjs +1 -1
- package/esm2020/lib/host/host.service.mjs +27 -2
- package/esm2020/lib/shared/calendar.mjs +2 -1
- package/fesm2015/vendasta-meetings.mjs +347 -283
- package/fesm2015/vendasta-meetings.mjs.map +1 -1
- package/fesm2020/vendasta-meetings.mjs +347 -283
- package/fesm2020/vendasta-meetings.mjs.map +1 -1
- package/lib/_internal/enums/index.d.ts +1 -1
- package/lib/_internal/google-meet.api.service.d.ts +2 -5
- package/lib/_internal/interfaces/index.d.ts +3 -3
- package/lib/_internal/interfaces/meeting-external.interface.d.ts +14 -25
- package/lib/_internal/interfaces/meeting-guest.interface.d.ts +4 -2
- package/lib/_internal/interfaces/meeting-host.interface.d.ts +20 -7
- package/lib/_internal/interfaces/shared.interface.d.ts +2 -2
- package/lib/_internal/meeting-external.api.service.d.ts +3 -5
- package/lib/_internal/meeting-guest.api.service.d.ts +3 -5
- package/lib/_internal/meeting-host.api.service.d.ts +6 -7
- package/lib/_internal/meeting-source-api.api.service.d.ts +2 -5
- package/lib/_internal/objects/index.d.ts +3 -3
- package/lib/_internal/objects/meeting-external.d.ts +14 -25
- package/lib/_internal/objects/meeting-guest.d.ts +4 -2
- package/lib/_internal/objects/meeting-host.d.ts +30 -11
- package/lib/_internal/objects/shared.d.ts +2 -2
- package/lib/_internal/zoom.api.service.d.ts +2 -5
- package/lib/guest/guest.service.d.ts +1 -0
- package/lib/host/host.service.d.ts +7 -0
- package/package.json +1 -1
|
@@ -99,7 +99,7 @@ export class HostService {
|
|
|
99
99
|
@param metadata: optional metadata to include on the meeting type booking link
|
|
100
100
|
@param calendarSlug: used to replace hostId in the url. Use it when you are confident you know the host's slug.
|
|
101
101
|
- calendarSlug IS NOT USED TO RETRIEVE MEETING TYPES, ONLY TO MAKE THE BOOKING URLS
|
|
102
|
-
|
|
102
|
+
*/
|
|
103
103
|
listMeetingTypes(req) {
|
|
104
104
|
return this.hostAPIService.listMeetingTypes(req).pipe(map((resp) => {
|
|
105
105
|
if (!resp || !resp.meetingTypes) {
|
|
@@ -118,6 +118,31 @@ export class HostService {
|
|
|
118
118
|
});
|
|
119
119
|
}));
|
|
120
120
|
}
|
|
121
|
+
/*
|
|
122
|
+
getEventTypeById returns a single meeting type by ID.
|
|
123
|
+
@param eventTypeId: The unique identifier for the event type
|
|
124
|
+
@param metadata: optional metadata to include on the meeting type booking link
|
|
125
|
+
@param calendarSlug: used to replace hostId in the url. Use it when you are confident you know the host's slug.
|
|
126
|
+
- calendarSlug IS NOT USED TO RETRIEVE THE EVENT TYPE, ONLY TO MAKE THE BOOKING URL
|
|
127
|
+
*/
|
|
128
|
+
getEventTypeById(req) {
|
|
129
|
+
return this.hostAPIService
|
|
130
|
+
.getEventTypeById({ eventTypeId: req.eventTypeId })
|
|
131
|
+
.pipe(map((resp) => {
|
|
132
|
+
if (!resp.meetingType) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
return MeetingTypeFromApi({
|
|
136
|
+
meetingTypeApi: resp.meetingType,
|
|
137
|
+
calendarId: resp.meetingType.calendarId || "",
|
|
138
|
+
environment: onProductionGlobal()
|
|
139
|
+
? Environment.PROD
|
|
140
|
+
: Environment.DEMO,
|
|
141
|
+
metadata: req.metadata,
|
|
142
|
+
calendarSlug: req.calendarSlug,
|
|
143
|
+
});
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
121
146
|
/*
|
|
122
147
|
getBookingUrl returns a link that can be used to book a meeting with this host.
|
|
123
148
|
@param calendarId: An identifier for an individual host or grouping of hosts (i.e., team).
|
|
@@ -558,4 +583,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
|
|
|
558
583
|
type: Injectable,
|
|
559
584
|
args: [{ providedIn: "root" }]
|
|
560
585
|
}], ctorParameters: function () { return [{ type: i1.MeetingHostApiService }]; } });
|
|
561
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvaG9zdC9ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQWVMLGdDQUFnQyxFQUdoQyxxQkFBcUIsRUFDckIsbUJBQW1CLEVBR25CLFNBQVMsRUFFVCxRQUFRLEdBU1QsTUFBTSxjQUFjLENBQUM7QUFJdEIsT0FBTyxFQUlMLGVBQWUsRUFFZixZQUFZLEVBRVosWUFBWSxFQUNaLGNBQWMsRUFJZCxjQUFjLEVBR2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGtDQUFrQyxHQUNuQyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBWSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUl4RSxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixjQUFxQztRQUFyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7SUFBRyxDQUFDO0lBRTdELGtIQUFrSDtJQUNsSCxXQUFXLENBQUMsR0FHWDtRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsV0FBVyxDQUFDO1lBQ1gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lBQ2xCLHdGQUF3RjtZQUN4Riw0QkFBNEIs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QUFXOzRHQUFYLFdBQVcsY0FERSxNQUFNOzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAsIG1hcFRvIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuICBBdmFpbGFiaWxpdHlSdWxlTGlzdCxcbiAgQ2hlY2tHcm91cE9yU2VydmljZVNsdWdFeGlzdFJlc3BvbnNlLFxuICBDcmVhdGVDYWxlbmRhclJlcXVlc3RJbnRlcmZhY2UsXG4gIENyZWF0ZUNhbGVuZGFyUmVzcG9uc2UsXG4gIERheU9mV2VlayxcbiAgR2V0R3JvdXBSZXNwb25zZSxcbiAgR2V0SG9zdE1lZXRpbmdSZXNwb25zZSxcbiAgR2V0U2VydmljZVJlc3BvbnNlLFxuICBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlLFxuICBIb3N0Qm9va01lZXRpbmdSZXNwb25zZSxcbiAgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICBJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlLFxuICBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2UsXG4gIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMsXG4gIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlLFxuICBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSxcbiAgTWVldGluZ0hvc3RBcGlTZXJ2aWNlLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlLFxuICBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gIFRpbWVSYW5nZSxcbiAgVGltZVJhbmdlSW50ZXJmYWNlLFxuICBUaW1lWm9uZSxcbiAgVGltZVpvbmVJbnRlcmZhY2UsXG4gIFdlZWtkYXlBdmFpbGFiaWxpdHksXG4gIENvbnRhY3QsXG4gIEVtYWlsc1RvRGVsZXRlLFxuICBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICBMaXN0QXR0ZW5kZWVzUmVzcG9uc2UsXG4gIEJvb2tpbmdTb3VyY2UsXG4gIExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZSxcbn0gZnJvbSBcIi4uL19pbnRlcm5hbFwiO1xuXG5pbXBvcnQgeyBCb29rTWVldGluZ1Jlc3BvbnNlLCBCb29rU2Vzc2lvblJlc3BvbnNlIH0gZnJvbSBcIi4uL2d1ZXN0XCI7XG5cbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQsXG4gIEF2YWlsYWJpbGl0eVJ1bGUsXG4gIENhbGVuZGFyLFxuICBDYWxlbmRhckZyb21BcGksXG4gIEVudGl0eUFzc29jaWF0aW9ucyxcbiAgZ2V0RmllbGRNYXNrLFxuICBHcm91cCxcbiAgR3JvdXBGcm9tQXBpLFxuICBHcm91cFR5cGVUb0FQaSxcbiAgSG9zdFVybE1hcCxcbiAgTWVldGluZyxcbiAgTWVldGluZ0Zvcm0sXG4gIG1lZXRpbmdGcm9tQXBpLFxuICBNZWV0aW5nTWV0YWRhdGEsXG4gIE1lZXRpbmdUeXBlLFxuICBNZWV0aW5nVHlwZUZyb21BcGksXG4gIE1lZXRpbmdUeXBlVG9BcGksXG4gIFBhZ2VkUmVzcG9uc2UsXG4gIFByZWZlcmVuY2VzLFxuICBQcmVmZXJlbmNlc0Zyb21BcGksXG4gIFNlcnZpY2UsXG4gIFNlcnZpY2VGcm9tQXBpLFxuICBTZXJ2aWNlVHlwZVRvQXBpLFxuICBUaW1lU3BhbixcbiAgVGltZVNwYW5Gcm9tQXBpLFxufSBmcm9tIFwiLi4vc2hhcmVkXCI7XG5pbXBvcnQge1xuICBnZXRCb29raW5nVXJsSW1wbGVtZW50YXRpb24sXG4gIGdldEdlbmVyYWxCb29raW5nVXJsSW1wbGVtZW50YXRpb24sXG59IGZyb20gXCIuL3VybFwiO1xuaW1wb3J0IHsgSG9zdFVzZXIsIGhvc3RVc2VyRnJvbUFwaSB9IGZyb20gXCIuLi9zaGFyZWQvaG9zdC11c2VyXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgb25Qcm9kdWN0aW9uR2xvYmFsIH0gZnJvbSBcIi4uL3NoYXJlZC9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBIb3N0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdEFQSVNlcnZpY2U6IE1lZXRpbmdIb3N0QXBpU2VydmljZSkge31cblxuICAvLyBVc2UgYnVpbGRIb3N0SWQgdG8gZ2V0IGFuIGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzLiBTZWUgdmVuZGFzdGFhcGlzIGZvciBtb3JlIGRldGFpbHNcbiAgYnVpbGRIb3N0SWQocmVxOiB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczogQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1NldDtcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5idWlsZEhvc3RJZCh7XG4gICAgICAgIHVzZXJJZDogcmVxLnVzZXJJZCxcbiAgICAgICAgLy8gR3Jvc3MgdHlwZWNhc3QgZXhpc3RzIGJlY2F1c2UgSSB3YW50IHRvIHJlc3RyaWN0IHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBtYXAgKGZvciBub3cpLlxuICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOlxuICAgICAgICAgIHJlcS5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzIGFzIGFueSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaG9zdElkIHx8IFwiXCIpKTtcbiAgfVxuXG4gIGRvZXNDYWxlbmRhckV4aXN0KGNhbGVuZGFySWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kb2VzQ2FsZW5kYXJFeGlzdCh7IGNhbGVuZGFySWRlbnRpZmllcjogY2FsZW5kYXJJZGVudGlmaWVyIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3ApID0+IHJlc3AuZXhpc3RzKSk7XG4gIH1cblxuICBnZXRDYWxlbmRhcihyZXE6IHsgY2FsZW5kYXJJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPENhbGVuZGFyPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRDYWxlbmRhcih7IGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhcklkIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gQ2FsZW5kYXJGcm9tQXBpKHJlcz8uY2FsZW5kYXIpKSk7XG4gIH1cblxuICBlbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzKHJlcToge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQ7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0cyh7XG4gICAgICAgIHVzZXJJZDogcmVxLnVzZXJJZCxcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczpcbiAgICAgICAgICByZXEuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gKHJlcyA/IHJlcy5jYWxlbmRhcklkIDogXCJcIikpKTtcbiAgfVxuXG4gIGVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3QocmVxOiB7XG4gICAgZXh0ZXJuYWxJZHM6IHN0cmluZ1tdO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdCh7IGV4dGVybmFsSWRzOiByZXEuZXh0ZXJuYWxJZHMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXM/LmNhbGVuZGFySWRzIHx8IFtdKSk7XG4gIH1cblxuICAvKlxuICAgICBjcmVhdGVDYWxlbmRhciBjcmVhdGVzIGEgY2FsZW5kYXIgd2hpY2ggbWVldGluZyB0eXBlcyBjYW4gYmUgY3JlYXRlZCBmb3IgYW5kIGV2ZW50cyBjYW4gYmUgYm9va2VkIG9uXG4gICAgIFRoZSBmaWVsZHMgb2YgYSBjYWxlbmRhciBhcmUgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdmVuZGFzdGEvdmVuZGFzdGFhcGlzL2Jsb2IvbWFzdGVyL21lZXRpbmdzL3YxL3NoYXJlZC5wcm90b1xuICAgICovXG4gIGNyZWF0ZUNhbGVuZGFyKFxuICAgIHJlcTogQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPENyZWF0ZUNhbGVuZGFyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5jcmVhdGVDYWxlbmRhcihyZXEpO1xuICB9XG5cbiAgdXBkYXRlQ2FsZW5kYXJTbHVnKGNhbGVuZGFySWQ6IHN0cmluZywgbmV3U2x1Zzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVDYWxlbmRhcih7XG4gICAgICAgIGNhbGVuZGFySWQ6IGNhbGVuZGFySWQsXG4gICAgICAgIGNhbGVuZGFyVXBkYXRlOiB7IHNsdWc6IG5ld1NsdWcgfSxcbiAgICAgICAgZmllbGRNYXNrOiB7IHBhdGhzOiBbXCJzbHVnXCJdIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICB1cGRhdGVDYWxlbmRhckhvc3RVc2VySURzKFxuICAgIGNhbGVuZGFySWQ6IHN0cmluZyxcbiAgICByZXBsYWNlbWVudEhvc3RVc2VySWRzOiBzdHJpbmdbXSxcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVDYWxlbmRhcih7XG4gICAgICAgIGNhbGVuZGFySWQ6IGNhbGVuZGFySWQsXG4gICAgICAgIGNhbGVuZGFyVXBkYXRlOiB7IGhvc3RVc2VySWRzOiByZXBsYWNlbWVudEhvc3RVc2VySWRzIH0sXG4gICAgICAgIGZpZWxkTWFzazogeyBwYXRoczogW1wiaG9zdF91c2VyX2lkc1wiXSB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZ2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzKHJlcToge1xuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXTtcbiAgICBtZXRhZGF0YTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIH0pOiBPYnNlcnZhYmxlPHsgW2NhbGVuZGFySWQ6IHN0cmluZ106IE1lZXRpbmdUeXBlW10gfT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzKHsgY2FsZW5kYXJJZHM6IHJlcS5jYWxlbmRhcklkcyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXM/LmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXApLnJlZHVjZShcbiAgICAgICAgICAgIChjYWxlbmRhclRvTWVldGluZ1R5cGVNYXAsIGNhbGVuZGFySWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWVldGluZ1R5cGVzID0gKFxuICAgICAgICAgICAgICAgIHJlcy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcFtjYWxlbmRhcklkXT8ubWVldGluZ1R5cGVzIHx8IFtdXG4gICAgICAgICAgICAgICkubWFwKChtdCkgPT5cbiAgICAgICAgICAgICAgICBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IG10LFxuICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgICAgICAgICBjYWxlbmRhcklkLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jYWxlbmRhclRvTWVldGluZ1R5cGVNYXAsXG4gICAgICAgICAgICAgICAgW2NhbGVuZGFySWRdOiBtZWV0aW5nVHlwZXMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30gYXMgeyBbY2FsZW5kYXJJZDogc3RyaW5nXTogTWVldGluZ1R5cGVbXSB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGxpc3RNZWV0aW5nVHlwZXMgcmV0dXJucyBhIGxpc3Qgb2YgbWVldGluZyB0eXBlcyBmb3IgYSBob3N0XG4gICAgIEBwYXJhbSBob3N0SWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdFxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgb24gdGhlIG1lZXRpbmcgdHlwZSBib29raW5nIGxpbmtcbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICAgIC0gY2FsZW5kYXJTbHVnIElTIE5PVCBVU0VEIFRPIFJFVFJJRVZFIE1FRVRJTkcgVFlQRVMsIE9OTFkgVE8gTUFLRSBUSEUgQk9PS0lORyBVUkxTXG4gICAgKi9cbiAgbGlzdE1lZXRpbmdUeXBlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RNZWV0aW5nVHlwZXMocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmICghcmVzcCB8fCAhcmVzcC5tZWV0aW5nVHlwZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3AubWVldGluZ1R5cGVzLm1hcCgobXQpID0+IHtcbiAgICAgICAgICByZXR1cm4gTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEJvb2tpbmdVcmwgcmV0dXJucyBhIGxpbmsgdGhhdCBjYW4gYmUgdXNlZCB0byBib29rIGEgbWVldGluZyB3aXRoIHRoaXMgaG9zdC5cbiAgICAgQHBhcmFtIGNhbGVuZGFySWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdCBvciBncm91cGluZyBvZiBob3N0cyAoaS5lLiwgdGVhbSkuXG4gICAgIEBwYXJhbSBAZGVwcmVjYXRlZCBob3N0SWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdC5cbiAgICAgQHBhcmFtIG1lZXRpbmdUeXBlSWQ6IEFuIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBtZWV0aW5nIHR5cGUuIERlZmF1bHQ6IDMwLW1pbnV0ZXMuXG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgdXJsLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSB1c2VkIHRvIHByZS1maWxsIGNlcnRhaW4gZm9ybSBmaWVsZHMgYW5kIHdpbGwgYmUgc3RvcmVkIGR1cmluZyB0aGUgYm9va2luZyBwcm9jZXNzLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSBvYnRhaW5lZCBieSBzdWJzY3JpYmluZyB0byB0aGUgYm9va2luZyBldmVudC5cbiAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgKi9cbiAgZ2V0Qm9va2luZ1VybChyZXE6IHtcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIGNhbGVuZGFySWQgaW5zdGVhZC4gY2FsZW5kYXJJZCBub3QgcmVxdWlyZWQgdG8gYXZvaWQgYnJlYWtpbmcgZXhpc3RpbmcgY2xpZW50cy5cbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBjYWxlbmRhcklkPzogc3RyaW5nO1xuICAgIC8vIEBkZXByZWNhdGVkOiB1c2UgbWVldGluZ1R5cGVTbHVnIGluc3RlYWRcbiAgICBtZWV0aW5nVHlwZUlkPzogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlU2x1Zz86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgICBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB8fCByZXEuaG9zdElkLFxuICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKCkgPyBFbnZpcm9ubWVudC5QUk9EIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgY2FsZW5kYXJTbHVnOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEdlbmVyYWxCb29raW5nVXJsIHJldHVybnMgYSBsaW5rIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgbWVldGluZyB0eXBlIHRvIGJvb2sgd2l0aCB0aGUgZ2l2ZW4gY2FsZW5kYXIuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMgKGkuZS4sIHRlYW0pLlxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAqL1xuICBnZXRHZW5lcmFsQm9va2luZ1VybChyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBvZihcbiAgICAgIGdldEdlbmVyYWxCb29raW5nVXJsSW1wbGVtZW50YXRpb24oe1xuICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKCkgPyBFbnZpcm9ubWVudC5QUk9EIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQsXG4gICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRCb29raW5nVXJsc011bHRpIHJldHVybnMgYSBtYXBwaW5nIG9mIGhvc3RzIC0+IGV2ZW50IHR5cGVzIC0+IGJvb2tpbmcgbGlua3MuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMuXG4gICAgIEBwYXJhbSBtZWV0aW5nVHlwZVNsdWc6IG1lZXRpbmdUeXBlU2x1Z3MgYXJlIHBhc3NlZCBpbiB0aGUgZm9ybSB7aG9zdElkOiBbbWVldGluZ1R5cGVTbHVnMSwgbWVldGluZ1R5cGVTbHVnMl19XG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgdXJsLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSB1c2VkIHRvIHByZS1maWxsIGNlcnRhaW4gZm9ybSBmaWVsZHMgYW5kIHdpbGwgYmUgc3RvcmVkIGR1cmluZyB0aGUgYm9va2luZyBwcm9jZXNzLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSBvYnRhaW5lZCBieSBzdWJzY3JpYmluZyB0byB0aGUgYm9va2luZyBldmVudC5cbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICovXG4gIGdldEJvb2tpbmdVcmxzTXVsdGkoXG4gICAgcmVxOiB7IFtjYWxlbmRhcklkOiBzdHJpbmddOiBzdHJpbmdbXSB9LFxuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPEhvc3RVcmxNYXA+IHtcbiAgICByZXR1cm4gb2YoXG4gICAgICBPYmplY3Qua2V5cyhyZXEpLnJlZHVjZSgoaG9zdE1hcCwgY2FsZW5kYXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmhvc3RNYXAsXG4gICAgICAgICAgW2NhbGVuZGFySWRdOiByZXFbY2FsZW5kYXJJZF0ucmVkdWNlKFxuICAgICAgICAgICAgKG1lZXRpbmdUeXBlTWFwLCBtZWV0aW5nVHlwZVNsdWcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5tZWV0aW5nVHlwZU1hcCxcbiAgICAgICAgICAgICAgICBbbWVldGluZ1R5cGVTbHVnXTogZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFySWQsXG4gICAgICAgICAgICAgICAgICBtZWV0aW5nVHlwZVNsdWcsXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJTbHVnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9IGFzIHsgW21lZXRpbmdUeXBlSWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9LCB7fSBhcyBIb3N0VXJsTWFwKSxcbiAgICApO1xuICB9XG5cbiAgaXNIb3N0Q29uZmlndXJlZChyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8SXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5pc0hvc3RDb25maWd1cmVkKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlKSA9PiByZXNwKSk7XG4gIH1cblxuICBzZXRHZW5lcmFsQXZhaWxhYmlsaXR5KHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIHdlZWtkYXlzQXZhaWxhYmlsaXR5IGluc3RlYWRcbiAgICBkYXlzPzogRGF5T2ZXZWVrW107XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSB3ZWVrZGF5c0F2YWlsYWJpbGl0eSBpbnN0ZWFkXG4gICAgdGltZVNsb3Q/OiBUaW1lUmFuZ2VJbnRlcmZhY2U7XG4gICAgd2Vla2RheXNBdmFpbGFiaWxpdHk/OiBXZWVrZGF5QXZhaWxhYmlsaXR5W107XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgY29uc3QgYXBpUmVxID0ge1xuICAgICAgLi4ucmVxLFxuICAgICAgdGltZVpvbmU6IG5ldyBUaW1lWm9uZShyZXEudGltZVpvbmUpLFxuICAgIH07XG4gICAgaWYgKHJlcS50aW1lU2xvdCkge1xuICAgICAgYXBpUmVxLnRpbWVTbG90ID0gbmV3IFRpbWVSYW5nZShyZXEudGltZVNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5zZXRHZW5lcmFsQXZhaWxhYmlsaXR5KGFwaVJlcSkucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0Qm9va2VkTWVldGluZ3MocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8TWVldGluZz4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmxpc3RCb29rZWRNZWV0aW5ncyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgcGFnaW5nT3B0aW9uczogbmV3IFBhZ2VkUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICAgIGN1cnNvcjogcmVxLmN1cnNvcixcbiAgICAgICAgICBwYWdlU2l6ZTogcmVxLnBhZ2VTaXplLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyczogbmV3IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzKHJlcS5maWx0ZXJzKSxcbiAgICAgICAgdGltZVpvbmU6IG5ldyBUaW1lWm9uZShyZXEudGltZVpvbmUpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IExpc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWVldGluZ3MgPSAocmVzcC5tZWV0aW5ncyB8fCBbXSkubWFwKChtZWV0aW5nKSA9PlxuICAgICAgICAgICAgbWVldGluZ0Zyb21BcGkobWVldGluZyksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgICBtZWV0aW5ncyxcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBjYW5jZWxNZWV0aW5nKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jYW5jZWxNZWV0aW5nKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVNZWV0aW5nKHJlcTogeyBtZWV0aW5nSWQ6IHN0cmluZzsgc3RhcnQ6IERhdGUgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAucmVzY2hlZHVsZU1lZXRpbmcoe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEF2YWlsYWJpbGl0eShyZXE6IHtcbiAgICBmaWx0ZXJzOiBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZTtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8QXZhaWxhYmlsaXR5UnVsZT4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0QXZhaWxhYmlsaXR5KHJlcSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IChyZXNwb25zZS5hdmFpbGFiaWxpdHlSdWxlcyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG9zdElkOiBhLmhvc3RJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICBtZWV0aW5nVHlwZUlkOiBhLm1lZXRpbmdUeXBlSWQgfHwgXCJcIixcbiAgICAgICAgICAgICAgZGF5OiBhLmRheSxcbiAgICAgICAgICAgICAgdGltZVNsb3Q6IGEudGltZVNsb3QsXG4gICAgICAgICAgICAgIHRpbWVab25lOiBhLnRpbWVab25lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlZFJlc3BvbnNlKFxuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgcmVzcG9uc2UubWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICByZXNwb25zZS5tZXRhZGF0YS5oYXNNb3JlLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qIHVwZGF0ZVByZWZlcmVuY2VzIHdpbGwgdXBkYXRlIHRoZSBob3N0J3MgcHJlZmVyZW5jZXMuXG4gICAqIEl0IGlzIGd1YXJhbnRlZWQgdG8gb25seSB1cGRhdGUgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICB1cGRhdGVQcmVmZXJlbmNlcyh7bWVldGluZ0ludGVncmF0aW9uOiBNZWV0aW5nU291cmNlLk1FRVRJTkdfU09VUkNFX0dPT0dMRV9NRUVUfSlcbiAgICogIHdpbGwgb25seSB1cGRhdGUgdGhlIHByZWZlcmVuY2UgbWVldGluZ0ludGVncmF0aW9uIHRvIEdvb2dsZSBNZWV0LiBLZWVwaW5nIHRoZSBvdGhlciBwcmVmZXJlbmNlcyB0aGUgc2FtZS5cbiAgICpcbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIGEgbGlzdCBvZiBrZXlzIHRvIHVwZGF0ZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICB1cGRhdGVQcmVmZXJlbmNlcyh7Li4ub2JqZWN0IHdpdGggYWxsIGZpZWxkc30sIFsnbWVldGluZ0ludGVncmF0aW9uJ10pXG4gICAqICAgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgZmllbGQgJ21lZXRpbmdJbnRlZ3JhdGlvbicgdG8gdGhlIHZhbHVlIGluIHByZWZlcmVuY2VzLlxuICAgKlxuICAgKiBDYWxsaW5nIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFuZCBubyBrZXlzIGlzIGEgbm8tb3AsIG9yIGFuIHVuZGVmaW5lZCBvYmplY3QuXG4gICAqIENhbGxpbmcgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgbm90IGluIGBQcmVmZXJlbmNlc2Agb3Igd2l0aCB1cGRhdGVGaWVsZHMgbm90IGxpbmtlZCB0byBwcm9wZXJ0aWVzIGluXG4gICAqIGBQcmVmZXJlbmNlc2AgaXMgYW4gZXJyb3IuXG4gICAqL1xuICB1cGRhdGVQcmVmZXJlbmNlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBwcmVmZXJlbmNlczogUGFydGlhbDxQcmVmZXJlbmNlcz47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFByZWZlcmVuY2VzKVtdO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5wcmVmZXJlbmNlcyxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlSG9zdFByZWZlcmVuY2VzKHtcbiAgICAgICAgaG9zdElkOiByZXEuaG9zdElkLFxuICAgICAgICBwcmVmZXJlbmNlczogcmVxLnByZWZlcmVuY2VzLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBnZXRQcmVmZXJlbmNlcyhyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8UHJlZmVyZW5jZXM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RQcmVmZXJlbmNlcyh7XG4gICAgICAgIGhvc3RJZDogcmVxLmhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlKSA9PiBQcmVmZXJlbmNlc0Zyb21BcGkocmVzcG9uc2UucHJlZmVyZW5jZXMpKSk7XG4gIH1cblxuICBnZXRNZWV0aW5nKG1lZXRpbmdJZDogc3RyaW5nLCBsb2NhdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZWV0aW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRIb3N0TWVldGluZyh7XG4gICAgICAgIG1lZXRpbmdJZDogbWVldGluZ0lkLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogR2V0SG9zdE1lZXRpbmdSZXNwb25zZSkgPT4gbWVldGluZ0Zyb21BcGkocmVzcC5tZWV0aW5nKSksXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlTWVldGluZ01ldGFkYXRhKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiBNZWV0aW5nTWV0YWRhdGE7XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnVwZGF0ZU1lZXRpbmdNZXRhZGF0YSh7XG4gICAgICAgIG1lZXRpbmdJZDogcmVxLm1lZXRpbmdJZCxcbiAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGhvc3RCb29rTWVldGluZyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgY29tbWVudDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogTWVldGluZ01ldGFkYXRhO1xuICAgIGF0dGVuZGVlczogKE9taXQ8XG4gICAgICBDb250YWN0LFxuICAgICAgXCJmcm9tUHJvdG9cIiB8IFwidG9BcGlKc29uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcInRpbWVab25lXCJcbiAgICA+ICYgeyB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2UgfSlbXTtcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPEJvb2tNZWV0aW5nUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5ob3N0Qm9va01lZXRpbmcoe1xuICAgICAgLi4ucmVxLFxuICAgICAgYXR0ZW5kZWVzOiByZXEuYXR0ZW5kZWVzLFxuICAgIH0pO1xuICB9XG5cbiAgaG9zdEJvb2tTZXNzaW9uKFxuICAgIHJlcTogSG9zdEJvb2tTZXNzaW9uUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxCb29rU2Vzc2lvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaG9zdEJvb2tTZXNzaW9uKHtcbiAgICAgIC4uLnJlcSxcbiAgICB9KTtcbiAgfVxuXG4gIGJvb2tNZWV0aW5nKHJlcTogSG9zdEJvb2tNZWV0aW5nUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ib29rTWVldGluZyhyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3A6IEhvc3RCb29rTWVldGluZ1Jlc3BvbnNlKSA9PiByZXNwLm1lZXRpbmdJZCkpO1xuICB9XG5cbiAgLy8gY3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlcyB3aWxsIGNyZWF0ZSB3aGF0IE1lZXRpbmcgU2NoZWR1bGVyIGRlZW1zIHRvIGJlIHRoZSBkZWZhdWx0IG1lZXRpbmcgdHlwZXMuXG4gIC8vIElmIHRoZSBjYWxlbmRhciBhbHJlYWR5IGhhcyBtZWV0aW5nIHR5cGVzLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBuby1vcC5cbiAgY3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlcyhyZXE6IHsgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMoeyBjYWxlbmRhcklkczogcmVxLmNhbGVuZGFySWRzIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGNyZWF0ZU1lZXRpbmdUeXBlKHJlcToge1xuICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZTtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgTWVldGluZ1R5cGUpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLm1lZXRpbmdUeXBlLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVNZWV0aW5nVHlwZSh7XG4gICAgICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZVRvQXBpKHsgbWVldGluZ1R5cGU6IHJlcS5tZWV0aW5nVHlwZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5pZCkpO1xuICB9XG5cbiAgLyogdXBkYXRlTWVldGluZ1R5cGUgd2lsbCB1cGRhdGUgdGhlIG1lZXRpbmcgdHlwZSBmaWVsZHMuXG4gICAqIEl0IGlzIGd1YXJhbnRlZWQgdG8gb25seSB1cGRhdGUgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICB1cGRhdGVNZWV0aW5nVHlwZSh7bmFtZTogJ09uYm9hcmRpbmcnfSlcbiAgICogIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICduYW1lJyB0byAnT25ib2FyZGluZycuIEtlZXBpbmcgdGhlIG90aGVyIGZpZWxkcyB0aGUgc2FtZS5cbiAgICpcbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIGEgbGlzdCBvZiBrZXlzIHRvIHVwZGF0ZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICB1cGRhdGVNZWV0aW5nVHlwZSh7Li4ub2JqZWN0IHdpdGggYWxsIGZpZWxkc30sIFsnbmFtZSddKVxuICAgKiAgIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICduYW1lJyB0byB0aGUgdmFsdWUgcGFzc2VkIGluLlxuICAgKlxuICAgKiBDYWxsaW5nIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFuZCBubyBrZXlzIGlzIGEgbm8tb3AsIG9yIGFuIHVuZGVmaW5lZCBvYmplY3QuXG4gICAqIENhbGxpbmcgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgbm90IGluIGBNZWV0aW5nVHlwZWAgb3Igd2l0aCB1cGRhdGVGaWVsZHMgbm90IGxpbmtlZCB0byBwcm9wZXJ0aWVzIGluXG4gICAqIGBNZWV0aW5nVHlwZWAgaXMgYW4gZXJyb3IuXG4gICAqL1xuICB1cGRhdGVNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlOiBQYXJ0aWFsPE1lZXRpbmdUeXBlPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgTWVldGluZ1R5cGUpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5tZWV0aW5nVHlwZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlTWVldGluZ1R5cGUoe1xuICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGVUb0FwaSh7IG1lZXRpbmdUeXBlOiByZXEubWVldGluZ1R5cGUgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZGVsZXRlTWVldGluZ1R5cGUocmVxOiB7IGlkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZGVsZXRlTWVldGluZ1R5cGUoeyBpZDogcmVxLmlkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldEhvc3RzRm9yQ2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx7XG4gICAgaG9zdFVzZXJzOiBIb3N0VXNlcltdO1xuICAgIGF2YWlsYWJpbGl0eVJ1bGVzOiB7IFtrZXk6IHN0cmluZ106IEF2YWlsYWJpbGl0eVJ1bGVMaXN0IH07XG4gIH0+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RzRm9yQ2FsZW5kYXIoeyBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaG9zdFVzZXJzID0gKHJlcy5ob3N0VXNlcnMgfHwgW10pLm1hcCgoaG9zdHVzZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBob3N0VXNlckZyb21BcGkoaG9zdHVzZXIpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYXZhaWxhYmlsaXR5UnVsZXMgPSByZXMuaG9zdFVzZXJBdmFpbGFiaWxpdHlSdWxlIHx8IHt9O1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RVc2VycyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVJ1bGVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIElzQ2FsZW5kYXJDb25maWd1cmVkKFxuICAgIHJlcTogSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPElzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5pc0NhbGVuZGFyQ29uZmlndXJlZChyZXEpO1xuICB9XG5cbiAgc2VuZE1lZXRpbmdSZXF1ZXN0RW1haWwoXG4gICAgcmVxOiBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2Uuc2VuZE1lZXRpbmdSZXF1ZXN0RW1haWwocmVxKTtcbiAgfVxuXG4gIGNyZWF0ZVNlcnZpY2UocmVxOiB7XG4gICAgc2VydmljZTogU2VydmljZTtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgU2VydmljZSlbXTtcbiAgICBIb3N0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEuc2VydmljZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlU2VydmljZSh7XG4gICAgICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlVG9BcGkoeyBzZXJ2aWNlOiByZXEuc2VydmljZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5pZCkpO1xuICB9XG5cbiAgdXBkYXRlU2VydmljZShyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNlcnZpY2U6IFBhcnRpYWw8U2VydmljZT47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFNlcnZpY2UpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5zZXJ2aWNlLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVTZXJ2aWNlKHtcbiAgICAgICAgaWQ6IHJlcS5pZCxcbiAgICAgICAgc2VydmljZTogU2VydmljZVR5cGVUb0FwaSh7IHNlcnZpY2U6IHJlcS5zZXJ2aWNlIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZVNlcnZpY2UocmVxOiB7IGlkOiBzdHJpbmc7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZVNlcnZpY2UoeyBpZDogcmVxLmlkLCBob3N0SWQ6IHJlcS5ob3N0SWQgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgbGlzdFNlcnZpY2VzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxTZXJ2aWNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0U2VydmljZXMoeyBob3N0SWQ6IHJlcS5ob3N0SWQgfSkucGlwZShcbiAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzIHx8ICFyZXMuc2VydmljZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5zZXJ2aWNlcy5tYXAoKHNlcnZpY2UpID0+XG4gICAgICAgICAgU2VydmljZUZyb21BcGkoe1xuICAgICAgICAgICAgc2VydmljZUFwaTogc2VydmljZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUdyb3VwKHJlcToge1xuICAgIGdyb3VwOiBHcm91cDtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgR3JvdXApW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLmdyb3VwLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVHcm91cCh7XG4gICAgICAgIGdyb3VwOiBHcm91cFR5cGVUb0FQaSh7IGdyb3VwOiByZXEuZ3JvdXAgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZUdyb3VwKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZ3JvdXA6IFBhcnRpYWw8R3JvdXA+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBHcm91cClbXTtcbiAgICBIb3N0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLmdyb3VwLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVHcm91cCh7XG4gICAgICAgIGlkOiByZXEuaWQsXG4gICAgICAgIGdyb3VwOiBHcm91cFR5cGVUb0FQaSh7IGdyb3VwOiByZXEuZ3JvdXAgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZGVsZXRlR3JvdXAocmVxOiB7IGlkOiBzdHJpbmc7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZUdyb3VwKHsgaWQ6IHJlcS5pZCwgaG9zdElkOiByZXEuaG9zdElkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGxpc3RHcm91cHMocmVxOiB7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPEdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0R3JvdXBzKHsgaG9zdElkOiByZXEuaG9zdElkIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLmdyb3Vwcykge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmdyb3Vwcy5tYXAoKGdyb3VwKSA9PlxuICAgICAgICAgIEdyb3VwRnJvbUFwaSh7XG4gICAgICAgICAgICBncm91cEFwaTogZ3JvdXAsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBnZXRHcm91cChyZXE6IHtcbiAgICBncm91cElkOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuZ2V0R3JvdXAocmVxKTtcbiAgfVxuICBnZXRTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2VJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0U2VydmljZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuZ2V0U2VydmljZShyZXEpO1xuICB9XG5cbiAgY2hlY2tHcm91cE9yU2VydmljZVNsdWdFeGlzdChyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBzbHVnSWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5leGlzdHMpKTtcbiAgfVxuXG4gIGNoZWNrRXZlbnRUeXBlU2x1Z0V4aXN0KHJlcToge1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcbiAgICBzbHVnSWRlbnRpZmllcjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jaGVja0V2ZW50VHlwZVNsdWdFeGlzdChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmV4aXN0cykpO1xuICB9XG5cbiAgZ2V0RW50aXR5QXNzb2NpYXRpb25zKHJlcToge1xuICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEVudGl0eUFzc29jaWF0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldEVudGl0eUFzc29jaWF0aW9ucyhyZXEpO1xuICB9XG5cbiAgZW5zdXJlU2Vzc2lvbkV2ZW50Q2FsZW5kYXJzRXhpc3QocmVxOiB7XG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZVNlc3Npb25FdmVudENhbGVuZGFyc0V4aXN0KHsgZXh0ZXJuYWxJZDogcmVxLmV4dGVybmFsSWQgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXM/LmNhbGVuZGFySWQgfHwgXCJcIikpO1xuICB9XG5cbiAgaG9zdERlbGV0ZUF0dGVuZGVlcyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBlbWFpbHNUb0RlbGV0ZTogRW1haWxzVG9EZWxldGVbXTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdERlbGV0ZUF0dGVuZGVlcyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXR0ZW5kZWVzKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnNJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RBdHRlbmRlZXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RBdHRlbmRlZXMocmVxKTtcbiAgfVxuXG4gIGNhbmNlbFNlc3Npb24ocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNhbmNlbFNlc3Npb24oe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgcmVzY2hlZHVsZVNlc3Npb24ocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgaXNSZWN1cnJpbmc6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnJlc2NoZWR1bGVTZXNzaW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIGxpc3RBdmFpbGFibGVUaW1lc2xvdHNGb3JTZXNzaW9uKHJlcToge1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICB1c2VySWRzOiBzdHJpbmdbXTtcbiAgfSk6IE9ic2VydmFibGU8VGltZVNwYW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAubGlzdEF2YWlsYWJsZVRpbWVzbG90c0ZvclNlc3Npb24ocmVxKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcCkgPT5cbiAgICAgICAgICByZXNwLnRpbWVTbG90cyA/IHJlc3AudGltZVNsb3RzLm1hcCgodHMpID0+IFRpbWVTcGFuRnJvbUFwaSh0cykpIDogW10sXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgbGlzdEV2ZW50VHlwZXNGb3JNdWx0aXBsZUNhbGVuZGFycyhyZXE6IHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnMocmVxKTtcbiAgfVxufVxuIl19
|
|
586
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvaG9zdC9ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQWVMLGdDQUFnQyxFQUdoQyxxQkFBcUIsRUFDckIsbUJBQW1CLEVBR25CLFNBQVMsRUFFVCxRQUFRLEdBU1QsTUFBTSxjQUFjLENBQUM7QUFJdEIsT0FBTyxFQUlMLGVBQWUsRUFFZixZQUFZLEVBRVosWUFBWSxFQUNaLGNBQWMsRUFJZCxjQUFjLEVBR2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGtDQUFrQyxHQUNuQyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBWSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUl4RSxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixjQUFxQztRQUFyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7SUFBRyxDQUFDO0lBRTdELGtIQUFrSDtJQUNsSCxXQUFXLENBQUMsR0FHWDtRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsV0FBVyxDQUFDO1lBQ1gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lBQ2xCLHdGQUF3RjtZQUN4Riw0QkFBNEIs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SUFDdkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBS2pCO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYzthQUN2QixpQkFBaUIsQ0FBQztZQUNqQixHQUFHLEdBQUc7U0FDUCxDQUFDO2FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxHQUtoQztRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsZ0NBQWdDLENBQUMsR0FBRyxDQUFDO2FBQ3JDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN0RSxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsa0NBQWtDLENBQUMsR0FFbEM7UUFDQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsa0NBQWtDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQzs7d0dBbjBCVSxXQUFXOzRHQUFYLFdBQVcsY0FERSxNQUFNOzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAsIG1hcFRvIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge1xuICBBdmFpbGFiaWxpdHlSdWxlTGlzdCxcbiAgQ2hlY2tHcm91cE9yU2VydmljZVNsdWdFeGlzdFJlc3BvbnNlLFxuICBDcmVhdGVDYWxlbmRhclJlcXVlc3RJbnRlcmZhY2UsXG4gIENyZWF0ZUNhbGVuZGFyUmVzcG9uc2UsXG4gIERheU9mV2VlayxcbiAgR2V0R3JvdXBSZXNwb25zZSxcbiAgR2V0SG9zdE1lZXRpbmdSZXNwb25zZSxcbiAgR2V0U2VydmljZVJlc3BvbnNlLFxuICBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlLFxuICBIb3N0Qm9va01lZXRpbmdSZXNwb25zZSxcbiAgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICBJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlLFxuICBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2UsXG4gIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMsXG4gIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlLFxuICBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSxcbiAgTWVldGluZ0hvc3RBcGlTZXJ2aWNlLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlLFxuICBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gIFRpbWVSYW5nZSxcbiAgVGltZVJhbmdlSW50ZXJmYWNlLFxuICBUaW1lWm9uZSxcbiAgVGltZVpvbmVJbnRlcmZhY2UsXG4gIFdlZWtkYXlBdmFpbGFiaWxpdHksXG4gIENvbnRhY3QsXG4gIEVtYWlsc1RvRGVsZXRlLFxuICBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICBMaXN0QXR0ZW5kZWVzUmVzcG9uc2UsXG4gIEJvb2tpbmdTb3VyY2UsXG4gIExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZSxcbn0gZnJvbSBcIi4uL19pbnRlcm5hbFwiO1xuXG5pbXBvcnQgeyBCb29rTWVldGluZ1Jlc3BvbnNlLCBCb29rU2Vzc2lvblJlc3BvbnNlIH0gZnJvbSBcIi4uL2d1ZXN0XCI7XG5cbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQsXG4gIEF2YWlsYWJpbGl0eVJ1bGUsXG4gIENhbGVuZGFyLFxuICBDYWxlbmRhckZyb21BcGksXG4gIEVudGl0eUFzc29jaWF0aW9ucyxcbiAgZ2V0RmllbGRNYXNrLFxuICBHcm91cCxcbiAgR3JvdXBGcm9tQXBpLFxuICBHcm91cFR5cGVUb0FQaSxcbiAgSG9zdFVybE1hcCxcbiAgTWVldGluZyxcbiAgTWVldGluZ0Zvcm0sXG4gIG1lZXRpbmdGcm9tQXBpLFxuICBNZWV0aW5nTWV0YWRhdGEsXG4gIE1lZXRpbmdUeXBlLFxuICBNZWV0aW5nVHlwZUZyb21BcGksXG4gIE1lZXRpbmdUeXBlVG9BcGksXG4gIFBhZ2VkUmVzcG9uc2UsXG4gIFByZWZlcmVuY2VzLFxuICBQcmVmZXJlbmNlc0Zyb21BcGksXG4gIFNlcnZpY2UsXG4gIFNlcnZpY2VGcm9tQXBpLFxuICBTZXJ2aWNlVHlwZVRvQXBpLFxuICBUaW1lU3BhbixcbiAgVGltZVNwYW5Gcm9tQXBpLFxufSBmcm9tIFwiLi4vc2hhcmVkXCI7XG5pbXBvcnQge1xuICBnZXRCb29raW5nVXJsSW1wbGVtZW50YXRpb24sXG4gIGdldEdlbmVyYWxCb29raW5nVXJsSW1wbGVtZW50YXRpb24sXG59IGZyb20gXCIuL3VybFwiO1xuaW1wb3J0IHsgSG9zdFVzZXIsIGhvc3RVc2VyRnJvbUFwaSB9IGZyb20gXCIuLi9zaGFyZWQvaG9zdC11c2VyXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgb25Qcm9kdWN0aW9uR2xvYmFsIH0gZnJvbSBcIi4uL3NoYXJlZC9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgSHR0cFJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBIb3N0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaG9zdEFQSVNlcnZpY2U6IE1lZXRpbmdIb3N0QXBpU2VydmljZSkge31cblxuICAvLyBVc2UgYnVpbGRIb3N0SWQgdG8gZ2V0IGFuIGlkZW50aWZpZXIgdGhhdCBjYW4gYmUgdXNlZCBpbiBzdWJzZXF1ZW50IHJlcXVlc3RzLiBTZWUgdmVuZGFzdGFhcGlzIGZvciBtb3JlIGRldGFpbHNcbiAgYnVpbGRIb3N0SWQocmVxOiB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczogQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1NldDtcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5idWlsZEhvc3RJZCh7XG4gICAgICAgIHVzZXJJZDogcmVxLnVzZXJJZCxcbiAgICAgICAgLy8gR3Jvc3MgdHlwZWNhc3QgZXhpc3RzIGJlY2F1c2UgSSB3YW50IHRvIHJlc3RyaWN0IHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSBtYXAgKGZvciBub3cpLlxuICAgICAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOlxuICAgICAgICAgIHJlcS5hcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzIGFzIGFueSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaG9zdElkIHx8IFwiXCIpKTtcbiAgfVxuXG4gIGRvZXNDYWxlbmRhckV4aXN0KGNhbGVuZGFySWRlbnRpZmllcjogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kb2VzQ2FsZW5kYXJFeGlzdCh7IGNhbGVuZGFySWRlbnRpZmllcjogY2FsZW5kYXJJZGVudGlmaWVyIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3ApID0+IHJlc3AuZXhpc3RzKSk7XG4gIH1cblxuICBnZXRDYWxlbmRhcihyZXE6IHsgY2FsZW5kYXJJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPENhbGVuZGFyPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRDYWxlbmRhcih7IGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhcklkIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gQ2FsZW5kYXJGcm9tQXBpKHJlcz8uY2FsZW5kYXIpKSk7XG4gIH1cblxuICBlbnN1cmVQZXJzb25hbENhbGVuZGFyRXhpc3RzKHJlcToge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQ7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0cyh7XG4gICAgICAgIHVzZXJJZDogcmVxLnVzZXJJZCxcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczpcbiAgICAgICAgICByZXEuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gKHJlcyA/IHJlcy5jYWxlbmRhcklkIDogXCJcIikpKTtcbiAgfVxuXG4gIGVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3QocmVxOiB7XG4gICAgZXh0ZXJuYWxJZHM6IHN0cmluZ1tdO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZW5zdXJlR3JvdXBDYWxlbmRhcnNFeGlzdCh7IGV4dGVybmFsSWRzOiByZXEuZXh0ZXJuYWxJZHMgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXM/LmNhbGVuZGFySWRzIHx8IFtdKSk7XG4gIH1cblxuICAvKlxuICAgICBjcmVhdGVDYWxlbmRhciBjcmVhdGVzIGEgY2FsZW5kYXIgd2hpY2ggbWVldGluZyB0eXBlcyBjYW4gYmUgY3JlYXRlZCBmb3IgYW5kIGV2ZW50cyBjYW4gYmUgYm9va2VkIG9uXG4gICAgIFRoZSBmaWVsZHMgb2YgYSBjYWxlbmRhciBhcmUgZG9jdW1lbnRlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vdmVuZGFzdGEvdmVuZGFzdGFhcGlzL2Jsb2IvbWFzdGVyL21lZXRpbmdzL3YxL3NoYXJlZC5wcm90b1xuICAgICovXG4gIGNyZWF0ZUNhbGVuZGFyKFxuICAgIHJlcTogQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPENyZWF0ZUNhbGVuZGFyUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5jcmVhdGVDYWxlbmRhcihyZXEpO1xuICB9XG5cbiAgdXBkYXRlQ2FsZW5kYXJTbHVnKGNhbGVuZGFySWQ6IHN0cmluZywgbmV3U2x1Zzogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVDYWxlbmRhcih7XG4gICAgICAgIGNhbGVuZGFySWQ6IGNhbGVuZGFySWQsXG4gICAgICAgIGNhbGVuZGFyVXBkYXRlOiB7IHNsdWc6IG5ld1NsdWcgfSxcbiAgICAgICAgZmllbGRNYXNrOiB7IHBhdGhzOiBbXCJzbHVnXCJdIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICB1cGRhdGVDYWxlbmRhckhvc3RVc2VySURzKFxuICAgIGNhbGVuZGFySWQ6IHN0cmluZyxcbiAgICByZXBsYWNlbWVudEhvc3RVc2VySWRzOiBzdHJpbmdbXSxcbiAgKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVDYWxlbmRhcih7XG4gICAgICAgIGNhbGVuZGFySWQ6IGNhbGVuZGFySWQsXG4gICAgICAgIGNhbGVuZGFyVXBkYXRlOiB7IGhvc3RVc2VySWRzOiByZXBsYWNlbWVudEhvc3RVc2VySWRzIH0sXG4gICAgICAgIGZpZWxkTWFzazogeyBwYXRoczogW1wiaG9zdF91c2VyX2lkc1wiXSB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZ2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzKHJlcToge1xuICAgIGNhbGVuZGFySWRzOiBzdHJpbmdbXTtcbiAgICBtZXRhZGF0YTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIH0pOiBPYnNlcnZhYmxlPHsgW2NhbGVuZGFySWQ6IHN0cmluZ106IE1lZXRpbmdUeXBlW10gfT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0TWVldGluZ1R5cGVzRm9yQ2FsZW5kYXJzKHsgY2FsZW5kYXJJZHM6IHJlcS5jYWxlbmRhcklkcyB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKCFyZXM/LmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKSB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXApLnJlZHVjZShcbiAgICAgICAgICAgIChjYWxlbmRhclRvTWVldGluZ1R5cGVNYXAsIGNhbGVuZGFySWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWVldGluZ1R5cGVzID0gKFxuICAgICAgICAgICAgICAgIHJlcy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcFtjYWxlbmRhcklkXT8ubWVldGluZ1R5cGVzIHx8IFtdXG4gICAgICAgICAgICAgICkubWFwKChtdCkgPT5cbiAgICAgICAgICAgICAgICBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IG10LFxuICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgICAgICAgICBjYWxlbmRhcklkLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5jYWxlbmRhclRvTWVldGluZ1R5cGVNYXAsXG4gICAgICAgICAgICAgICAgW2NhbGVuZGFySWRdOiBtZWV0aW5nVHlwZXMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30gYXMgeyBbY2FsZW5kYXJJZDogc3RyaW5nXTogTWVldGluZ1R5cGVbXSB9LFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGxpc3RNZWV0aW5nVHlwZXMgcmV0dXJucyBhIGxpc3Qgb2YgbWVldGluZyB0eXBlcyBmb3IgYSBob3N0XG4gICAgIEBwYXJhbSBob3N0SWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdFxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgb24gdGhlIG1lZXRpbmcgdHlwZSBib29raW5nIGxpbmtcbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICAgIC0gY2FsZW5kYXJTbHVnIElTIE5PVCBVU0VEIFRPIFJFVFJJRVZFIE1FRVRJTkcgVFlQRVMsIE9OTFkgVE8gTUFLRSBUSEUgQk9PS0lORyBVUkxTXG4gICAqL1xuICBsaXN0TWVldGluZ1R5cGVzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxNZWV0aW5nVHlwZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdE1lZXRpbmdUeXBlcyhyZXEpLnBpcGUoXG4gICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgaWYgKCFyZXNwIHx8ICFyZXNwLm1lZXRpbmdUeXBlcykge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcC5tZWV0aW5nVHlwZXMubWFwKChtdCkgPT4ge1xuICAgICAgICAgIHJldHVybiBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IG10LFxuICAgICAgICAgICAgY2FsZW5kYXJJZDogcmVxLmhvc3RJZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICAgZ2V0RXZlbnRUeXBlQnlJZCByZXR1cm5zIGEgc2luZ2xlIG1lZXRpbmcgdHlwZSBieSBJRC5cbiAgICAgQHBhcmFtIGV2ZW50VHlwZUlkOiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBldmVudCB0eXBlXG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBvbiB0aGUgbWVldGluZyB0eXBlIGJvb2tpbmcgbGlua1xuICAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgICAgLSBjYWxlbmRhclNsdWcgSVMgTk9UIFVTRUQgVE8gUkVUUklFVkUgVEhFIEVWRU5UIFRZUEUsIE9OTFkgVE8gTUFLRSBUSEUgQk9PS0lORyBVUkxcbiAgICovXG4gIGdldEV2ZW50VHlwZUJ5SWQocmVxOiB7XG4gICAgZXZlbnRUeXBlSWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGUgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRFdmVudFR5cGVCeUlkKHsgZXZlbnRUeXBlSWQ6IHJlcS5ldmVudFR5cGVJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcCkgPT4ge1xuICAgICAgICAgIGlmICghcmVzcC5tZWV0aW5nVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIE1lZXRpbmdUeXBlRnJvbUFwaSh7XG4gICAgICAgICAgICBtZWV0aW5nVHlwZUFwaTogcmVzcC5tZWV0aW5nVHlwZSxcbiAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlc3AubWVldGluZ1R5cGUuY2FsZW5kYXJJZCB8fCBcIlwiLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgICAgICAgY2FsZW5kYXJTbHVnOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEJvb2tpbmdVcmwgcmV0dXJucyBhIGxpbmsgdGhhdCBjYW4gYmUgdXNlZCB0byBib29rIGEgbWVldGluZyB3aXRoIHRoaXMgaG9zdC5cbiAgICAgQHBhcmFtIGNhbGVuZGFySWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdCBvciBncm91cGluZyBvZiBob3N0cyAoaS5lLiwgdGVhbSkuXG4gICAgIEBwYXJhbSBAZGVwcmVjYXRlZCBob3N0SWQ6IEFuIGlkZW50aWZpZXIgZm9yIGFuIGluZGl2aWR1YWwgaG9zdC5cbiAgICAgQHBhcmFtIG1lZXRpbmdUeXBlSWQ6IEFuIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBtZWV0aW5nIHR5cGUuIERlZmF1bHQ6IDMwLW1pbnV0ZXMuXG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgdXJsLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSB1c2VkIHRvIHByZS1maWxsIGNlcnRhaW4gZm9ybSBmaWVsZHMgYW5kIHdpbGwgYmUgc3RvcmVkIGR1cmluZyB0aGUgYm9va2luZyBwcm9jZXNzLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSBvYnRhaW5lZCBieSBzdWJzY3JpYmluZyB0byB0aGUgYm9va2luZyBldmVudC5cbiAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgKi9cbiAgZ2V0Qm9va2luZ1VybChyZXE6IHtcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIGNhbGVuZGFySWQgaW5zdGVhZC4gY2FsZW5kYXJJZCBub3QgcmVxdWlyZWQgdG8gYXZvaWQgYnJlYWtpbmcgZXhpc3RpbmcgY2xpZW50cy5cbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBjYWxlbmRhcklkPzogc3RyaW5nO1xuICAgIC8vIEBkZXByZWNhdGVkOiB1c2UgbWVldGluZ1R5cGVTbHVnIGluc3RlYWRcbiAgICBtZWV0aW5nVHlwZUlkPzogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlU2x1Zz86IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgICBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB8fCByZXEuaG9zdElkLFxuICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKCkgPyBFbnZpcm9ubWVudC5QUk9EIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgY2FsZW5kYXJTbHVnOiByZXEuY2FsZW5kYXJTbHVnLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEdlbmVyYWxCb29raW5nVXJsIHJldHVybnMgYSBsaW5rIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgbWVldGluZyB0eXBlIHRvIGJvb2sgd2l0aCB0aGUgZ2l2ZW4gY2FsZW5kYXIuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMgKGkuZS4sIHRlYW0pLlxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAqL1xuICBnZXRHZW5lcmFsQm9va2luZ1VybChyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBvZihcbiAgICAgIGdldEdlbmVyYWxCb29raW5nVXJsSW1wbGVtZW50YXRpb24oe1xuICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKCkgPyBFbnZpcm9ubWVudC5QUk9EIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQsXG4gICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRCb29raW5nVXJsc011bHRpIHJldHVybnMgYSBtYXBwaW5nIG9mIGhvc3RzIC0+IGV2ZW50IHR5cGVzIC0+IGJvb2tpbmcgbGlua3MuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMuXG4gICAgIEBwYXJhbSBtZWV0aW5nVHlwZVNsdWc6IG1lZXRpbmdUeXBlU2x1Z3MgYXJlIHBhc3NlZCBpbiB0aGUgZm9ybSB7aG9zdElkOiBbbWVldGluZ1R5cGVTbHVnMSwgbWVldGluZ1R5cGVTbHVnMl19XG4gICAgIEBwYXJhbSBtZXRhZGF0YTogb3B0aW9uYWwgbWV0YWRhdGEgdG8gaW5jbHVkZSBpbiB0aGUgdXJsLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSB1c2VkIHRvIHByZS1maWxsIGNlcnRhaW4gZm9ybSBmaWVsZHMgYW5kIHdpbGwgYmUgc3RvcmVkIGR1cmluZyB0aGUgYm9va2luZyBwcm9jZXNzLlxuICAgICAtIG1ldGFkYXRhIGNhbiBiZSBvYnRhaW5lZCBieSBzdWJzY3JpYmluZyB0byB0aGUgYm9va2luZyBldmVudC5cbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICovXG4gIGdldEJvb2tpbmdVcmxzTXVsdGkoXG4gICAgcmVxOiB7IFtjYWxlbmRhcklkOiBzdHJpbmddOiBzdHJpbmdbXSB9LFxuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPEhvc3RVcmxNYXA+IHtcbiAgICByZXR1cm4gb2YoXG4gICAgICBPYmplY3Qua2V5cyhyZXEpLnJlZHVjZSgoaG9zdE1hcCwgY2FsZW5kYXJJZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmhvc3RNYXAsXG4gICAgICAgICAgW2NhbGVuZGFySWRdOiByZXFbY2FsZW5kYXJJZF0ucmVkdWNlKFxuICAgICAgICAgICAgKG1lZXRpbmdUeXBlTWFwLCBtZWV0aW5nVHlwZVNsdWcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5tZWV0aW5nVHlwZU1hcCxcbiAgICAgICAgICAgICAgICBbbWVldGluZ1R5cGVTbHVnXTogZ2V0Qm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFySWQsXG4gICAgICAgICAgICAgICAgICBtZWV0aW5nVHlwZVNsdWcsXG4gICAgICAgICAgICAgICAgICBtZXRhZGF0YSxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJTbHVnLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9IGFzIHsgW21lZXRpbmdUeXBlSWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9LCB7fSBhcyBIb3N0VXJsTWFwKSxcbiAgICApO1xuICB9XG5cbiAgaXNIb3N0Q29uZmlndXJlZChyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8SXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5pc0hvc3RDb25maWd1cmVkKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlKSA9PiByZXNwKSk7XG4gIH1cblxuICBzZXRHZW5lcmFsQXZhaWxhYmlsaXR5KHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIHdlZWtkYXlzQXZhaWxhYmlsaXR5IGluc3RlYWRcbiAgICBkYXlzPzogRGF5T2ZXZWVrW107XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSB3ZWVrZGF5c0F2YWlsYWJpbGl0eSBpbnN0ZWFkXG4gICAgdGltZVNsb3Q/OiBUaW1lUmFuZ2VJbnRlcmZhY2U7XG4gICAgd2Vla2RheXNBdmFpbGFiaWxpdHk/OiBXZWVrZGF5QXZhaWxhYmlsaXR5W107XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgY29uc3QgYXBpUmVxID0ge1xuICAgICAgLi4ucmVxLFxuICAgICAgdGltZVpvbmU6IG5ldyBUaW1lWm9uZShyZXEudGltZVpvbmUpLFxuICAgIH07XG4gICAgaWYgKHJlcS50aW1lU2xvdCkge1xuICAgICAgYXBpUmVxLnRpbWVTbG90ID0gbmV3IFRpbWVSYW5nZShyZXEudGltZVNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5zZXRHZW5lcmFsQXZhaWxhYmlsaXR5KGFwaVJlcSkucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0Qm9va2VkTWVldGluZ3MocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8TWVldGluZz4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmxpc3RCb29rZWRNZWV0aW5ncyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgcGFnaW5nT3B0aW9uczogbmV3IFBhZ2VkUmVxdWVzdE9wdGlvbnMoe1xuICAgICAgICAgIGN1cnNvcjogcmVxLmN1cnNvcixcbiAgICAgICAgICBwYWdlU2l6ZTogcmVxLnBhZ2VTaXplLFxuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyczogbmV3IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzKHJlcS5maWx0ZXJzKSxcbiAgICAgICAgdGltZVpvbmU6IG5ldyBUaW1lWm9uZShyZXEudGltZVpvbmUpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IExpc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWVldGluZ3MgPSAocmVzcC5tZWV0aW5ncyB8fCBbXSkubWFwKChtZWV0aW5nKSA9PlxuICAgICAgICAgICAgbWVldGluZ0Zyb21BcGkobWVldGluZyksXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgICBtZWV0aW5ncyxcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBjYW5jZWxNZWV0aW5nKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jYW5jZWxNZWV0aW5nKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVNZWV0aW5nKHJlcTogeyBtZWV0aW5nSWQ6IHN0cmluZzsgc3RhcnQ6IERhdGUgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAucmVzY2hlZHVsZU1lZXRpbmcoe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEF2YWlsYWJpbGl0eShyZXE6IHtcbiAgICBmaWx0ZXJzOiBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgcGFnaW5nT3B0aW9uczogUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZTtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8QXZhaWxhYmlsaXR5UnVsZT4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0QXZhaWxhYmlsaXR5KHJlcSkucGlwZShcbiAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IChyZXNwb25zZS5hdmFpbGFiaWxpdHlSdWxlcyB8fCBbXSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLm1hcCgoYSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgaG9zdElkOiBhLmhvc3RJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICBtZWV0aW5nVHlwZUlkOiBhLm1lZXRpbmdUeXBlSWQgfHwgXCJcIixcbiAgICAgICAgICAgICAgZGF5OiBhLmRheSxcbiAgICAgICAgICAgICAgdGltZVNsb3Q6IGEudGltZVNsb3QsXG4gICAgICAgICAgICAgIHRpbWVab25lOiBhLnRpbWVab25lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlZFJlc3BvbnNlKFxuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgcmVzcG9uc2UubWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICByZXNwb25zZS5tZXRhZGF0YS5oYXNNb3JlLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qIHVwZGF0ZVByZWZlcmVuY2VzIHdpbGwgdXBkYXRlIHRoZSBob3N0J3MgcHJlZmVyZW5jZXMuXG4gICAqIEl0IGlzIGd1YXJhbnRlZWQgdG8gb25seSB1cGRhdGUgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICB1cGRhdGVQcmVmZXJlbmNlcyh7bWVldGluZ0ludGVncmF0aW9uOiBNZWV0aW5nU291cmNlLk1FRVRJTkdfU09VUkNFX0dPT0dMRV9NRUVUfSlcbiAgICogIHdpbGwgb25seSB1cGRhdGUgdGhlIHByZWZlcmVuY2UgbWVldGluZ0ludGVncmF0aW9uIHRvIEdvb2dsZSBNZWV0LiBLZWVwaW5nIHRoZSBvdGhlciBwcmVmZXJlbmNlcyB0aGUgc2FtZS5cbiAgICpcbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIGEgbGlzdCBvZiBrZXlzIHRvIHVwZGF0ZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICB1cGRhdGVQcmVmZXJlbmNlcyh7Li4ub2JqZWN0IHdpdGggYWxsIGZpZWxkc30sIFsnbWVldGluZ0ludGVncmF0aW9uJ10pXG4gICAqICAgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgZmllbGQgJ21lZXRpbmdJbnRlZ3JhdGlvbicgdG8gdGhlIHZhbHVlIGluIHByZWZlcmVuY2VzLlxuICAgKlxuICAgKiBDYWxsaW5nIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFuZCBubyBrZXlzIGlzIGEgbm8tb3AsIG9yIGFuIHVuZGVmaW5lZCBvYmplY3QuXG4gICAqIENhbGxpbmcgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgbm90IGluIGBQcmVmZXJlbmNlc2Agb3Igd2l0aCB1cGRhdGVGaWVsZHMgbm90IGxpbmtlZCB0byBwcm9wZXJ0aWVzIGluXG4gICAqIGBQcmVmZXJlbmNlc2AgaXMgYW4gZXJyb3IuXG4gICAqL1xuICB1cGRhdGVQcmVmZXJlbmNlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBwcmVmZXJlbmNlczogUGFydGlhbDxQcmVmZXJlbmNlcz47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFByZWZlcmVuY2VzKVtdO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5wcmVmZXJlbmNlcyxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlSG9zdFByZWZlcmVuY2VzKHtcbiAgICAgICAgaG9zdElkOiByZXEuaG9zdElkLFxuICAgICAgICBwcmVmZXJlbmNlczogcmVxLnByZWZlcmVuY2VzLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBnZXRQcmVmZXJlbmNlcyhyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8UHJlZmVyZW5jZXM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RQcmVmZXJlbmNlcyh7XG4gICAgICAgIGhvc3RJZDogcmVxLmhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlKSA9PiBQcmVmZXJlbmNlc0Zyb21BcGkocmVzcG9uc2UucHJlZmVyZW5jZXMpKSk7XG4gIH1cblxuICBnZXRNZWV0aW5nKG1lZXRpbmdJZDogc3RyaW5nLCBsb2NhdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxNZWV0aW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRIb3N0TWVldGluZyh7XG4gICAgICAgIG1lZXRpbmdJZDogbWVldGluZ0lkLFxuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogR2V0SG9zdE1lZXRpbmdSZXNwb25zZSkgPT4gbWVldGluZ0Zyb21BcGkocmVzcC5tZWV0aW5nKSksXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlTWVldGluZ01ldGFkYXRhKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhOiBNZWV0aW5nTWV0YWRhdGE7XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnVwZGF0ZU1lZXRpbmdNZXRhZGF0YSh7XG4gICAgICAgIG1lZXRpbmdJZDogcmVxLm1lZXRpbmdJZCxcbiAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGhvc3RCb29rTWVldGluZyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgY29tbWVudDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogTWVldGluZ01ldGFkYXRhO1xuICAgIGF0dGVuZGVlczogKE9taXQ8XG4gICAgICBDb250YWN0LFxuICAgICAgXCJmcm9tUHJvdG9cIiB8IFwidG9BcGlKc29uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcInRpbWVab25lXCJcbiAgICA+ICYgeyB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2UgfSlbXTtcbiAgICBsb2NhdGlvbj86IHN0cmluZztcbiAgICB1c2VySWQ/OiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZT86IEJvb2tpbmdTb3VyY2U7XG4gIH0pOiBPYnNlcnZhYmxlPEJvb2tNZWV0aW5nUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5ob3N0Qm9va01lZXRpbmcoe1xuICAgICAgLi4ucmVxLFxuICAgICAgYXR0ZW5kZWVzOiByZXEuYXR0ZW5kZWVzLFxuICAgIH0pO1xuICB9XG5cbiAgaG9zdEJvb2tTZXNzaW9uKFxuICAgIHJlcTogSG9zdEJvb2tTZXNzaW9uUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxCb29rU2Vzc2lvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaG9zdEJvb2tTZXNzaW9uKHtcbiAgICAgIC4uLnJlcSxcbiAgICB9KTtcbiAgfVxuXG4gIGJvb2tNZWV0aW5nKHJlcTogSG9zdEJvb2tNZWV0aW5nUmVxdWVzdEludGVyZmFjZSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ib29rTWVldGluZyhyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3A6IEhvc3RCb29rTWVldGluZ1Jlc3BvbnNlKSA9PiByZXNwLm1lZXRpbmdJZCkpO1xuICB9XG5cbiAgLy8gY3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlcyB3aWxsIGNyZWF0ZSB3aGF0IE1lZXRpbmcgU2NoZWR1bGVyIGRlZW1zIHRvIGJlIHRoZSBkZWZhdWx0IG1lZXRpbmcgdHlwZXMuXG4gIC8vIElmIHRoZSBjYWxlbmRhciBhbHJlYWR5IGhhcyBtZWV0aW5nIHR5cGVzLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBuby1vcC5cbiAgY3JlYXRlRGVmYXVsdE1lZXRpbmdUeXBlcyhyZXE6IHsgY2FsZW5kYXJJZHM6IHN0cmluZ1tdIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMoeyBjYWxlbmRhcklkczogcmVxLmNhbGVuZGFySWRzIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGNyZWF0ZU1lZXRpbmdUeXBlKHJlcToge1xuICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZTtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgTWVldGluZ1R5cGUpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLm1lZXRpbmdUeXBlLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVNZWV0aW5nVHlwZSh7XG4gICAgICAgIG1lZXRpbmdUeXBlOiBNZWV0aW5nVHlwZVRvQXBpKHsgbWVldGluZ1R5cGU6IHJlcS5tZWV0aW5nVHlwZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5pZCkpO1xuICB9XG5cbiAgLyogdXBkYXRlTWVldGluZ1R5cGUgd2lsbCB1cGRhdGUgdGhlIG1lZXRpbmcgdHlwZSBmaWVsZHMuXG4gICAqIEl0IGlzIGd1YXJhbnRlZWQgdG8gb25seSB1cGRhdGUgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICB1cGRhdGVNZWV0aW5nVHlwZSh7bmFtZTogJ09uYm9hcmRpbmcnfSlcbiAgICogIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICduYW1lJyB0byAnT25ib2FyZGluZycuIEtlZXBpbmcgdGhlIG90aGVyIGZpZWxkcyB0aGUgc2FtZS5cbiAgICpcbiAgICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBwcm92aWRlIGEgbGlzdCBvZiBrZXlzIHRvIHVwZGF0ZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICB1cGRhdGVNZWV0aW5nVHlwZSh7Li4ub2JqZWN0IHdpdGggYWxsIGZpZWxkc30sIFsnbmFtZSddKVxuICAgKiAgIHdpbGwgb25seSB1cGRhdGUgdGhlIGZpZWxkICduYW1lJyB0byB0aGUgdmFsdWUgcGFzc2VkIGluLlxuICAgKlxuICAgKiBDYWxsaW5nIHdpdGggYW4gZW1wdHkgb2JqZWN0IGFuZCBubyBrZXlzIGlzIGEgbm8tb3AsIG9yIGFuIHVuZGVmaW5lZCBvYmplY3QuXG4gICAqIENhbGxpbmcgd2l0aCBhbiBvYmplY3QgY29udGFpbmluZyBmaWVsZHMgbm90IGluIGBNZWV0aW5nVHlwZWAgb3Igd2l0aCB1cGRhdGVGaWVsZHMgbm90IGxpbmtlZCB0byBwcm9wZXJ0aWVzIGluXG4gICAqIGBNZWV0aW5nVHlwZWAgaXMgYW4gZXJyb3IuXG4gICAqL1xuICB1cGRhdGVNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlOiBQYXJ0aWFsPE1lZXRpbmdUeXBlPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgTWVldGluZ1R5cGUpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5tZWV0aW5nVHlwZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlTWVldGluZ1R5cGUoe1xuICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGVUb0FwaSh7IG1lZXRpbmdUeXBlOiByZXEubWVldGluZ1R5cGUgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZGVsZXRlTWVldGluZ1R5cGUocmVxOiB7IGlkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZGVsZXRlTWVldGluZ1R5cGUoeyBpZDogcmVxLmlkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldEhvc3RzRm9yQ2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx7XG4gICAgaG9zdFVzZXJzOiBIb3N0VXNlcltdO1xuICAgIGF2YWlsYWJpbGl0eVJ1bGVzOiB7IFtrZXk6IHN0cmluZ106IEF2YWlsYWJpbGl0eVJ1bGVMaXN0IH07XG4gIH0+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RzRm9yQ2FsZW5kYXIoeyBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgaG9zdFVzZXJzID0gKHJlcy5ob3N0VXNlcnMgfHwgW10pLm1hcCgoaG9zdHVzZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBob3N0VXNlckZyb21BcGkoaG9zdHVzZXIpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgYXZhaWxhYmlsaXR5UnVsZXMgPSByZXMuaG9zdFVzZXJBdmFpbGFiaWxpdHlSdWxlIHx8IHt9O1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RVc2VycyxcbiAgICAgICAgICAgIGF2YWlsYWJpbGl0eVJ1bGVzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIElzQ2FsZW5kYXJDb25maWd1cmVkKFxuICAgIHJlcTogSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPElzQ2FsZW5kYXJDb25maWd1cmVkUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5pc0NhbGVuZGFyQ29uZmlndXJlZChyZXEpO1xuICB9XG5cbiAgc2VuZE1lZXRpbmdSZXF1ZXN0RW1haWwoXG4gICAgcmVxOiBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPG51bGw+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2Uuc2VuZE1lZXRpbmdSZXF1ZXN0RW1haWwocmVxKTtcbiAgfVxuXG4gIGNyZWF0ZVNlcnZpY2UocmVxOiB7XG4gICAgc2VydmljZTogU2VydmljZTtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgU2VydmljZSlbXTtcbiAgICBIb3N0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEuc2VydmljZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlU2VydmljZSh7XG4gICAgICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlVG9BcGkoeyBzZXJ2aWNlOiByZXEuc2VydmljZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5pZCkpO1xuICB9XG5cbiAgdXBkYXRlU2VydmljZShyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHNlcnZpY2U6IFBhcnRpYWw8U2VydmljZT47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFNlcnZpY2UpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5zZXJ2aWNlLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVTZXJ2aWNlKHtcbiAgICAgICAgaWQ6IHJlcS5pZCxcbiAgICAgICAgc2VydmljZTogU2VydmljZVR5cGVUb0FwaSh7IHNlcnZpY2U6IHJlcS5zZXJ2aWNlIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZVNlcnZpY2UocmVxOiB7IGlkOiBzdHJpbmc7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZVNlcnZpY2UoeyBpZDogcmVxLmlkLCBob3N0SWQ6IHJlcS5ob3N0SWQgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgbGlzdFNlcnZpY2VzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxTZXJ2aWNlW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0U2VydmljZXMoeyBob3N0SWQ6IHJlcS5ob3N0SWQgfSkucGlwZShcbiAgICAgIG1hcCgocmVzKSA9PiB7XG4gICAgICAgIGlmICghcmVzIHx8ICFyZXMuc2VydmljZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5zZXJ2aWNlcy5tYXAoKHNlcnZpY2UpID0+XG4gICAgICAgICAgU2VydmljZUZyb21BcGkoe1xuICAgICAgICAgICAgc2VydmljZUFwaTogc2VydmljZSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUdyb3VwKHJlcToge1xuICAgIGdyb3VwOiBHcm91cDtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgR3JvdXApW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLmdyb3VwLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVHcm91cCh7XG4gICAgICAgIGdyb3VwOiBHcm91cFR5cGVUb0FQaSh7IGdyb3VwOiByZXEuZ3JvdXAgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZUdyb3VwKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgZ3JvdXA6IFBhcnRpYWw8R3JvdXA+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBHcm91cClbXTtcbiAgICBIb3N0SWQ/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLmdyb3VwLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVHcm91cCh7XG4gICAgICAgIGlkOiByZXEuaWQsXG4gICAgICAgIGdyb3VwOiBHcm91cFR5cGVUb0FQaSh7IGdyb3VwOiByZXEuZ3JvdXAgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgZGVsZXRlR3JvdXAocmVxOiB7IGlkOiBzdHJpbmc7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZUdyb3VwKHsgaWQ6IHJlcS5pZCwgaG9zdElkOiByZXEuaG9zdElkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGxpc3RHcm91cHMocmVxOiB7IGhvc3RJZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPEdyb3VwW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0R3JvdXBzKHsgaG9zdElkOiByZXEuaG9zdElkIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLmdyb3Vwcykge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmdyb3Vwcy5tYXAoKGdyb3VwKSA9PlxuICAgICAgICAgIEdyb3VwRnJvbUFwaSh7XG4gICAgICAgICAgICBncm91cEFwaTogZ3JvdXAsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBnZXRHcm91cChyZXE6IHtcbiAgICBncm91cElkOiBzdHJpbmc7XG4gICAgc2x1Zzogc3RyaW5nO1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxHZXRHcm91cFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuZ2V0R3JvdXAocmVxKTtcbiAgfVxuICBnZXRTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2VJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0U2VydmljZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuZ2V0U2VydmljZShyZXEpO1xuICB9XG5cbiAgY2hlY2tHcm91cE9yU2VydmljZVNsdWdFeGlzdChyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBzbHVnSWRlbnRpZmllcjogc3RyaW5nO1xuICAgIGNhdGVnb3J5OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5leGlzdHMpKTtcbiAgfVxuXG4gIGNoZWNrRXZlbnRUeXBlU2x1Z0V4aXN0KHJlcToge1xuICAgIGNhbGVuZGFySWQ6IHN0cmluZztcbiAgICBzbHVnSWRlbnRpZmllcjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jaGVja0V2ZW50VHlwZVNsdWdFeGlzdChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmV4aXN0cykpO1xuICB9XG5cbiAgZ2V0RW50aXR5QXNzb2NpYXRpb25zKHJlcToge1xuICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEVudGl0eUFzc29jaWF0aW9ucz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldEVudGl0eUFzc29jaWF0aW9ucyhyZXEpO1xuICB9XG5cbiAgZW5zdXJlU2Vzc2lvbkV2ZW50Q2FsZW5kYXJzRXhpc3QocmVxOiB7XG4gICAgZXh0ZXJuYWxJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZVNlc3Npb25FdmVudENhbGVuZGFyc0V4aXN0KHsgZXh0ZXJuYWxJZDogcmVxLmV4dGVybmFsSWQgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXM/LmNhbGVuZGFySWQgfHwgXCJcIikpO1xuICB9XG5cbiAgaG9zdERlbGV0ZUF0dGVuZGVlcyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBlbWFpbHNUb0RlbGV0ZTogRW1haWxzVG9EZWxldGVbXTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdERlbGV0ZUF0dGVuZGVlcyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXR0ZW5kZWVzKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHBhZ2luZ09wdGlvbnM6IFBhZ2VkUmVxdWVzdE9wdGlvbnNJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RBdHRlbmRlZXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RBdHRlbmRlZXMocmVxKTtcbiAgfVxuXG4gIGNhbmNlbFNlc3Npb24ocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgY2FuY2VsbGF0aW9uUmVhc29uOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNhbmNlbFNlc3Npb24oe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgcmVzY2hlZHVsZVNlc3Npb24ocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgaXNSZWN1cnJpbmc6IGJvb2xlYW47XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnJlc2NoZWR1bGVTZXNzaW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIGxpc3RBdmFpbGFibGVUaW1lc2xvdHNGb3JTZXNzaW9uKHJlcToge1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgdGltZVNwYW46IFRpbWVTcGFuO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICB1c2VySWRzOiBzdHJpbmdbXTtcbiAgfSk6IE9ic2VydmFibGU8VGltZVNwYW5bXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAubGlzdEF2YWlsYWJsZVRpbWVzbG90c0ZvclNlc3Npb24ocmVxKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcCkgPT5cbiAgICAgICAgICByZXNwLnRpbWVTbG90cyA/IHJlc3AudGltZVNsb3RzLm1hcCgodHMpID0+IFRpbWVTcGFuRnJvbUFwaSh0cykpIDogW10sXG4gICAgICAgICksXG4gICAgICApO1xuICB9XG5cbiAgbGlzdEV2ZW50VHlwZXNGb3JNdWx0aXBsZUNhbGVuZGFycyhyZXE6IHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG4gIH0pOiBPYnNlcnZhYmxlPExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnMocmVxKTtcbiAgfVxuICBcbn1cbiJdfQ==
|
|
@@ -13,6 +13,7 @@ export function CalendarFromApi(calendarAPI) {
|
|
|
13
13
|
hostUserIds: calendarAPI.hostUserIds || [],
|
|
14
14
|
applicationContext: calendarAPI.applicationContext || {},
|
|
15
15
|
encodedApplicationContext: '',
|
|
16
|
+
businessName: calendarAPI.businessName || '',
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
// From meetings/internal/meetingscheduler/calendar/model.go
|
|
@@ -27,4 +28,4 @@ export var KnownCalendarExternalIntegrations;
|
|
|
27
28
|
KnownCalendarExternalIntegrations["VSalesTeam"] = "v_sales_team";
|
|
28
29
|
KnownCalendarExternalIntegrations["VBusiness"] = "v_business";
|
|
29
30
|
})(KnownCalendarExternalIntegrations || (KnownCalendarExternalIntegrations = {}));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZWV0aW5nc19zZGsvc3JjL2xpYi9zaGFyZWQvY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQixZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFJbkUsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUF3QjtJQUNwRCxPQUFPO1FBQ0gsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRTtRQUN4QixZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVksSUFBSSxZQUFZLENBQUMscUJBQXFCO1FBQzVFLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUU7UUFDMUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUU7UUFDdEQsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjLElBQUksRUFBRTtRQUNoRCxVQUFVLEVBQUUsV0FBVyxDQUFDLFVBQVUsSUFBSSxFQUFFO1FBQ3hDLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUU7UUFDNUIsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksRUFBRTtRQUN4QyxhQUFhLEVBQUUsV0FBVyxDQUFDLGFBQWEsSUFBSSxFQUFFO1FBQzlDLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUU7UUFDMUMsa0JBQWtCLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUU7UUFDeEQseUJBQXlCLEVBQUUsRUFBRTtRQUM3QixZQUFZLEVBQUMsV0FBVyxDQUFDLFlBQVksSUFBSSxFQUFFO0tBQzlDLENBQUE7QUFDTCxDQUFDO0FBRUQsNERBQTREO0FBQzVELE1BQU0sQ0FBTixJQUFZLG1DQUlYO0FBSkQsV0FBWSxtQ0FBbUM7SUFDM0MsbUZBQTRDLENBQUE7SUFDNUMsK0RBQXdCLENBQUE7SUFDeEIsa0VBQTJCLENBQUE7QUFDL0IsQ0FBQyxFQUpXLG1DQUFtQyxLQUFuQyxtQ0FBbUMsUUFJOUM7QUFFRCxNQUFNLENBQU4sSUFBWSxpQ0FHWDtBQUhELFdBQVksaUNBQWlDO0lBQ3pDLGdFQUEyQixDQUFBO0lBQzNCLDZEQUF3QixDQUFBO0FBQzVCLENBQUMsRUFIVyxpQ0FBaUMsS0FBakMsaUNBQWlDLFFBRzVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDYWxlbmRhciBhcyBBUElDYWxlbmRhciwgQ2FsZW5kYXJUeXBlfSBmcm9tICcuLi9faW50ZXJuYWwnO1xuXG5leHBvcnQgdHlwZSBDYWxlbmRhciA9IE9taXQ8QVBJQ2FsZW5kYXIsICd0b0FwaUpzb24nPlxuXG5leHBvcnQgZnVuY3Rpb24gQ2FsZW5kYXJGcm9tQXBpKGNhbGVuZGFyQVBJOiBBUElDYWxlbmRhcik6IENhbGVuZGFyIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZDogY2FsZW5kYXJBUEkuaWQgfHwgJycsXG4gICAgICAgIGNhbGVuZGFyVHlwZTogY2FsZW5kYXJBUEkuY2FsZW5kYXJUeXBlIHx8IENhbGVuZGFyVHlwZS5DQUxFTkRBUl9UWVBFX0lOVkFMSUQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBjYWxlbmRhckFQSS5kaXNwbGF5TmFtZSB8fCAnJyxcbiAgICAgICAgZGlzcGxheVByb2ZpbGVVcmw6IGNhbGVuZGFyQVBJLmRpc3BsYXlQcm9maWxlVXJsIHx8ICcnLFxuICAgICAgICBkaXNwbGF5TG9nb1VybDogY2FsZW5kYXJBUEkuZGlzcGxheUxvZ29VcmwgfHwgJycsXG4gICAgICAgIGJvb2tpbmdVcmw6IGNhbGVuZGFyQVBJLmJvb2tpbmdVcmwgfHwgJycsXG4gICAgICAgIHNsdWc6IGNhbGVuZGFyQVBJLnNsdWcgfHwgJycsXG4gICAgICAgIGV4dGVybmFsSWQ6IGNhbGVuZGFyQVBJLmV4dGVybmFsSWQgfHwgJycsXG4gICAgICAgIGNyZWF0b3JVc2VySWQ6IGNhbGVuZGFyQVBJLmNyZWF0b3JVc2VySWQgfHwgJycsXG4gICAgICAgIGhvc3RVc2VySWRzOiBjYWxlbmRhckFQSS5ob3N0VXNlcklkcyB8fCBbXSxcbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0OiBjYWxlbmRhckFQSS5hcHBsaWNhdGlvbkNvbnRleHQgfHwge30sXG4gICAgICAgIGVuY29kZWRBcHBsaWNhdGlvbkNvbnRleHQ6ICcnLFxuICAgICAgICBidXNpbmVzc05hbWU6Y2FsZW5kYXJBUEkuYnVzaW5lc3NOYW1lIHx8ICcnLFxuICAgIH1cbn1cblxuLy8gRnJvbSBtZWV0aW5ncy9pbnRlcm5hbC9tZWV0aW5nc2NoZWR1bGVyL2NhbGVuZGFyL21vZGVsLmdvXG5leHBvcnQgZW51bSBLbm93bkNhbGVuZGFyQXBwbGljYXRpb25Db250ZXh0S2V5cyB7XG4gICAgRXh0ZXJuYWxJbnRlZ3JhdGlvbiA9ICdleHRlcm5hbF9pbnRlZ3JhdGlvbicsXG4gICAgQnVzaW5lc3MgPSAnYnVzaW5lc3NfaWQnLFxuICAgIFNhbGVzVGVhbSA9ICdzYWxlc190ZWFtX2lkJyxcbn1cblxuZXhwb3J0IGVudW0gS25vd25DYWxlbmRhckV4dGVybmFsSW50ZWdyYXRpb25zIHtcbiAgICBWU2FsZXNUZWFtID0gJ3Zfc2FsZXNfdGVhbScsXG4gICAgVkJ1c2luZXNzID0gJ3ZfYnVzaW5lc3MnXG59XG4iXX0=
|