@vendasta/meetings 1.9.1 → 1.10.1

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.
Files changed (52) hide show
  1. package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
  2. package/esm2020/lib/_internal/interfaces/meeting-external.interface.mjs +1 -1
  3. package/esm2020/lib/_internal/interfaces/meeting-guest.interface.mjs +1 -1
  4. package/esm2020/lib/_internal/interfaces/meeting-host.interface.mjs +1 -1
  5. package/esm2020/lib/_internal/interfaces/shared.interface.mjs +1 -1
  6. package/esm2020/lib/_internal/meeting-host.api.service.mjs +7 -2
  7. package/esm2020/lib/_internal/objects/annotations.mjs +1 -1
  8. package/esm2020/lib/_internal/objects/date-range.mjs +1 -1
  9. package/esm2020/lib/_internal/objects/field-mask.mjs +1 -1
  10. package/esm2020/lib/_internal/objects/google-meet.mjs +1 -1
  11. package/esm2020/lib/_internal/objects/groups-and-services.mjs +1 -1
  12. package/esm2020/lib/_internal/objects/index.mjs +3 -3
  13. package/esm2020/lib/_internal/objects/meeting-external.mjs +2 -2
  14. package/esm2020/lib/_internal/objects/meeting-guest.mjs +2 -2
  15. package/esm2020/lib/_internal/objects/meeting-host.mjs +169 -25
  16. package/esm2020/lib/_internal/objects/meeting-source.mjs +1 -1
  17. package/esm2020/lib/_internal/objects/meeting-type.mjs +1 -1
  18. package/esm2020/lib/_internal/objects/openapiv2.mjs +1 -1
  19. package/esm2020/lib/_internal/objects/shared.mjs +1 -1
  20. package/esm2020/lib/_internal/objects/zoom.mjs +1 -1
  21. package/esm2020/lib/host/host.service.mjs +14 -2
  22. package/esm2020/lib/index.mjs +1 -1
  23. package/esm2020/lib/shared/index.mjs +2 -1
  24. package/esm2020/lib/shared/meeting-stats.mjs +17 -0
  25. package/fesm2015/vendasta-meetings.mjs +201 -23
  26. package/fesm2015/vendasta-meetings.mjs.map +1 -1
  27. package/fesm2020/vendasta-meetings.mjs +201 -23
  28. package/fesm2020/vendasta-meetings.mjs.map +1 -1
  29. package/lib/_internal/interfaces/index.d.ts +2 -2
  30. package/lib/_internal/interfaces/meeting-external.interface.d.ts +1 -1
  31. package/lib/_internal/interfaces/meeting-guest.interface.d.ts +1 -1
  32. package/lib/_internal/interfaces/meeting-host.interface.d.ts +30 -8
  33. package/lib/_internal/meeting-host.api.service.d.ts +3 -2
  34. package/lib/_internal/objects/annotations.d.ts +1 -1
  35. package/lib/_internal/objects/date-range.d.ts +1 -1
  36. package/lib/_internal/objects/field-mask.d.ts +1 -1
  37. package/lib/_internal/objects/google-meet.d.ts +1 -1
  38. package/lib/_internal/objects/groups-and-services.d.ts +1 -1
  39. package/lib/_internal/objects/index.d.ts +2 -2
  40. package/lib/_internal/objects/meeting-external.d.ts +2 -2
  41. package/lib/_internal/objects/meeting-guest.d.ts +2 -2
  42. package/lib/_internal/objects/meeting-host.d.ts +47 -16
  43. package/lib/_internal/objects/meeting-source.d.ts +1 -1
  44. package/lib/_internal/objects/meeting-type.d.ts +1 -1
  45. package/lib/_internal/objects/openapiv2.d.ts +1 -1
  46. package/lib/_internal/objects/shared.d.ts +1 -1
  47. package/lib/_internal/objects/zoom.d.ts +1 -1
  48. package/lib/host/host.service.d.ts +6 -1
  49. package/lib/index.d.ts +1 -1
  50. package/lib/shared/index.d.ts +1 -0
  51. package/lib/shared/meeting-stats.d.ts +17 -0
  52. package/package.json +1 -1
@@ -2,7 +2,7 @@ import { Injectable } from "@angular/core";
2
2
  import { of } from "rxjs";
3
3
  import { map, mapTo } from "rxjs/operators";
4
4
  import { ListBookedMeetingsRequestFilters, MeetingHostApiService, PagedRequestOptions, TimeRange, TimeZone, } from "../_internal";
5
- import { answersToAPI, CalendarFromApi, getFieldMask, GroupFromApi, GroupTypeToAPi, meetingFromApi, MeetingTypeFromApi, MeetingTypeToApi, PagedResponse, PreferencesFromApi, ServiceFromApi, ServiceTypeToApi, TimeSpanFromApi, } from "../shared";
5
+ import { answersToAPI, CalendarFromApi, getFieldMask, GroupFromApi, GroupTypeToAPi, meetingFromApi, meetingStatsFromApi, MeetingTypeFromApi, MeetingTypeToApi, PagedResponse, PreferencesFromApi, ServiceFromApi, ServiceTypeToApi, TimeSpanFromApi, } from "../shared";
6
6
  import { getBookingUrlImplementation, getGeneralBookingUrlImplementation, } from "./url";
7
7
  import { hostUserFromApi } from "../shared/host-user";
8
8
  import { Environment, onProductionGlobal } from "../shared/environment";
@@ -383,6 +383,18 @@ export class HostService {
383
383
  hostCancelBatchMeeting(req) {
384
384
  return this.hostAPIService.hostCancelBatchMeeting(req).pipe(mapTo(null));
385
385
  }
386
+ // getMeetingStats returns aggregated meeting statistics for the host, backing the
387
+ // "My Meetings" dashboard card. timeSpan must be expressed in the caller's time zone;
388
+ // timeZone is used to bucket meetings into days and to align the comparison period.
389
+ getMeetingStats(req) {
390
+ return this.hostAPIService
391
+ .getMeetingStats({
392
+ timeSpan: req.timeSpan,
393
+ timeZone: req.timeZone,
394
+ businessId: req.businessId,
395
+ })
396
+ .pipe(map((resp) => meetingStatsFromApi(resp)));
397
+ }
386
398
  // hostListBatchAvailableTimeSlots returns valid chain start times for a
387
399
  // multi-service host booking. Each slot is the start of the first meeting
388
400
  // in the chain.
@@ -647,4 +659,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImpor
647
659
  type: Injectable,
648
660
  args: [{ providedIn: "root" }]
649
661
  }], ctorParameters: function () { return [{ type: i1.MeetingHostApiService }]; } });
650
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvaG9zdC9ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQW9CTCxnQ0FBZ0MsRUFJaEMscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUduQixTQUFTLEVBRVQsUUFBUSxHQVNULE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFDTCxZQUFZLEVBS1osZUFBZSxFQUVmLFlBQVksRUFFWixZQUFZLEVBQ1osY0FBYyxFQUlkLGNBQWMsRUFHZCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFFYixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGdCQUFnQixFQUVoQixlQUFlLEdBQ2hCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isa0NBQWtDLEdBQ25DLE1BQU0sT0FBTyxDQUFDO0FBQ2YsT0FBTyxFQUFZLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7O0FBS3hFLE1BQU0sT0FBTyxXQUFXO0lBQ3RCLFlBQW9CLGNBQXFDO1FBQXJDLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtJQUFHLENBQUM7SUFFN0Qsa0hBQWtIO0lBQ2xILFdBQVcsQ0FBQyxHQUdYO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYzthQUN2QixXQUFXLENBQUM7WUFDWCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07WUFDbEIsd0ZBQXdGO1lB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QUcsR0FBRztTQUNQLENBQUM7YUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBS2pCO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYzthQUN2QixpQkFBaUIsQ0FBQztZQUNqQixHQUFHLEdBQUc7U0FDUCxDQUFDO2FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxHQUtoQztRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsZ0NBQWdDLENBQUMsR0FBRyxDQUFDO2FBQ3JDLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN0RSxDQUNGLENBQUM7SUFDTixDQUFDO0lBRUQsa0NBQWtDLENBQUMsR0FFbEM7UUFDQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsa0NBQWtDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBSXJCO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O3dHQXo3QlUsV0FBVzs0R0FBWCxXQUFXLGNBREUsTUFBTTsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwLCBtYXBUbyB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtcbiAgQXZhaWxhYmlsaXR5UnVsZUxpc3QsXG4gIEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZSxcbiAgQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2UsXG4gIENoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3RSZXNwb25zZSxcbiAgQ29udGFjdEludGVyZmFjZSxcbiAgQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICBDcmVhdGVDYWxlbmRhclJlc3BvbnNlLFxuICBEYXlPZldlZWssXG4gIEdldEdyb3VwUmVzcG9uc2UsXG4gIEdldEhvc3RNZWV0aW5nUmVzcG9uc2UsXG4gIEdldFNlcnZpY2VSZXNwb25zZSxcbiAgSG9zdEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZSxcbiAgSG9zdEJvb2tNZWV0aW5nUmVxdWVzdEludGVyZmFjZSxcbiAgSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2UsXG4gIEhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSxcbiAgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXF1ZXN0SW50ZXJmYWNlLFxuICBJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlLFxuICBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2UsXG4gIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMsXG4gIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlLFxuICBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzVjJSZXNwb25zZSxcbiAgTWVldGluZ0hvc3RBcGlTZXJ2aWNlLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zLFxuICBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlLFxuICBTZW5kTWVldGluZ1JlcXVlc3RFbWFpbFJlcXVlc3RJbnRlcmZhY2UsXG4gIFRpbWVSYW5nZSxcbiAgVGltZVJhbmdlSW50ZXJmYWNlLFxuICBUaW1lWm9uZSxcbiAgVGltZVpvbmVJbnRlcmZhY2UsXG4gIFdlZWtkYXlBdmFpbGFiaWxpdHksXG4gIENvbnRhY3QsXG4gIEVtYWlsc1RvRGVsZXRlLFxuICBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICBMaXN0QXR0ZW5kZWVzUmVzcG9uc2UsXG4gIEJvb2tpbmdTb3VyY2UsXG4gIExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZSwgTGlzdEJvb2tpbmdUeXBlc0ZvckFJUmVzcG9uc2UsXG59IGZyb20gXCIuLi9faW50ZXJuYWxcIjtcblxuaW1wb3J0IHsgQm9va01lZXRpbmdSZXNwb25zZSwgQm9va1Nlc3Npb25SZXNwb25zZSB9IGZyb20gXCIuLi9ndWVzdFwiO1xuXG5pbXBvcnQge1xuICBhbnN3ZXJzVG9BUEksXG4gIEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQsXG4gIEF2YWlsYWJpbGl0eVJ1bGUsXG4gIEJvb2tlZE1lZXRpbmdHcm91cCxcbiAgQ2FsZW5kYXIsXG4gIENhbGVuZGFyRnJvbUFwaSxcbiAgRW50aXR5QXNzb2NpYXRpb25zLFxuICBnZXRGaWVsZE1hc2ssXG4gIEdyb3VwLFxuICBHcm91cEZyb21BcGksXG4gIEdyb3VwVHlwZVRvQVBpLFxuICBIb3N0VXJsTWFwLFxuICBNZWV0aW5nLFxuICBNZWV0aW5nRm9ybSxcbiAgbWVldGluZ0Zyb21BcGksXG4gIE1lZXRpbmdNZXRhZGF0YSxcbiAgTWVldGluZ1R5cGUsXG4gIE1lZXRpbmdUeXBlRnJvbUFwaSxcbiAgTWVldGluZ1R5cGVUb0FwaSxcbiAgUGFnZWRSZXNwb25zZSxcbiAgUHJlZmVyZW5jZXMsXG4gIFByZWZlcmVuY2VzRnJvbUFwaSxcbiAgU2VydmljZSxcbiAgU2VydmljZUZyb21BcGksXG4gIFNlcnZpY2VUeXBlVG9BcGksXG4gIFRpbWVTcGFuLFxuICBUaW1lU3BhbkZyb21BcGksXG59IGZyb20gXCIuLi9zaGFyZWRcIjtcbmltcG9ydCB7XG4gIGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbixcbiAgZ2V0R2VuZXJhbEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbixcbn0gZnJvbSBcIi4vdXJsXCI7XG5pbXBvcnQgeyBIb3N0VXNlciwgaG9zdFVzZXJGcm9tQXBpIH0gZnJvbSBcIi4uL3NoYXJlZC9ob3N0LXVzZXJcIjtcbmltcG9ydCB7IEVudmlyb25tZW50LCBvblByb2R1Y3Rpb25HbG9iYWwgfSBmcm9tIFwiLi4vc2hhcmVkL2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCAqIGFzIGUgZnJvbSBcIi4uL19pbnRlcm5hbC9lbnVtc1wiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSG9zdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGhvc3RBUElTZXJ2aWNlOiBNZWV0aW5nSG9zdEFwaVNlcnZpY2UpIHt9XG5cbiAgLy8gVXNlIGJ1aWxkSG9zdElkIHRvIGdldCBhbiBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCByZXF1ZXN0cy4gU2VlIHZlbmRhc3RhYXBpcyBmb3IgbW9yZSBkZXRhaWxzXG4gIGJ1aWxkSG9zdElkKHJlcToge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQ7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuYnVpbGRIb3N0SWQoe1xuICAgICAgICB1c2VySWQ6IHJlcS51c2VySWQsXG4gICAgICAgIC8vIEdyb3NzIHR5cGVjYXN0IGV4aXN0cyBiZWNhdXNlIEkgd2FudCB0byByZXN0cmljdCB0aGUgcHJvcGVydGllcyBvbiB0aGUgbWFwIChmb3Igbm93KS5cbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczpcbiAgICAgICAgICByZXEuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmhvc3RJZCB8fCBcIlwiKSk7XG4gIH1cblxuICBkb2VzQ2FsZW5kYXJFeGlzdChjYWxlbmRhcklkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZG9lc0NhbGVuZGFyRXhpc3QoeyBjYWxlbmRhcklkZW50aWZpZXI6IGNhbGVuZGFySWRlbnRpZmllciB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwKSA9PiByZXNwLmV4aXN0cykpO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0Q2FsZW5kYXIoeyBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IENhbGVuZGFyRnJvbUFwaShyZXM/LmNhbGVuZGFyKSkpO1xuICB9XG5cbiAgZW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0cyhyZXE6IHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOiBBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzU2V0O1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHMoe1xuICAgICAgICB1c2VySWQ6IHJlcS51c2VySWQsXG4gICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6XG4gICAgICAgICAgcmVxLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgYXMgYW55IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IChyZXMgPyByZXMuY2FsZW5kYXJJZCA6IFwiXCIpKSk7XG4gIH1cblxuICBlbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0KHJlcToge1xuICAgIGV4dGVybmFsSWRzOiBzdHJpbmdbXTtcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3QoeyBleHRlcm5hbElkczogcmVxLmV4dGVybmFsSWRzIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzPy5jYWxlbmRhcklkcyB8fCBbXSkpO1xuICB9XG5cbiAgLypcbiAgICAgY3JlYXRlQ2FsZW5kYXIgY3JlYXRlcyBhIGNhbGVuZGFyIHdoaWNoIG1lZXRpbmcgdHlwZXMgY2FuIGJlIGNyZWF0ZWQgZm9yIGFuZCBldmVudHMgY2FuIGJlIGJvb2tlZCBvblxuICAgICBUaGUgZmllbGRzIG9mIGEgY2FsZW5kYXIgYXJlIGRvY3VtZW50ZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL3ZlbmRhc3RhL3ZlbmRhc3RhYXBpcy9ibG9iL21hc3Rlci9tZWV0aW5ncy92MS9zaGFyZWQucHJvdG9cbiAgICAqL1xuICBjcmVhdGVDYWxlbmRhcihcbiAgICByZXE6IENyZWF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVDYWxlbmRhclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuY3JlYXRlQ2FsZW5kYXIocmVxKTtcbiAgfVxuXG4gIHVwZGF0ZUNhbGVuZGFyU2x1ZyhjYWxlbmRhcklkOiBzdHJpbmcsIG5ld1NsdWc6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2FsZW5kYXIoe1xuICAgICAgICBjYWxlbmRhcklkOiBjYWxlbmRhcklkLFxuICAgICAgICBjYWxlbmRhclVwZGF0ZTogeyBzbHVnOiBuZXdTbHVnIH0sXG4gICAgICAgIGZpZWxkTWFzazogeyBwYXRoczogW1wic2x1Z1wiXSB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgdXBkYXRlQ2FsZW5kYXJIb3N0VXNlcklEcyhcbiAgICBjYWxlbmRhcklkOiBzdHJpbmcsXG4gICAgcmVwbGFjZW1lbnRIb3N0VXNlcklkczogc3RyaW5nW10sXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2FsZW5kYXIoe1xuICAgICAgICBjYWxlbmRhcklkOiBjYWxlbmRhcklkLFxuICAgICAgICBjYWxlbmRhclVwZGF0ZTogeyBob3N0VXNlcklkczogcmVwbGFjZW1lbnRIb3N0VXNlcklkcyB9LFxuICAgICAgICBmaWVsZE1hc2s6IHsgcGF0aHM6IFtcImhvc3RfdXNlcl9pZHNcIl0gfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFycyhyZXE6IHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG4gICAgbWV0YWRhdGE6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICB9KTogT2JzZXJ2YWJsZTx7IFtjYWxlbmRhcklkOiBzdHJpbmddOiBNZWV0aW5nVHlwZVtdIH0+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFycyh7IGNhbGVuZGFySWRzOiByZXEuY2FsZW5kYXJJZHMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGlmICghcmVzPy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKS5yZWR1Y2UoXG4gICAgICAgICAgICAoY2FsZW5kYXJUb01lZXRpbmdUeXBlTWFwLCBjYWxlbmRhcklkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1lZXRpbmdUeXBlcyA9IChcbiAgICAgICAgICAgICAgICByZXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXBbY2FsZW5kYXJJZF0/Lm1lZXRpbmdUeXBlcyB8fCBbXVxuICAgICAgICAgICAgICApLm1hcCgobXQpID0+XG4gICAgICAgICAgICAgICAgTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJJZCxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uY2FsZW5kYXJUb01lZXRpbmdUeXBlTWFwLFxuICAgICAgICAgICAgICAgIFtjYWxlbmRhcklkXTogbWVldGluZ1R5cGVzLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9IGFzIHsgW2NhbGVuZGFySWQ6IHN0cmluZ106IE1lZXRpbmdUeXBlW10gfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvKlxuICAgICBsaXN0TWVldGluZ1R5cGVzIHJldHVybnMgYSBsaXN0IG9mIG1lZXRpbmcgdHlwZXMgZm9yIGEgaG9zdFxuICAgICBAcGFyYW0gaG9zdElkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3RcbiAgICAgQHBhcmFtIG1ldGFkYXRhOiBvcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIG9uIHRoZSBtZWV0aW5nIHR5cGUgYm9va2luZyBsaW5rXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAgICAtIGNhbGVuZGFyU2x1ZyBJUyBOT1QgVVNFRCBUTyBSRVRSSUVWRSBNRUVUSU5HIFRZUEVTLCBPTkxZIFRPIE1BS0UgVEhFIEJPT0tJTkcgVVJMU1xuICAgKi9cbiAgbGlzdE1lZXRpbmdUeXBlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RNZWV0aW5nVHlwZXMocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmICghcmVzcCB8fCAhcmVzcC5tZWV0aW5nVHlwZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3AubWVldGluZ1R5cGVzLm1hcCgobXQpID0+IHtcbiAgICAgICAgICByZXR1cm4gTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEV2ZW50VHlwZUJ5SWQgcmV0dXJucyBhIHNpbmdsZSBtZWV0aW5nIHR5cGUgYnkgSUQuXG4gICAgIEBwYXJhbSBldmVudFR5cGVJZDogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdHlwZVxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgb24gdGhlIG1lZXRpbmcgdHlwZSBib29raW5nIGxpbmtcbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICAgIC0gY2FsZW5kYXJTbHVnIElTIE5PVCBVU0VEIFRPIFJFVFJJRVZFIFRIRSBFVkVOVCBUWVBFLCBPTkxZIFRPIE1BS0UgVEhFIEJPT0tJTkcgVVJMXG4gICAqL1xuICBnZXRFdmVudFR5cGVCeUlkKHJlcToge1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPE1lZXRpbmdUeXBlIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0RXZlbnRUeXBlQnlJZCh7IGV2ZW50VHlwZUlkOiByZXEuZXZlbnRUeXBlSWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3AubWVldGluZ1R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IHJlc3AubWVldGluZ1R5cGUsXG4gICAgICAgICAgICBjYWxlbmRhcklkOiByZXNwLm1lZXRpbmdUeXBlLmNhbGVuZGFySWQgfHwgXCJcIixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRCb29raW5nVXJsIHJldHVybnMgYSBsaW5rIHRoYXQgY2FuIGJlIHVzZWQgdG8gYm9vayBhIG1lZXRpbmcgd2l0aCB0aGlzIGhvc3QuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMgKGkuZS4sIHRlYW0pLlxuICAgICBAcGFyYW0gQGRlcHJlY2F0ZWQgaG9zdElkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3QuXG4gICAgIEBwYXJhbSBtZWV0aW5nVHlwZUlkOiBBbiBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbWVldGluZyB0eXBlLiBEZWZhdWx0OiAzMC1taW51dGVzLlxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICovXG4gIGdldEJvb2tpbmdVcmwocmVxOiB7XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSBjYWxlbmRhcklkIGluc3RlYWQuIGNhbGVuZGFySWQgbm90IHJlcXVpcmVkIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNsaWVudHMuXG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgY2FsZW5kYXJJZD86IHN0cmluZztcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIG1lZXRpbmdUeXBlU2x1ZyBpbnN0ZWFkXG4gICAgbWVldGluZ1R5cGVJZD86IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZVNsdWc/OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBvZihcbiAgICAgIGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbih7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQgfHwgcmVxLmhvc3RJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpID8gRW52aXJvbm1lbnQuUFJPRCA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRHZW5lcmFsQm9va2luZ1VybCByZXR1cm5zIGEgbGluayB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIG1lZXRpbmcgdHlwZSB0byBib29rIHdpdGggdGhlIGdpdmVuIGNhbGVuZGFyLlxuICAgICBAcGFyYW0gY2FsZW5kYXJJZDogQW4gaWRlbnRpZmllciBmb3IgYW4gaW5kaXZpZHVhbCBob3N0IG9yIGdyb3VwaW5nIG9mIGhvc3RzIChpLmUuLCB0ZWFtKS5cbiAgICAgQHBhcmFtIG1ldGFkYXRhOiBvcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIGluIHRoZSB1cmwuXG4gICAgIC0gbWV0YWRhdGEgY2FuIGJlIHVzZWQgdG8gcHJlLWZpbGwgY2VydGFpbiBmb3JtIGZpZWxkcyBhbmQgd2lsbCBiZSBzdG9yZWQgZHVyaW5nIHRoZSBib29raW5nIHByb2Nlc3MuXG4gICAgIC0gbWV0YWRhdGEgY2FuIGJlIG9idGFpbmVkIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBib29raW5nIGV2ZW50LlxuICAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgKi9cbiAgZ2V0R2VuZXJhbEJvb2tpbmdVcmwocmVxOiB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gb2YoXG4gICAgICBnZXRHZW5lcmFsQm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpID8gRW52aXJvbm1lbnQuUFJPRCA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgIGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhcklkLFxuICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICAgZ2V0Qm9va2luZ1VybHNNdWx0aSByZXR1cm5zIGEgbWFwcGluZyBvZiBob3N0cyAtPiBldmVudCB0eXBlcyAtPiBib29raW5nIGxpbmtzLlxuICAgICBAcGFyYW0gY2FsZW5kYXJJZDogQW4gaWRlbnRpZmllciBmb3IgYW4gaW5kaXZpZHVhbCBob3N0IG9yIGdyb3VwaW5nIG9mIGhvc3RzLlxuICAgICBAcGFyYW0gbWVldGluZ1R5cGVTbHVnOiBtZWV0aW5nVHlwZVNsdWdzIGFyZSBwYXNzZWQgaW4gdGhlIGZvcm0ge2hvc3RJZDogW21lZXRpbmdUeXBlU2x1ZzEsIG1lZXRpbmdUeXBlU2x1ZzJdfVxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAqL1xuICBnZXRCb29raW5nVXJsc011bHRpKFxuICAgIHJlcTogeyBbY2FsZW5kYXJJZDogc3RyaW5nXTogc3RyaW5nW10gfSxcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxIb3N0VXJsTWFwPiB7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgT2JqZWN0LmtleXMocmVxKS5yZWR1Y2UoKGhvc3RNYXAsIGNhbGVuZGFySWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5ob3N0TWFwLFxuICAgICAgICAgIFtjYWxlbmRhcklkXTogcmVxW2NhbGVuZGFySWRdLnJlZHVjZShcbiAgICAgICAgICAgIChtZWV0aW5nVHlwZU1hcCwgbWVldGluZ1R5cGVTbHVnKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ubWVldGluZ1R5cGVNYXAsXG4gICAgICAgICAgICAgICAgW21lZXRpbmdUeXBlU2x1Z106IGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbih7XG4gICAgICAgICAgICAgICAgICBjYWxlbmRhcklkLFxuICAgICAgICAgICAgICAgICAgbWVldGluZ1R5cGVTbHVnLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSBhcyB7IFttZWV0aW5nVHlwZUlkOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSwge30gYXMgSG9zdFVybE1hcCksXG4gICAgKTtcbiAgfVxuXG4gIGlzSG9zdENvbmZpZ3VyZWQocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaXNIb3N0Q29uZmlndXJlZChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3A6IElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZSkgPT4gcmVzcCkpO1xuICB9XG5cbiAgc2V0R2VuZXJhbEF2YWlsYWJpbGl0eShyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSB3ZWVrZGF5c0F2YWlsYWJpbGl0eSBpbnN0ZWFkXG4gICAgZGF5cz86IERheU9mV2Vla1tdO1xuICAgIC8vIEBkZXByZWNhdGVkOiB1c2Ugd2Vla2RheXNBdmFpbGFiaWxpdHkgaW5zdGVhZFxuICAgIHRpbWVTbG90PzogVGltZVJhbmdlSW50ZXJmYWNlO1xuICAgIHdlZWtkYXlzQXZhaWxhYmlsaXR5PzogV2Vla2RheUF2YWlsYWJpbGl0eVtdO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIGNvbnN0IGFwaVJlcSA9IHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICB9O1xuICAgIGlmIChyZXEudGltZVNsb3QpIHtcbiAgICAgIGFwaVJlcS50aW1lU2xvdCA9IG5ldyBUaW1lUmFuZ2UocmVxLnRpbWVTbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2Uuc2V0R2VuZXJhbEF2YWlsYWJpbGl0eShhcGlSZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEJvb2tlZE1lZXRpbmdzKHJlcToge1xuICAgIGZpbHRlcnM6IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxQYWdlZFJlc3BvbnNlPE1lZXRpbmc+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5saXN0Qm9va2VkTWVldGluZ3Moe1xuICAgICAgICAuLi5yZXEsXG4gICAgICAgIHBhZ2luZ09wdGlvbnM6IG5ldyBQYWdlZFJlcXVlc3RPcHRpb25zKHtcbiAgICAgICAgICBjdXJzb3I6IHJlcS5jdXJzb3IsXG4gICAgICAgICAgcGFnZVNpemU6IHJlcS5wYWdlU2l6ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcnM6IG5ldyBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVycyhyZXEuZmlsdGVycyksXG4gICAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lZXRpbmdzID0gKHJlc3AubWVldGluZ3MgfHwgW10pLm1hcCgobWVldGluZykgPT5cbiAgICAgICAgICAgIG1lZXRpbmdGcm9tQXBpKG1lZXRpbmcpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYWdlZFJlc3BvbnNlKFxuICAgICAgICAgICAgbWVldGluZ3MsXG4gICAgICAgICAgICByZXNwLnBhZ2luZ01ldGFkYXRhLm5leHRDdXJzb3IsXG4gICAgICAgICAgICByZXNwLnBhZ2luZ01ldGFkYXRhLmhhc01vcmUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsTWVldGluZyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBjYW5jZWxsYXRpb25SZWFzb246IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY2FuY2VsTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICByZXNjaGVkdWxlTWVldGluZyhyZXE6IHsgbWVldGluZ0lkOiBzdHJpbmc7IHN0YXJ0OiBEYXRlOyBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZSB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5yZXNjaGVkdWxlTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmlsaXR5KHJlcToge1xuICAgIGZpbHRlcnM6IExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZTtcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8UGFnZWRSZXNwb25zZTxBdmFpbGFiaWxpdHlSdWxlPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RBdmFpbGFiaWxpdHkocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gKHJlc3BvbnNlLmF2YWlsYWJpbGl0eVJ1bGVzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAubWFwKChhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3N0SWQ6IGEuaG9zdElkIHx8IFwiXCIsXG4gICAgICAgICAgICAgIG1lZXRpbmdUeXBlSWQ6IGEubWVldGluZ1R5cGVJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICBkYXk6IGEuZGF5LFxuICAgICAgICAgICAgICB0aW1lU2xvdDogYS50aW1lU2xvdCxcbiAgICAgICAgICAgICAgdGltZVpvbmU6IGEudGltZVpvbmUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICByZXNwb25zZS5tZXRhZGF0YS5uZXh0Q3Vyc29yLFxuICAgICAgICAgIHJlc3BvbnNlLm1ldGFkYXRhLmhhc01vcmUsXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyogdXBkYXRlUHJlZmVyZW5jZXMgd2lsbCB1cGRhdGUgdGhlIGhvc3QncyBwcmVmZXJlbmNlcy5cbiAgICogSXQgaXMgZ3VhcmFudGVlZCB0byBvbmx5IHVwZGF0ZSB0aGUgZmllbGRzIHByb3ZpZGVkLlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogIHVwZGF0ZVByZWZlcmVuY2VzKHttZWV0aW5nSW50ZWdyYXRpb246IE1lZXRpbmdTb3VyY2UuTUVFVElOR19TT1VSQ0VfR09PR0xFX01FRVR9KVxuICAgKiAgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgcHJlZmVyZW5jZSBtZWV0aW5nSW50ZWdyYXRpb24gdG8gR29vZ2xlIE1lZXQuIEtlZXBpbmcgdGhlIG90aGVyIHByZWZlcmVuY2VzIHRoZSBzYW1lLlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgYSBsaXN0IG9mIGtleXMgdG8gdXBkYXRlIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgIHVwZGF0ZVByZWZlcmVuY2VzKHsuLi5vYmplY3Qgd2l0aCBhbGwgZmllbGRzfSwgWydtZWV0aW5nSW50ZWdyYXRpb24nXSlcbiAgICogICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbWVldGluZ0ludGVncmF0aW9uJyB0byB0aGUgdmFsdWUgaW4gcHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIENhbGxpbmcgd2l0aCBhbiBlbXB0eSBvYmplY3QgYW5kIG5vIGtleXMgaXMgYSBuby1vcCwgb3IgYW4gdW5kZWZpbmVkIG9iamVjdC5cbiAgICogQ2FsbGluZyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIGZpZWxkcyBub3QgaW4gYFByZWZlcmVuY2VzYCBvciB3aXRoIHVwZGF0ZUZpZWxkcyBub3QgbGlua2VkIHRvIHByb3BlcnRpZXMgaW5cbiAgICogYFByZWZlcmVuY2VzYCBpcyBhbiBlcnJvci5cbiAgICovXG4gIHVwZGF0ZVByZWZlcmVuY2VzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIHByZWZlcmVuY2VzOiBQYXJ0aWFsPFByZWZlcmVuY2VzPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgUHJlZmVyZW5jZXMpW107XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLnByZWZlcmVuY2VzLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVIb3N0UHJlZmVyZW5jZXMoe1xuICAgICAgICBob3N0SWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgIHByZWZlcmVuY2VzOiByZXEucHJlZmVyZW5jZXMsXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldFByZWZlcmVuY2VzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxQcmVmZXJlbmNlcz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0SG9zdFByZWZlcmVuY2VzKHtcbiAgICAgICAgaG9zdElkOiByZXEuaG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IFByZWZlcmVuY2VzRnJvbUFwaShyZXNwb25zZS5wcmVmZXJlbmNlcykpKTtcbiAgfVxuXG4gIGdldE1lZXRpbmcobWVldGluZ0lkOiBzdHJpbmcsIGxvY2F0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1lZXRpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RNZWV0aW5nKHtcbiAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWQsXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBHZXRIb3N0TWVldGluZ1Jlc3BvbnNlKSA9PiBtZWV0aW5nRnJvbUFwaShyZXNwLm1lZXRpbmcpKSxcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVNZWV0aW5nTWV0YWRhdGEocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IE1lZXRpbmdNZXRhZGF0YTtcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlTWVldGluZ01ldGFkYXRhKHtcbiAgICAgICAgbWVldGluZ0lkOiByZXEubWVldGluZ0lkLFxuICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgaG9zdEJvb2tNZWV0aW5nKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICBjb21tZW50OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiBNZWV0aW5nTWV0YWRhdGE7XG4gICAgYXR0ZW5kZWVzOiAoT21pdDxcbiAgICAgIENvbnRhY3QsXG4gICAgICBcImZyb21Qcm90b1wiIHwgXCJ0b0FwaUpzb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwidGltZVpvbmVcIlxuICAgID4gJiB7IHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZSB9KVtdO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8Qm9va01lZXRpbmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RCb29rTWVldGluZyh7XG4gICAgICAuLi5yZXEsXG4gICAgICBhdHRlbmRlZXM6IHJlcS5hdHRlbmRlZXMsXG4gICAgfSk7XG4gIH1cblxuICBob3N0Qm9va1Nlc3Npb24oXG4gICAgcmVxOiBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPEJvb2tTZXNzaW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5ob3N0Qm9va1Nlc3Npb24oe1xuICAgICAgLi4ucmVxLFxuICAgIH0pO1xuICB9XG5cbiAgYm9va01lZXRpbmcocmVxOiBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmJvb2tNZWV0aW5nKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2UpID0+IHJlc3AubWVldGluZ0lkKSk7XG4gIH1cblxuICAvLyBsaXN0Qm9va2VkTWVldGluZ3NWMiByZXR1cm5zIGJvb2tpbmdzIGdyb3VwZWQgYnkgYm9va2luZ19ncm91cF9pZC5cbiAgLy8gU3RhbmRhbG9uZSBtZWV0aW5ncyBhcHBlYXIgYXMgYSBzaW5nbGUtZW50cnkgQm9va2VkTWVldGluZ0dyb3VwIHdpdGggYW4gZW1wdHlcbiAgLy8gYm9va2luZ0dyb3VwSWQ7IGJhdGNoIGJvb2tpbmdzIGFwcGVhciBhcyBvbmUgQm9va2VkTWVldGluZ0dyb3VwIHdpdGggTiBzaWJsaW5ncy5cbiAgbGlzdEJvb2tlZE1lZXRpbmdzVjIocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8Qm9va2VkTWVldGluZ0dyb3VwPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAubGlzdEJvb2tlZE1lZXRpbmdzVjIoe1xuICAgICAgICBmaWx0ZXJzOiBuZXcgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMocmVxLmZpbHRlcnMpLFxuICAgICAgICBwYWdpbmdPcHRpb25zOiBuZXcgUGFnZWRSZXF1ZXN0T3B0aW9ucyh7XG4gICAgICAgICAgY3Vyc29yOiByZXEuY3Vyc29yLFxuICAgICAgICAgIHBhZ2VTaXplOiByZXEucGFnZVNpemUsXG4gICAgICAgIH0pLFxuICAgICAgICB0aW1lWm9uZTogbmV3IFRpbWVab25lKHJlcS50aW1lWm9uZSksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogTGlzdEJvb2tlZE1lZXRpbmdzVjJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvb2tpbmdzID0gKHJlc3AuYm9va2luZ3MgfHwgW10pLm1hcCgoYm9va2luZykgPT4gKHtcbiAgICAgICAgICAgIGJvb2tpbmdHcm91cElkOiBib29raW5nLmJvb2tpbmdHcm91cElkIHx8IFwiXCIsXG4gICAgICAgICAgICBtZWV0aW5nczogKGJvb2tpbmcubWVldGluZ3MgfHwgW10pLm1hcCgobWVldGluZykgPT5cbiAgICAgICAgICAgICAgbWVldGluZ0Zyb21BcGkobWVldGluZyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgICBib29raW5ncyxcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBob3N0Qm9va0JhdGNoTWVldGluZyBib29rcyBhIG1lZXRpbmcgb24gdGhlIGhvc3QgY2FsZW5kYXIg4oCUIHNpbmdsZS1zZXJ2aWNlXG4gIC8vIChOPTEgdGFyZ2V0KSBvciBtdWx0aS1zZXJ2aWNlIChOPjEgb3JkZXJlZCB0YXJnZXRzKS4gUmV0dXJucyB0aGUgYm9va2luZ19ncm91cF9pZC5cbiAgaG9zdEJvb2tCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIHRhcmdldHM6IEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZVtdO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGF0dGVuZGVlcz86IENvbnRhY3RJbnRlcmZhY2VbXTtcbiAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBmb3JtQW5zd2Vycz86IE1lZXRpbmdGb3JtO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICAgIGJvb2tpbmdPcmlnaW5JZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0Qm9va0JhdGNoTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgZm9ybUFuc3dlcnM6IGFuc3dlcnNUb0FQSShyZXEuZm9ybUFuc3dlcnMpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UpID0+IHJlc3AuYm9va2luZ0dyb3VwSWQpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGhvc3RSZXNjaGVkdWxlQmF0Y2hNZWV0aW5nIGFjY2VwdHMgZWl0aGVyIGEgc2luZ2xlIG1lZXRpbmdfaWQgb3IgYSBib29raW5nX2dyb3VwX2lkLlxuICAvLyBXaGVuIGEgYm9va2luZ19ncm91cF9pZCBpcyBwYXNzZWQgdGhlIHNlcnZlciByZXNjaGVkdWxlcyBldmVyeSBzaWJsaW5nIGF0b21pY2FsbHksXG4gIC8vIHByZXNlcnZpbmcgcGVyLXNpYmxpbmcgZHVyYXRpb25zIGFuZCBzaGlmdGluZyBhbGwgYnkgdGhlIHNhbWUgZGVsdGEuXG4gIGhvc3RSZXNjaGVkdWxlQmF0Y2hNZWV0aW5nKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgbG9jYXRpb24/OiBzdHJpbmc7XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdFJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxKVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgLy8gaG9zdENhbmNlbEJhdGNoTWVldGluZyBhY2NlcHRzIGVpdGhlciBhIHNpbmdsZSBtZWV0aW5nX2lkIG9yIGEgYm9va2luZ19ncm91cF9pZC5cbiAgLy8gRm9yIHBhcnRpYWwtZ3JvdXAgY2FuY2VsbGF0aW9uIHRoZSBGRSBpc3N1ZXMgTiBwYXJhbGxlbCBjYWxscyBlYWNoIHdpdGggdGhlXG4gIC8vIGluZGl2aWR1YWwgbWVldGluZ19pZC5cbiAgaG9zdENhbmNlbEJhdGNoTWVldGluZyhyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbj86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RDYW5jZWxCYXRjaE1lZXRpbmcocmVxKS5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIC8vIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMgcmV0dXJucyB2YWxpZCBjaGFpbiBzdGFydCB0aW1lcyBmb3IgYVxuICAvLyBtdWx0aS1zZXJ2aWNlIGhvc3QgYm9va2luZy4gRWFjaCBzbG90IGlzIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbWVldGluZ1xuICAvLyBpbiB0aGUgY2hhaW4uXG4gIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2VbXTtcbiAgICB0aW1lU3BhbjogVGltZVNwYW47XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxUaW1lU3BhbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0TGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwLmlzb1RpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcC5pc29UaW1lU2xvdHMubWFwKChpc28pID0+ICh7XG4gICAgICAgICAgICAgIHN0YXJ0OiBuZXcgRGF0ZShpc28uc3RhcnQpLFxuICAgICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGlzby5lbmQpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMgd2lsbCBjcmVhdGUgd2hhdCBNZWV0aW5nIFNjaGVkdWxlciBkZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBtZWV0aW5nIHR5cGVzLlxuICAvLyBJZiB0aGUgY2FsZW5kYXIgYWxyZWFkeSBoYXMgbWVldGluZyB0eXBlcywgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGEgbm8tb3AuXG4gIGNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMocmVxOiB7IGNhbGVuZGFySWRzOiBzdHJpbmdbXSB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzKHsgY2FsZW5kYXJJZHM6IHJlcS5jYWxlbmRhcklkcyB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBjcmVhdGVNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGU7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIE1lZXRpbmdUeXBlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5tZWV0aW5nVHlwZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlTWVldGluZ1R5cGUoe1xuICAgICAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGVUb0FwaSh7IG1lZXRpbmdUeXBlOiByZXEubWVldGluZ1R5cGUgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIC8qIHVwZGF0ZU1lZXRpbmdUeXBlIHdpbGwgdXBkYXRlIHRoZSBtZWV0aW5nIHR5cGUgZmllbGRzLlxuICAgKiBJdCBpcyBndWFyYW50ZWVkIHRvIG9ubHkgdXBkYXRlIHRoZSBmaWVsZHMgcHJvdmlkZWQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgdXBkYXRlTWVldGluZ1R5cGUoe25hbWU6ICdPbmJvYXJkaW5nJ30pXG4gICAqICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbmFtZScgdG8gJ09uYm9hcmRpbmcnLiBLZWVwaW5nIHRoZSBvdGhlciBmaWVsZHMgdGhlIHNhbWUuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSBhIGxpc3Qgb2Yga2V5cyB0byB1cGRhdGUgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICAgdXBkYXRlTWVldGluZ1R5cGUoey4uLm9iamVjdCB3aXRoIGFsbCBmaWVsZHN9LCBbJ25hbWUnXSlcbiAgICogICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbmFtZScgdG8gdGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAgICpcbiAgICogQ2FsbGluZyB3aXRoIGFuIGVtcHR5IG9iamVjdCBhbmQgbm8ga2V5cyBpcyBhIG5vLW9wLCBvciBhbiB1bmRlZmluZWQgb2JqZWN0LlxuICAgKiBDYWxsaW5nIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgZmllbGRzIG5vdCBpbiBgTWVldGluZ1R5cGVgIG9yIHdpdGggdXBkYXRlRmllbGRzIG5vdCBsaW5rZWQgdG8gcHJvcGVydGllcyBpblxuICAgKiBgTWVldGluZ1R5cGVgIGlzIGFuIGVycm9yLlxuICAgKi9cbiAgdXBkYXRlTWVldGluZ1R5cGUocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZTogUGFydGlhbDxNZWV0aW5nVHlwZT47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIE1lZXRpbmdUeXBlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEubWVldGluZ1R5cGUsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnVwZGF0ZU1lZXRpbmdUeXBlKHtcbiAgICAgICAgaWQ6IHJlcS5pZCxcbiAgICAgICAgbWVldGluZ1R5cGU6IE1lZXRpbmdUeXBlVG9BcGkoeyBtZWV0aW5nVHlwZTogcmVxLm1lZXRpbmdUeXBlIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZU1lZXRpbmdUeXBlKHJlcTogeyBpZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZU1lZXRpbmdUeXBlKHsgaWQ6IHJlcS5pZCB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBnZXRIb3N0c0ZvckNhbGVuZGFyKHJlcTogeyBjYWxlbmRhcklkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8e1xuICAgIGhvc3RVc2VyczogSG9zdFVzZXJbXTtcbiAgICBhdmFpbGFiaWxpdHlSdWxlczogeyBba2V5OiBzdHJpbmddOiBBdmFpbGFiaWxpdHlSdWxlTGlzdCB9O1xuICB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRIb3N0c0ZvckNhbGVuZGFyKHsgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGhvc3RVc2VycyA9IChyZXMuaG9zdFVzZXJzIHx8IFtdKS5tYXAoKGhvc3R1c2VyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaG9zdFVzZXJGcm9tQXBpKGhvc3R1c2VyKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eVJ1bGVzID0gcmVzLmhvc3RVc2VyQXZhaWxhYmlsaXR5UnVsZSB8fCB7fTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0VXNlcnMsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlSdWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBJc0NhbGVuZGFyQ29uZmlndXJlZChcbiAgICByZXE6IElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaXNDYWxlbmRhckNvbmZpZ3VyZWQocmVxKTtcbiAgfVxuXG4gIHNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsKFxuICAgIHJlcTogU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLnNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsKHJlcSk7XG4gIH1cblxuICBjcmVhdGVTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2U6IFNlcnZpY2U7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFNlcnZpY2UpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLnNlcnZpY2UsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNyZWF0ZVNlcnZpY2Uoe1xuICAgICAgICBzZXJ2aWNlOiBTZXJ2aWNlVHlwZVRvQXBpKHsgc2VydmljZTogcmVxLnNlcnZpY2UgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZVNlcnZpY2UocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzZXJ2aWNlOiBQYXJ0aWFsPFNlcnZpY2U+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBTZXJ2aWNlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEuc2VydmljZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlU2VydmljZSh7XG4gICAgICAgIGlkOiByZXEuaWQsXG4gICAgICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlVG9BcGkoeyBzZXJ2aWNlOiByZXEuc2VydmljZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBkZWxldGVTZXJ2aWNlKHJlcTogeyBpZDogc3RyaW5nOyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kZWxldGVTZXJ2aWNlKHsgaWQ6IHJlcS5pZCwgaG9zdElkOiByZXEuaG9zdElkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGxpc3RTZXJ2aWNlcyhyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8U2VydmljZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdFNlcnZpY2VzKHsgaG9zdElkOiByZXEuaG9zdElkIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuc2VydmljZXMubWFwKChzZXJ2aWNlKSA9PlxuICAgICAgICAgIFNlcnZpY2VGcm9tQXBpKHtcbiAgICAgICAgICAgIHNlcnZpY2VBcGk6IHNlcnZpY2UsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVHcm91cChyZXE6IHtcbiAgICBncm91cDogR3JvdXA7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIEdyb3VwKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5ncm91cCxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlR3JvdXAoe1xuICAgICAgICBncm91cDogR3JvdXBUeXBlVG9BUGkoeyBncm91cDogcmVxLmdyb3VwIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmlkKSk7XG4gIH1cblxuICB1cGRhdGVHcm91cChyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGdyb3VwOiBQYXJ0aWFsPEdyb3VwPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgR3JvdXApW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5ncm91cCxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlR3JvdXAoe1xuICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICBncm91cDogR3JvdXBUeXBlVG9BUGkoeyBncm91cDogcmVxLmdyb3VwIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZUdyb3VwKHJlcTogeyBpZDogc3RyaW5nOyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kZWxldGVHcm91cCh7IGlkOiByZXEuaWQsIGhvc3RJZDogcmVxLmhvc3RJZCB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBsaXN0R3JvdXBzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxHcm91cFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdEdyb3Vwcyh7IGhvc3RJZDogcmVxLmhvc3RJZCB9KS5waXBlKFxuICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgaWYgKCFyZXMgfHwgIXJlcy5ncm91cHMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5ncm91cHMubWFwKChncm91cCkgPT5cbiAgICAgICAgICBHcm91cEZyb21BcGkoe1xuICAgICAgICAgICAgZ3JvdXBBcGk6IGdyb3VwLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0R3JvdXAocmVxOiB7XG4gICAgZ3JvdXBJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldEdyb3VwKHJlcSk7XG4gIH1cbiAgZ2V0U2VydmljZShyZXE6IHtcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEdldFNlcnZpY2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldFNlcnZpY2UocmVxKTtcbiAgfVxuXG4gIGNoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3QocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgc2x1Z0lkZW50aWZpZXI6IHN0cmluZztcbiAgICBjYXRlZ29yeTogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jaGVja0dyb3VwT3JTZXJ2aWNlU2x1Z0V4aXN0KHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuZXhpc3RzKSk7XG4gIH1cblxuICBjaGVja0V2ZW50VHlwZVNsdWdFeGlzdChyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgc2x1Z0lkZW50aWZpZXI6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY2hlY2tFdmVudFR5cGVTbHVnRXhpc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5leGlzdHMpKTtcbiAgfVxuXG4gIGdldEVudGl0eUFzc29jaWF0aW9ucyhyZXE6IHtcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxFbnRpdHlBc3NvY2lhdGlvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5nZXRFbnRpdHlBc3NvY2lhdGlvbnMocmVxKTtcbiAgfVxuXG4gIGVuc3VyZVNlc3Npb25FdmVudENhbGVuZGFyc0V4aXN0KHJlcToge1xuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5lbnN1cmVTZXNzaW9uRXZlbnRDYWxlbmRhcnNFeGlzdCh7IGV4dGVybmFsSWQ6IHJlcS5leHRlcm5hbElkIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzPy5jYWxlbmRhcklkIHx8IFwiXCIpKTtcbiAgfVxuXG4gIGhvc3REZWxldGVBdHRlbmRlZXMocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgZW1haWxzVG9EZWxldGU6IEVtYWlsc1RvRGVsZXRlW107XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmhvc3REZWxldGVBdHRlbmRlZXMoe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEF0dGVuZGVlcyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0QXR0ZW5kZWVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0QXR0ZW5kZWVzKHJlcSk7XG4gIH1cblxuICBjYW5jZWxTZXNzaW9uKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jYW5jZWxTZXNzaW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVTZXNzaW9uKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIGlzUmVjdXJyaW5nOiBib29sZWFuO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5yZXNjaGVkdWxlU2Vzc2lvbih7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmxlVGltZXNsb3RzRm9yU2Vzc2lvbihyZXE6IHtcbiAgICBldmVudFR5cGVJZDogc3RyaW5nO1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gICAgdXNlcklkczogc3RyaW5nW107XG4gIH0pOiBPYnNlcnZhYmxlPFRpbWVTcGFuW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmxpc3RBdmFpbGFibGVUaW1lc2xvdHNGb3JTZXNzaW9uKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+XG4gICAgICAgICAgcmVzcC50aW1lU2xvdHMgPyByZXNwLnRpbWVTbG90cy5tYXAoKHRzKSA9PiBUaW1lU3BhbkZyb21BcGkodHMpKSA6IFtdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgfVxuXG4gIGxpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnMocmVxOiB7XG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzKHJlcSk7XG4gIH1cblxuICBsaXN0Qm9va2luZ1R5cGVzRm9yQWkocmVxOiB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZTogZS5Cb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0Qm9va2luZ1R5cGVzRm9yQUlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RCb29raW5nVHlwZXNGb3JBaShyZXEpO1xuICB9XG5cbn1cblxuIl19
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbWVldGluZ3Nfc2RrL3NyYy9saWIvaG9zdC9ob3N0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQXFCTCxnQ0FBZ0MsRUFJaEMscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUduQixTQUFTLEVBRVQsUUFBUSxHQVNULE1BQU0sY0FBYyxDQUFDO0FBSXRCLE9BQU8sRUFDTCxZQUFZLEVBS1osZUFBZSxFQUVmLFlBQVksRUFFWixZQUFZLEVBQ1osY0FBYyxFQUlkLGNBQWMsRUFHZCxtQkFBbUIsRUFFbkIsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixhQUFhLEVBRWIsa0JBQWtCLEVBRWxCLGNBQWMsRUFDZCxnQkFBZ0IsRUFFaEIsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGtDQUFrQyxHQUNuQyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBWSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQUt4RSxNQUFNLE9BQU8sV0FBVztJQUN0QixZQUFvQixjQUFxQztRQUFyQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7SUFBRyxDQUFDO0lBRTdELGtIQUFrSDtJQUNsSCxXQUFXLENBQUMsR0FHWDtRQUNDLE9BQU8sSUFBSSxDQUFDLGNBQWM7YUFDdkIsV0FBVyxDQUFDO1lBQ1gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO1lB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SUFDckUsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBSXJCO1FBQ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7O3dHQTE4QlUsV0FBVzs0R0FBWCxXQUFXLGNBREUsTUFBTTsyRkFDbkIsV0FBVztrQkFEdkIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgbWFwLCBtYXBUbyB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtcbiAgQXZhaWxhYmlsaXR5UnVsZUxpc3QsXG4gIEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZSxcbiAgQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2UsXG4gIENoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3RSZXNwb25zZSxcbiAgQ29udGFjdEludGVyZmFjZSxcbiAgQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICBDcmVhdGVDYWxlbmRhclJlc3BvbnNlLFxuICBEYXlPZldlZWssXG4gIEdldEdyb3VwUmVzcG9uc2UsXG4gIEdldEhvc3RNZWV0aW5nUmVzcG9uc2UsXG4gIEdldE1lZXRpbmdTdGF0c1Jlc3BvbnNlLFxuICBHZXRTZXJ2aWNlUmVzcG9uc2UsXG4gIEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UsXG4gIEhvc3RCb29rTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UsXG4gIEhvc3RCb29rTWVldGluZ1Jlc3BvbnNlLFxuICBIb3N0TGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzUmVzcG9uc2UsXG4gIElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSxcbiAgSXNDYWxlbmRhckNvbmZpZ3VyZWRSZXNwb25zZSxcbiAgSXNIb3N0Q29uZmlndXJlZFJlc3BvbnNlLFxuICBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnNJbnRlcmZhY2UsXG4gIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzLFxuICBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSxcbiAgTGlzdEJvb2tlZE1lZXRpbmdzUmVzcG9uc2UsXG4gIExpc3RCb29rZWRNZWV0aW5nc1YyUmVzcG9uc2UsXG4gIE1lZXRpbmdIb3N0QXBpU2VydmljZSxcbiAgUGFnZWRSZXF1ZXN0T3B0aW9ucyxcbiAgUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSxcbiAgU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICBUaW1lUmFuZ2UsXG4gIFRpbWVSYW5nZUludGVyZmFjZSxcbiAgVGltZVpvbmUsXG4gIFRpbWVab25lSW50ZXJmYWNlLFxuICBXZWVrZGF5QXZhaWxhYmlsaXR5LFxuICBDb250YWN0LFxuICBFbWFpbHNUb0RlbGV0ZSxcbiAgSG9zdEJvb2tTZXNzaW9uUmVxdWVzdEludGVyZmFjZSxcbiAgTGlzdEF0dGVuZGVlc1Jlc3BvbnNlLFxuICBCb29raW5nU291cmNlLFxuICBMaXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzUmVzcG9uc2UsIExpc3RCb29raW5nVHlwZXNGb3JBSVJlc3BvbnNlLFxufSBmcm9tIFwiLi4vX2ludGVybmFsXCI7XG5cbmltcG9ydCB7IEJvb2tNZWV0aW5nUmVzcG9uc2UsIEJvb2tTZXNzaW9uUmVzcG9uc2UgfSBmcm9tIFwiLi4vZ3Vlc3RcIjtcblxuaW1wb3J0IHtcbiAgYW5zd2Vyc1RvQVBJLFxuICBBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzU2V0LFxuICBBdmFpbGFiaWxpdHlSdWxlLFxuICBCb29rZWRNZWV0aW5nR3JvdXAsXG4gIENhbGVuZGFyLFxuICBDYWxlbmRhckZyb21BcGksXG4gIEVudGl0eUFzc29jaWF0aW9ucyxcbiAgZ2V0RmllbGRNYXNrLFxuICBHcm91cCxcbiAgR3JvdXBGcm9tQXBpLFxuICBHcm91cFR5cGVUb0FQaSxcbiAgSG9zdFVybE1hcCxcbiAgTWVldGluZyxcbiAgTWVldGluZ0Zvcm0sXG4gIG1lZXRpbmdGcm9tQXBpLFxuICBNZWV0aW5nTWV0YWRhdGEsXG4gIE1lZXRpbmdTdGF0cyxcbiAgbWVldGluZ1N0YXRzRnJvbUFwaSxcbiAgTWVldGluZ1R5cGUsXG4gIE1lZXRpbmdUeXBlRnJvbUFwaSxcbiAgTWVldGluZ1R5cGVUb0FwaSxcbiAgUGFnZWRSZXNwb25zZSxcbiAgUHJlZmVyZW5jZXMsXG4gIFByZWZlcmVuY2VzRnJvbUFwaSxcbiAgU2VydmljZSxcbiAgU2VydmljZUZyb21BcGksXG4gIFNlcnZpY2VUeXBlVG9BcGksXG4gIFRpbWVTcGFuLFxuICBUaW1lU3BhbkZyb21BcGksXG59IGZyb20gXCIuLi9zaGFyZWRcIjtcbmltcG9ydCB7XG4gIGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbixcbiAgZ2V0R2VuZXJhbEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbixcbn0gZnJvbSBcIi4vdXJsXCI7XG5pbXBvcnQgeyBIb3N0VXNlciwgaG9zdFVzZXJGcm9tQXBpIH0gZnJvbSBcIi4uL3NoYXJlZC9ob3N0LXVzZXJcIjtcbmltcG9ydCB7IEVudmlyb25tZW50LCBvblByb2R1Y3Rpb25HbG9iYWwgfSBmcm9tIFwiLi4vc2hhcmVkL2Vudmlyb25tZW50XCI7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCAqIGFzIGUgZnJvbSBcIi4uL19pbnRlcm5hbC9lbnVtc1wiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSG9zdFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGhvc3RBUElTZXJ2aWNlOiBNZWV0aW5nSG9zdEFwaVNlcnZpY2UpIHt9XG5cbiAgLy8gVXNlIGJ1aWxkSG9zdElkIHRvIGdldCBhbiBpZGVudGlmaWVyIHRoYXQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCByZXF1ZXN0cy4gU2VlIHZlbmRhc3RhYXBpcyBmb3IgbW9yZSBkZXRhaWxzXG4gIGJ1aWxkSG9zdElkKHJlcToge1xuICAgIHVzZXJJZDogc3RyaW5nO1xuICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6IEFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXNTZXQ7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuYnVpbGRIb3N0SWQoe1xuICAgICAgICB1c2VySWQ6IHJlcS51c2VySWQsXG4gICAgICAgIC8vIEdyb3NzIHR5cGVjYXN0IGV4aXN0cyBiZWNhdXNlIEkgd2FudCB0byByZXN0cmljdCB0aGUgcHJvcGVydGllcyBvbiB0aGUgbWFwIChmb3Igbm93KS5cbiAgICAgICAgYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllczpcbiAgICAgICAgICByZXEuYXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyBhcyBhbnkgYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmhvc3RJZCB8fCBcIlwiKSk7XG4gIH1cblxuICBkb2VzQ2FsZW5kYXJFeGlzdChjYWxlbmRhcklkZW50aWZpZXI6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZG9lc0NhbGVuZGFyRXhpc3QoeyBjYWxlbmRhcklkZW50aWZpZXI6IGNhbGVuZGFySWRlbnRpZmllciB9KVxuICAgICAgLnBpcGUobWFwKChyZXNwKSA9PiByZXNwLmV4aXN0cykpO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXIocmVxOiB7IGNhbGVuZGFySWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxDYWxlbmRhcj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0Q2FsZW5kYXIoeyBjYWxlbmRhcklkOiByZXEuY2FsZW5kYXJJZCB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IENhbGVuZGFyRnJvbUFwaShyZXM/LmNhbGVuZGFyKSkpO1xuICB9XG5cbiAgZW5zdXJlUGVyc29uYWxDYWxlbmRhckV4aXN0cyhyZXE6IHtcbiAgICB1c2VySWQ6IHN0cmluZztcbiAgICBhcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzOiBBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzU2V0O1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZVBlcnNvbmFsQ2FsZW5kYXJFeGlzdHMoe1xuICAgICAgICB1c2VySWQ6IHJlcS51c2VySWQsXG4gICAgICAgIGFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXM6XG4gICAgICAgICAgcmVxLmFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMgYXMgYW55IGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IChyZXMgPyByZXMuY2FsZW5kYXJJZCA6IFwiXCIpKSk7XG4gIH1cblxuICBlbnN1cmVHcm91cENhbGVuZGFyc0V4aXN0KHJlcToge1xuICAgIGV4dGVybmFsSWRzOiBzdHJpbmdbXTtcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmVuc3VyZUdyb3VwQ2FsZW5kYXJzRXhpc3QoeyBleHRlcm5hbElkczogcmVxLmV4dGVybmFsSWRzIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzPy5jYWxlbmRhcklkcyB8fCBbXSkpO1xuICB9XG5cbiAgLypcbiAgICAgY3JlYXRlQ2FsZW5kYXIgY3JlYXRlcyBhIGNhbGVuZGFyIHdoaWNoIG1lZXRpbmcgdHlwZXMgY2FuIGJlIGNyZWF0ZWQgZm9yIGFuZCBldmVudHMgY2FuIGJlIGJvb2tlZCBvblxuICAgICBUaGUgZmllbGRzIG9mIGEgY2FsZW5kYXIgYXJlIGRvY3VtZW50ZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL3ZlbmRhc3RhL3ZlbmRhc3RhYXBpcy9ibG9iL21hc3Rlci9tZWV0aW5ncy92MS9zaGFyZWQucHJvdG9cbiAgICAqL1xuICBjcmVhdGVDYWxlbmRhcihcbiAgICByZXE6IENyZWF0ZUNhbGVuZGFyUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVDYWxlbmRhclJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuY3JlYXRlQ2FsZW5kYXIocmVxKTtcbiAgfVxuXG4gIHVwZGF0ZUNhbGVuZGFyU2x1ZyhjYWxlbmRhcklkOiBzdHJpbmcsIG5ld1NsdWc6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2FsZW5kYXIoe1xuICAgICAgICBjYWxlbmRhcklkOiBjYWxlbmRhcklkLFxuICAgICAgICBjYWxlbmRhclVwZGF0ZTogeyBzbHVnOiBuZXdTbHVnIH0sXG4gICAgICAgIGZpZWxkTWFzazogeyBwYXRoczogW1wic2x1Z1wiXSB9LFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgdXBkYXRlQ2FsZW5kYXJIb3N0VXNlcklEcyhcbiAgICBjYWxlbmRhcklkOiBzdHJpbmcsXG4gICAgcmVwbGFjZW1lbnRIb3N0VXNlcklkczogc3RyaW5nW10sXG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlQ2FsZW5kYXIoe1xuICAgICAgICBjYWxlbmRhcklkOiBjYWxlbmRhcklkLFxuICAgICAgICBjYWxlbmRhclVwZGF0ZTogeyBob3N0VXNlcklkczogcmVwbGFjZW1lbnRIb3N0VXNlcklkcyB9LFxuICAgICAgICBmaWVsZE1hc2s6IHsgcGF0aHM6IFtcImhvc3RfdXNlcl9pZHNcIl0gfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFycyhyZXE6IHtcbiAgICBjYWxlbmRhcklkczogc3RyaW5nW107XG4gICAgbWV0YWRhdGE6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICB9KTogT2JzZXJ2YWJsZTx7IFtjYWxlbmRhcklkOiBzdHJpbmddOiBNZWV0aW5nVHlwZVtdIH0+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldE1lZXRpbmdUeXBlc0ZvckNhbGVuZGFycyh7IGNhbGVuZGFySWRzOiByZXEuY2FsZW5kYXJJZHMgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGlmICghcmVzPy5jYWxlbmRhck1lZXRpbmdUeXBlc01hcCkge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocmVzLmNhbGVuZGFyTWVldGluZ1R5cGVzTWFwKS5yZWR1Y2UoXG4gICAgICAgICAgICAoY2FsZW5kYXJUb01lZXRpbmdUeXBlTWFwLCBjYWxlbmRhcklkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1lZXRpbmdUeXBlcyA9IChcbiAgICAgICAgICAgICAgICByZXMuY2FsZW5kYXJNZWV0aW5nVHlwZXNNYXBbY2FsZW5kYXJJZF0/Lm1lZXRpbmdUeXBlcyB8fCBbXVxuICAgICAgICAgICAgICApLm1hcCgobXQpID0+XG4gICAgICAgICAgICAgICAgTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgICAgICAgY2FsZW5kYXJJZCxcbiAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uY2FsZW5kYXJUb01lZXRpbmdUeXBlTWFwLFxuICAgICAgICAgICAgICAgIFtjYWxlbmRhcklkXTogbWVldGluZ1R5cGVzLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHt9IGFzIHsgW2NhbGVuZGFySWQ6IHN0cmluZ106IE1lZXRpbmdUeXBlW10gfSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvKlxuICAgICBsaXN0TWVldGluZ1R5cGVzIHJldHVybnMgYSBsaXN0IG9mIG1lZXRpbmcgdHlwZXMgZm9yIGEgaG9zdFxuICAgICBAcGFyYW0gaG9zdElkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3RcbiAgICAgQHBhcmFtIG1ldGFkYXRhOiBvcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIG9uIHRoZSBtZWV0aW5nIHR5cGUgYm9va2luZyBsaW5rXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAgICAtIGNhbGVuZGFyU2x1ZyBJUyBOT1QgVVNFRCBUTyBSRVRSSUVWRSBNRUVUSU5HIFRZUEVTLCBPTkxZIFRPIE1BS0UgVEhFIEJPT0tJTkcgVVJMU1xuICAgKi9cbiAgbGlzdE1lZXRpbmdUeXBlcyhyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8TWVldGluZ1R5cGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RNZWV0aW5nVHlwZXMocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwKSA9PiB7XG4gICAgICAgIGlmICghcmVzcCB8fCAhcmVzcC5tZWV0aW5nVHlwZXMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3AubWVldGluZ1R5cGVzLm1hcCgobXQpID0+IHtcbiAgICAgICAgICByZXR1cm4gTWVldGluZ1R5cGVGcm9tQXBpKHtcbiAgICAgICAgICAgIG1lZXRpbmdUeXBlQXBpOiBtdCxcbiAgICAgICAgICAgIGNhbGVuZGFySWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiByZXEubWV0YWRhdGEsXG4gICAgICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qXG4gICAgIGdldEV2ZW50VHlwZUJ5SWQgcmV0dXJucyBhIHNpbmdsZSBtZWV0aW5nIHR5cGUgYnkgSUQuXG4gICAgIEBwYXJhbSBldmVudFR5cGVJZDogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnQgdHlwZVxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgb24gdGhlIG1lZXRpbmcgdHlwZSBib29raW5nIGxpbmtcbiAgICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICAgIC0gY2FsZW5kYXJTbHVnIElTIE5PVCBVU0VEIFRPIFJFVFJJRVZFIFRIRSBFVkVOVCBUWVBFLCBPTkxZIFRPIE1BS0UgVEhFIEJPT0tJTkcgVVJMXG4gICAqL1xuICBnZXRFdmVudFR5cGVCeUlkKHJlcToge1xuICAgIGV2ZW50VHlwZUlkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPE1lZXRpbmdUeXBlIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0RXZlbnRUeXBlQnlJZCh7IGV2ZW50VHlwZUlkOiByZXEuZXZlbnRUeXBlSWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+IHtcbiAgICAgICAgICBpZiAoIXJlc3AubWVldGluZ1R5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBNZWV0aW5nVHlwZUZyb21BcGkoe1xuICAgICAgICAgICAgbWVldGluZ1R5cGVBcGk6IHJlc3AubWVldGluZ1R5cGUsXG4gICAgICAgICAgICBjYWxlbmRhcklkOiByZXNwLm1lZXRpbmdUeXBlLmNhbGVuZGFySWQgfHwgXCJcIixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvblByb2R1Y3Rpb25HbG9iYWwoKVxuICAgICAgICAgICAgICA/IEVudmlyb25tZW50LlBST0RcbiAgICAgICAgICAgICAgOiBFbnZpcm9ubWVudC5ERU1PLFxuICAgICAgICAgICAgbWV0YWRhdGE6IHJlcS5tZXRhZGF0YSxcbiAgICAgICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRCb29raW5nVXJsIHJldHVybnMgYSBsaW5rIHRoYXQgY2FuIGJlIHVzZWQgdG8gYm9vayBhIG1lZXRpbmcgd2l0aCB0aGlzIGhvc3QuXG4gICAgIEBwYXJhbSBjYWxlbmRhcklkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3Qgb3IgZ3JvdXBpbmcgb2YgaG9zdHMgKGkuZS4sIHRlYW0pLlxuICAgICBAcGFyYW0gQGRlcHJlY2F0ZWQgaG9zdElkOiBBbiBpZGVudGlmaWVyIGZvciBhbiBpbmRpdmlkdWFsIGhvc3QuXG4gICAgIEBwYXJhbSBtZWV0aW5nVHlwZUlkOiBBbiBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbWVldGluZyB0eXBlLiBEZWZhdWx0OiAzMC1taW51dGVzLlxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgQHBhcmFtIGNhbGVuZGFyU2x1ZzogdXNlZCB0byByZXBsYWNlIGhvc3RJZCBpbiB0aGUgdXJsLiBVc2UgaXQgd2hlbiB5b3UgYXJlIGNvbmZpZGVudCB5b3Uga25vdyB0aGUgaG9zdCdzIHNsdWcuXG4gICAgICovXG4gIGdldEJvb2tpbmdVcmwocmVxOiB7XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSBjYWxlbmRhcklkIGluc3RlYWQuIGNhbGVuZGFySWQgbm90IHJlcXVpcmVkIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNsaWVudHMuXG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgY2FsZW5kYXJJZD86IHN0cmluZztcbiAgICAvLyBAZGVwcmVjYXRlZDogdXNlIG1lZXRpbmdUeXBlU2x1ZyBpbnN0ZWFkXG4gICAgbWVldGluZ1R5cGVJZD86IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZVNsdWc/OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBjYWxlbmRhclNsdWc/OiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiBvZihcbiAgICAgIGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbih7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQgfHwgcmVxLmhvc3RJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpID8gRW52aXJvbm1lbnQuUFJPRCA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgIGNhbGVuZGFyU2x1ZzogcmVxLmNhbGVuZGFyU2x1ZyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKlxuICAgICBnZXRHZW5lcmFsQm9va2luZ1VybCByZXR1cm5zIGEgbGluayB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIG1lZXRpbmcgdHlwZSB0byBib29rIHdpdGggdGhlIGdpdmVuIGNhbGVuZGFyLlxuICAgICBAcGFyYW0gY2FsZW5kYXJJZDogQW4gaWRlbnRpZmllciBmb3IgYW4gaW5kaXZpZHVhbCBob3N0IG9yIGdyb3VwaW5nIG9mIGhvc3RzIChpLmUuLCB0ZWFtKS5cbiAgICAgQHBhcmFtIG1ldGFkYXRhOiBvcHRpb25hbCBtZXRhZGF0YSB0byBpbmNsdWRlIGluIHRoZSB1cmwuXG4gICAgIC0gbWV0YWRhdGEgY2FuIGJlIHVzZWQgdG8gcHJlLWZpbGwgY2VydGFpbiBmb3JtIGZpZWxkcyBhbmQgd2lsbCBiZSBzdG9yZWQgZHVyaW5nIHRoZSBib29raW5nIHByb2Nlc3MuXG4gICAgIC0gbWV0YWRhdGEgY2FuIGJlIG9idGFpbmVkIGJ5IHN1YnNjcmliaW5nIHRvIHRoZSBib29raW5nIGV2ZW50LlxuICAgICBAcGFyYW0gY2FsZW5kYXJTbHVnOiB1c2VkIHRvIHJlcGxhY2UgaG9zdElkIGluIHRoZSB1cmwuIFVzZSBpdCB3aGVuIHlvdSBhcmUgY29uZmlkZW50IHlvdSBrbm93IHRoZSBob3N0J3Mgc2x1Zy5cbiAgICAgKi9cbiAgZ2V0R2VuZXJhbEJvb2tpbmdVcmwocmVxOiB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gICAgY2FsZW5kYXJTbHVnPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gb2YoXG4gICAgICBnZXRHZW5lcmFsQm9va2luZ1VybEltcGxlbWVudGF0aW9uKHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpID8gRW52aXJvbm1lbnQuUFJPRCA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgIGNhbGVuZGFySWQ6IHJlcS5jYWxlbmRhcklkLFxuICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgICBjYWxlbmRhclNsdWc6IHJlcS5jYWxlbmRhclNsdWcsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICAgZ2V0Qm9va2luZ1VybHNNdWx0aSByZXR1cm5zIGEgbWFwcGluZyBvZiBob3N0cyAtPiBldmVudCB0eXBlcyAtPiBib29raW5nIGxpbmtzLlxuICAgICBAcGFyYW0gY2FsZW5kYXJJZDogQW4gaWRlbnRpZmllciBmb3IgYW4gaW5kaXZpZHVhbCBob3N0IG9yIGdyb3VwaW5nIG9mIGhvc3RzLlxuICAgICBAcGFyYW0gbWVldGluZ1R5cGVTbHVnOiBtZWV0aW5nVHlwZVNsdWdzIGFyZSBwYXNzZWQgaW4gdGhlIGZvcm0ge2hvc3RJZDogW21lZXRpbmdUeXBlU2x1ZzEsIG1lZXRpbmdUeXBlU2x1ZzJdfVxuICAgICBAcGFyYW0gbWV0YWRhdGE6IG9wdGlvbmFsIG1ldGFkYXRhIHRvIGluY2x1ZGUgaW4gdGhlIHVybC5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgdXNlZCB0byBwcmUtZmlsbCBjZXJ0YWluIGZvcm0gZmllbGRzIGFuZCB3aWxsIGJlIHN0b3JlZCBkdXJpbmcgdGhlIGJvb2tpbmcgcHJvY2Vzcy5cbiAgICAgLSBtZXRhZGF0YSBjYW4gYmUgb2J0YWluZWQgYnkgc3Vic2NyaWJpbmcgdG8gdGhlIGJvb2tpbmcgZXZlbnQuXG4gICAgIEBwYXJhbSBjYWxlbmRhclNsdWc6IHVzZWQgdG8gcmVwbGFjZSBob3N0SWQgaW4gdGhlIHVybC4gVXNlIGl0IHdoZW4geW91IGFyZSBjb25maWRlbnQgeW91IGtub3cgdGhlIGhvc3QncyBzbHVnLlxuICAgICAqL1xuICBnZXRCb29raW5nVXJsc011bHRpKFxuICAgIHJlcTogeyBbY2FsZW5kYXJJZDogc3RyaW5nXTogc3RyaW5nW10gfSxcbiAgICBtZXRhZGF0YT86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGNhbGVuZGFyU2x1Zz86IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxIb3N0VXJsTWFwPiB7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgT2JqZWN0LmtleXMocmVxKS5yZWR1Y2UoKGhvc3RNYXAsIGNhbGVuZGFySWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5ob3N0TWFwLFxuICAgICAgICAgIFtjYWxlbmRhcklkXTogcmVxW2NhbGVuZGFySWRdLnJlZHVjZShcbiAgICAgICAgICAgIChtZWV0aW5nVHlwZU1hcCwgbWVldGluZ1R5cGVTbHVnKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4ubWVldGluZ1R5cGVNYXAsXG4gICAgICAgICAgICAgICAgW21lZXRpbmdUeXBlU2x1Z106IGdldEJvb2tpbmdVcmxJbXBsZW1lbnRhdGlvbih7XG4gICAgICAgICAgICAgICAgICBjYWxlbmRhcklkLFxuICAgICAgICAgICAgICAgICAgbWVldGluZ1R5cGVTbHVnLFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICAgICAgICAgIGNhbGVuZGFyU2x1ZyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSBhcyB7IFttZWV0aW5nVHlwZUlkOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSwge30gYXMgSG9zdFVybE1hcCksXG4gICAgKTtcbiAgfVxuXG4gIGlzSG9zdENvbmZpZ3VyZWQocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaXNIb3N0Q29uZmlndXJlZChyZXEpXG4gICAgICAucGlwZShtYXAoKHJlc3A6IElzSG9zdENvbmZpZ3VyZWRSZXNwb25zZSkgPT4gcmVzcCkpO1xuICB9XG5cbiAgc2V0R2VuZXJhbEF2YWlsYWJpbGl0eShyZXE6IHtcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZUlkOiBzdHJpbmc7XG4gICAgLy8gQGRlcHJlY2F0ZWQ6IHVzZSB3ZWVrZGF5c0F2YWlsYWJpbGl0eSBpbnN0ZWFkXG4gICAgZGF5cz86IERheU9mV2Vla1tdO1xuICAgIC8vIEBkZXByZWNhdGVkOiB1c2Ugd2Vla2RheXNBdmFpbGFiaWxpdHkgaW5zdGVhZFxuICAgIHRpbWVTbG90PzogVGltZVJhbmdlSW50ZXJmYWNlO1xuICAgIHdlZWtkYXlzQXZhaWxhYmlsaXR5PzogV2Vla2RheUF2YWlsYWJpbGl0eVtdO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIGNvbnN0IGFwaVJlcSA9IHtcbiAgICAgIC4uLnJlcSxcbiAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICB9O1xuICAgIGlmIChyZXEudGltZVNsb3QpIHtcbiAgICAgIGFwaVJlcS50aW1lU2xvdCA9IG5ldyBUaW1lUmFuZ2UocmVxLnRpbWVTbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2Uuc2V0R2VuZXJhbEF2YWlsYWJpbGl0eShhcGlSZXEpLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEJvb2tlZE1lZXRpbmdzKHJlcToge1xuICAgIGZpbHRlcnM6IExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxQYWdlZFJlc3BvbnNlPE1lZXRpbmc+PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5saXN0Qm9va2VkTWVldGluZ3Moe1xuICAgICAgICAuLi5yZXEsXG4gICAgICAgIHBhZ2luZ09wdGlvbnM6IG5ldyBQYWdlZFJlcXVlc3RPcHRpb25zKHtcbiAgICAgICAgICBjdXJzb3I6IHJlcS5jdXJzb3IsXG4gICAgICAgICAgcGFnZVNpemU6IHJlcS5wYWdlU2l6ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcnM6IG5ldyBMaXN0Qm9va2VkTWVldGluZ3NSZXF1ZXN0RmlsdGVycyhyZXEuZmlsdGVycyksXG4gICAgICAgIHRpbWVab25lOiBuZXcgVGltZVpvbmUocmVxLnRpbWVab25lKSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBMaXN0Qm9va2VkTWVldGluZ3NSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG1lZXRpbmdzID0gKHJlc3AubWVldGluZ3MgfHwgW10pLm1hcCgobWVldGluZykgPT5cbiAgICAgICAgICAgIG1lZXRpbmdGcm9tQXBpKG1lZXRpbmcpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYWdlZFJlc3BvbnNlKFxuICAgICAgICAgICAgbWVldGluZ3MsXG4gICAgICAgICAgICByZXNwLnBhZ2luZ01ldGFkYXRhLm5leHRDdXJzb3IsXG4gICAgICAgICAgICByZXNwLnBhZ2luZ01ldGFkYXRhLmhhc01vcmUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgY2FuY2VsTWVldGluZyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBjYW5jZWxsYXRpb25SZWFzb246IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY2FuY2VsTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICByZXNjaGVkdWxlTWVldGluZyhyZXE6IHsgbWVldGluZ0lkOiBzdHJpbmc7IHN0YXJ0OiBEYXRlOyBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZSB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5yZXNjaGVkdWxlTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmlsaXR5KHJlcToge1xuICAgIGZpbHRlcnM6IExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZTtcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlO1xuICAgIHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZTtcbiAgfSk6IE9ic2VydmFibGU8UGFnZWRSZXNwb25zZTxBdmFpbGFiaWxpdHlSdWxlPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RBdmFpbGFiaWxpdHkocmVxKS5waXBlKFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gKHJlc3BvbnNlLmF2YWlsYWJpbGl0eVJ1bGVzIHx8IFtdKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAubWFwKChhKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBob3N0SWQ6IGEuaG9zdElkIHx8IFwiXCIsXG4gICAgICAgICAgICAgIG1lZXRpbmdUeXBlSWQ6IGEubWVldGluZ1R5cGVJZCB8fCBcIlwiLFxuICAgICAgICAgICAgICBkYXk6IGEuZGF5LFxuICAgICAgICAgICAgICB0aW1lU2xvdDogYS50aW1lU2xvdCxcbiAgICAgICAgICAgICAgdGltZVpvbmU6IGEudGltZVpvbmUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICByZXNwb25zZS5tZXRhZGF0YS5uZXh0Q3Vyc29yLFxuICAgICAgICAgIHJlc3BvbnNlLm1ldGFkYXRhLmhhc01vcmUsXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyogdXBkYXRlUHJlZmVyZW5jZXMgd2lsbCB1cGRhdGUgdGhlIGhvc3QncyBwcmVmZXJlbmNlcy5cbiAgICogSXQgaXMgZ3VhcmFudGVlZCB0byBvbmx5IHVwZGF0ZSB0aGUgZmllbGRzIHByb3ZpZGVkLlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogIHVwZGF0ZVByZWZlcmVuY2VzKHttZWV0aW5nSW50ZWdyYXRpb246IE1lZXRpbmdTb3VyY2UuTUVFVElOR19TT1VSQ0VfR09PR0xFX01FRVR9KVxuICAgKiAgd2lsbCBvbmx5IHVwZGF0ZSB0aGUgcHJlZmVyZW5jZSBtZWV0aW5nSW50ZWdyYXRpb24gdG8gR29vZ2xlIE1lZXQuIEtlZXBpbmcgdGhlIG90aGVyIHByZWZlcmVuY2VzIHRoZSBzYW1lLlxuICAgKlxuICAgKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgYSBsaXN0IG9mIGtleXMgdG8gdXBkYXRlIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgIHVwZGF0ZVByZWZlcmVuY2VzKHsuLi5vYmplY3Qgd2l0aCBhbGwgZmllbGRzfSwgWydtZWV0aW5nSW50ZWdyYXRpb24nXSlcbiAgICogICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbWVldGluZ0ludGVncmF0aW9uJyB0byB0aGUgdmFsdWUgaW4gcHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIENhbGxpbmcgd2l0aCBhbiBlbXB0eSBvYmplY3QgYW5kIG5vIGtleXMgaXMgYSBuby1vcCwgb3IgYW4gdW5kZWZpbmVkIG9iamVjdC5cbiAgICogQ2FsbGluZyB3aXRoIGFuIG9iamVjdCBjb250YWluaW5nIGZpZWxkcyBub3QgaW4gYFByZWZlcmVuY2VzYCBvciB3aXRoIHVwZGF0ZUZpZWxkcyBub3QgbGlua2VkIHRvIHByb3BlcnRpZXMgaW5cbiAgICogYFByZWZlcmVuY2VzYCBpcyBhbiBlcnJvci5cbiAgICovXG4gIHVwZGF0ZVByZWZlcmVuY2VzKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIHByZWZlcmVuY2VzOiBQYXJ0aWFsPFByZWZlcmVuY2VzPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgUHJlZmVyZW5jZXMpW107XG4gIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLnByZWZlcmVuY2VzLFxuICAgICAgdXBkYXRlRmllbGRzOiByZXEudXBkYXRlRmllbGRzLFxuICAgIH0pO1xuICAgIGlmIChmaWVsZE1hc2sucGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gb2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC51cGRhdGVIb3N0UHJlZmVyZW5jZXMoe1xuICAgICAgICBob3N0SWQ6IHJlcS5ob3N0SWQsXG4gICAgICAgIHByZWZlcmVuY2VzOiByZXEucHJlZmVyZW5jZXMsXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGdldFByZWZlcmVuY2VzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxQcmVmZXJlbmNlcz4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuZ2V0SG9zdFByZWZlcmVuY2VzKHtcbiAgICAgICAgaG9zdElkOiByZXEuaG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2UpID0+IFByZWZlcmVuY2VzRnJvbUFwaShyZXNwb25zZS5wcmVmZXJlbmNlcykpKTtcbiAgfVxuXG4gIGdldE1lZXRpbmcobWVldGluZ0lkOiBzdHJpbmcsIGxvY2F0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE1lZXRpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldEhvc3RNZWV0aW5nKHtcbiAgICAgICAgbWVldGluZ0lkOiBtZWV0aW5nSWQsXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwOiBHZXRIb3N0TWVldGluZ1Jlc3BvbnNlKSA9PiBtZWV0aW5nRnJvbUFwaShyZXNwLm1lZXRpbmcpKSxcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVNZWV0aW5nTWV0YWRhdGEocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgbWV0YWRhdGE6IE1lZXRpbmdNZXRhZGF0YTtcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlTWVldGluZ01ldGFkYXRhKHtcbiAgICAgICAgbWVldGluZ0lkOiByZXEubWVldGluZ0lkLFxuICAgICAgICBtZXRhZGF0YTogcmVxLm1ldGFkYXRhLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKHVuZGVmaW5lZCkpO1xuICB9XG5cbiAgaG9zdEJvb2tNZWV0aW5nKHJlcToge1xuICAgIGhvc3RJZDogc3RyaW5nO1xuICAgIG1lZXRpbmdUeXBlSWQ6IHN0cmluZztcbiAgICBzdGFydDogRGF0ZTtcbiAgICBjb21tZW50OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiBNZWV0aW5nTWV0YWRhdGE7XG4gICAgYXR0ZW5kZWVzOiAoT21pdDxcbiAgICAgIENvbnRhY3QsXG4gICAgICBcImZyb21Qcm90b1wiIHwgXCJ0b0FwaUpzb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwidGltZVpvbmVcIlxuICAgID4gJiB7IHRpbWVab25lOiBUaW1lWm9uZUludGVyZmFjZSB9KVtdO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIHVzZXJJZD86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8Qm9va01lZXRpbmdSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RCb29rTWVldGluZyh7XG4gICAgICAuLi5yZXEsXG4gICAgICBhdHRlbmRlZXM6IHJlcS5hdHRlbmRlZXMsXG4gICAgfSk7XG4gIH1cblxuICBob3N0Qm9va1Nlc3Npb24oXG4gICAgcmVxOiBIb3N0Qm9va1Nlc3Npb25SZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPEJvb2tTZXNzaW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5ob3N0Qm9va1Nlc3Npb24oe1xuICAgICAgLi4ucmVxLFxuICAgIH0pO1xuICB9XG5cbiAgYm9va01lZXRpbmcocmVxOiBIb3N0Qm9va01lZXRpbmdSZXF1ZXN0SW50ZXJmYWNlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmJvb2tNZWV0aW5nKHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogSG9zdEJvb2tNZWV0aW5nUmVzcG9uc2UpID0+IHJlc3AubWVldGluZ0lkKSk7XG4gIH1cblxuICAvLyBsaXN0Qm9va2VkTWVldGluZ3NWMiByZXR1cm5zIGJvb2tpbmdzIGdyb3VwZWQgYnkgYm9va2luZ19ncm91cF9pZC5cbiAgLy8gU3RhbmRhbG9uZSBtZWV0aW5ncyBhcHBlYXIgYXMgYSBzaW5nbGUtZW50cnkgQm9va2VkTWVldGluZ0dyb3VwIHdpdGggYW4gZW1wdHlcbiAgLy8gYm9va2luZ0dyb3VwSWQ7IGJhdGNoIGJvb2tpbmdzIGFwcGVhciBhcyBvbmUgQm9va2VkTWVldGluZ0dyb3VwIHdpdGggTiBzaWJsaW5ncy5cbiAgbGlzdEJvb2tlZE1lZXRpbmdzVjIocmVxOiB7XG4gICAgZmlsdGVyczogTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnNJbnRlcmZhY2U7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gIH0pOiBPYnNlcnZhYmxlPFBhZ2VkUmVzcG9uc2U8Qm9va2VkTWVldGluZ0dyb3VwPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAubGlzdEJvb2tlZE1lZXRpbmdzVjIoe1xuICAgICAgICBmaWx0ZXJzOiBuZXcgTGlzdEJvb2tlZE1lZXRpbmdzUmVxdWVzdEZpbHRlcnMocmVxLmZpbHRlcnMpLFxuICAgICAgICBwYWdpbmdPcHRpb25zOiBuZXcgUGFnZWRSZXF1ZXN0T3B0aW9ucyh7XG4gICAgICAgICAgY3Vyc29yOiByZXEuY3Vyc29yLFxuICAgICAgICAgIHBhZ2VTaXplOiByZXEucGFnZVNpemUsXG4gICAgICAgIH0pLFxuICAgICAgICB0aW1lWm9uZTogbmV3IFRpbWVab25lKHJlcS50aW1lWm9uZSksXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcDogTGlzdEJvb2tlZE1lZXRpbmdzVjJSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGJvb2tpbmdzID0gKHJlc3AuYm9va2luZ3MgfHwgW10pLm1hcCgoYm9va2luZykgPT4gKHtcbiAgICAgICAgICAgIGJvb2tpbmdHcm91cElkOiBib29raW5nLmJvb2tpbmdHcm91cElkIHx8IFwiXCIsXG4gICAgICAgICAgICBtZWV0aW5nczogKGJvb2tpbmcubWVldGluZ3MgfHwgW10pLm1hcCgobWVldGluZykgPT5cbiAgICAgICAgICAgICAgbWVldGluZ0Zyb21BcGkobWVldGluZyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VkUmVzcG9uc2UoXG4gICAgICAgICAgICBib29raW5ncyxcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEubmV4dEN1cnNvcixcbiAgICAgICAgICAgIHJlc3AucGFnaW5nTWV0YWRhdGEuaGFzTW9yZSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBob3N0Qm9va0JhdGNoTWVldGluZyBib29rcyBhIG1lZXRpbmcgb24gdGhlIGhvc3QgY2FsZW5kYXIg4oCUIHNpbmdsZS1zZXJ2aWNlXG4gIC8vIChOPTEgdGFyZ2V0KSBvciBtdWx0aS1zZXJ2aWNlIChOPjEgb3JkZXJlZCB0YXJnZXRzKS4gUmV0dXJucyB0aGUgYm9va2luZ19ncm91cF9pZC5cbiAgaG9zdEJvb2tCYXRjaE1lZXRpbmcocmVxOiB7XG4gICAgY2FsZW5kYXJJZDogc3RyaW5nO1xuICAgIHRhcmdldHM6IEJhdGNoQm9va2luZ1RhcmdldEludGVyZmFjZVtdO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGF0dGVuZGVlcz86IENvbnRhY3RJbnRlcmZhY2VbXTtcbiAgICBjb21tZW50Pzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgICBmb3JtQW5zd2Vycz86IE1lZXRpbmdGb3JtO1xuICAgIGxvY2F0aW9uPzogc3RyaW5nO1xuICAgIGJvb2tpbmdTb3VyY2U/OiBCb29raW5nU291cmNlO1xuICAgIGJvb2tpbmdPcmlnaW5JZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0Qm9va0JhdGNoTWVldGluZyh7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgICAgZm9ybUFuc3dlcnM6IGFuc3dlcnNUb0FQSShyZXEuZm9ybUFuc3dlcnMpLFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UpID0+IHJlc3AuYm9va2luZ0dyb3VwSWQpLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGhvc3RSZXNjaGVkdWxlQmF0Y2hNZWV0aW5nIGFjY2VwdHMgZWl0aGVyIGEgc2luZ2xlIG1lZXRpbmdfaWQgb3IgYSBib29raW5nX2dyb3VwX2lkLlxuICAvLyBXaGVuIGEgYm9va2luZ19ncm91cF9pZCBpcyBwYXNzZWQgdGhlIHNlcnZlciByZXNjaGVkdWxlcyBldmVyeSBzaWJsaW5nIGF0b21pY2FsbHksXG4gIC8vIHByZXNlcnZpbmcgcGVyLXNpYmxpbmcgZHVyYXRpb25zIGFuZCBzaGlmdGluZyBhbGwgYnkgdGhlIHNhbWUgZGVsdGEuXG4gIGhvc3RSZXNjaGVkdWxlQmF0Y2hNZWV0aW5nKHJlcToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgbG9jYXRpb24/OiBzdHJpbmc7XG4gICAgdGltZVpvbmU/OiBUaW1lWm9uZUludGVyZmFjZTtcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuaG9zdFJlc2NoZWR1bGVCYXRjaE1lZXRpbmcocmVxKVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgLy8gaG9zdENhbmNlbEJhdGNoTWVldGluZyBhY2NlcHRzIGVpdGhlciBhIHNpbmdsZSBtZWV0aW5nX2lkIG9yIGEgYm9va2luZ19ncm91cF9pZC5cbiAgLy8gRm9yIHBhcnRpYWwtZ3JvdXAgY2FuY2VsbGF0aW9uIHRoZSBGRSBpc3N1ZXMgTiBwYXJhbGxlbCBjYWxscyBlYWNoIHdpdGggdGhlXG4gIC8vIGluZGl2aWR1YWwgbWVldGluZ19pZC5cbiAgaG9zdENhbmNlbEJhdGNoTWVldGluZyhyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbj86IHN0cmluZztcbiAgICBib29raW5nU291cmNlPzogQm9va2luZ1NvdXJjZTtcbiAgfSk6IE9ic2VydmFibGU8bnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmhvc3RDYW5jZWxCYXRjaE1lZXRpbmcocmVxKS5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIC8vIGdldE1lZXRpbmdTdGF0cyByZXR1cm5zIGFnZ3JlZ2F0ZWQgbWVldGluZyBzdGF0aXN0aWNzIGZvciB0aGUgaG9zdCwgYmFja2luZyB0aGVcbiAgLy8gXCJNeSBNZWV0aW5nc1wiIGRhc2hib2FyZCBjYXJkLiB0aW1lU3BhbiBtdXN0IGJlIGV4cHJlc3NlZCBpbiB0aGUgY2FsbGVyJ3MgdGltZSB6b25lO1xuICAvLyB0aW1lWm9uZSBpcyB1c2VkIHRvIGJ1Y2tldCBtZWV0aW5ncyBpbnRvIGRheXMgYW5kIHRvIGFsaWduIHRoZSBjb21wYXJpc29uIHBlcmlvZC5cbiAgZ2V0TWVldGluZ1N0YXRzKHJlcToge1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gICAgYnVzaW5lc3NJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxNZWV0aW5nU3RhdHM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmdldE1lZXRpbmdTdGF0cyh7XG4gICAgICAgIHRpbWVTcGFuOiByZXEudGltZVNwYW4sXG4gICAgICAgIHRpbWVab25lOiByZXEudGltZVpvbmUsXG4gICAgICAgIGJ1c2luZXNzSWQ6IHJlcS5idXNpbmVzc0lkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzcDogR2V0TWVldGluZ1N0YXRzUmVzcG9uc2UpID0+IG1lZXRpbmdTdGF0c0Zyb21BcGkocmVzcCkpKTtcbiAgfVxuXG4gIC8vIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMgcmV0dXJucyB2YWxpZCBjaGFpbiBzdGFydCB0aW1lcyBmb3IgYVxuICAvLyBtdWx0aS1zZXJ2aWNlIGhvc3QgYm9va2luZy4gRWFjaCBzbG90IGlzIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgbWVldGluZ1xuICAvLyBpbiB0aGUgY2hhaW4uXG4gIGhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHMocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgdGFyZ2V0czogQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2VbXTtcbiAgICB0aW1lU3BhbjogVGltZVNwYW47XG4gICAgdGltZVpvbmU6IFRpbWVab25lSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxUaW1lU3BhbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5ob3N0TGlzdEJhdGNoQXZhaWxhYmxlVGltZVNsb3RzKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3A6IEhvc3RMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwLmlzb1RpbWVTbG90cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcC5pc29UaW1lU2xvdHMubWFwKChpc28pID0+ICh7XG4gICAgICAgICAgICAgIHN0YXJ0OiBuZXcgRGF0ZShpc28uc3RhcnQpLFxuICAgICAgICAgICAgICBlbmQ6IG5ldyBEYXRlKGlzby5lbmQpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMgd2lsbCBjcmVhdGUgd2hhdCBNZWV0aW5nIFNjaGVkdWxlciBkZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBtZWV0aW5nIHR5cGVzLlxuICAvLyBJZiB0aGUgY2FsZW5kYXIgYWxyZWFkeSBoYXMgbWVldGluZyB0eXBlcywgdGhpcyBpcyBndWFyYW50ZWVkIHRvIGJlIGEgbm8tb3AuXG4gIGNyZWF0ZURlZmF1bHRNZWV0aW5nVHlwZXMocmVxOiB7IGNhbGVuZGFySWRzOiBzdHJpbmdbXSB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jcmVhdGVEZWZhdWx0TWVldGluZ1R5cGVzKHsgY2FsZW5kYXJJZHM6IHJlcS5jYWxlbmRhcklkcyB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBjcmVhdGVNZWV0aW5nVHlwZShyZXE6IHtcbiAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGU7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIE1lZXRpbmdUeXBlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5tZWV0aW5nVHlwZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlTWVldGluZ1R5cGUoe1xuICAgICAgICBtZWV0aW5nVHlwZTogTWVldGluZ1R5cGVUb0FwaSh7IG1lZXRpbmdUeXBlOiByZXEubWVldGluZ1R5cGUgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIC8qIHVwZGF0ZU1lZXRpbmdUeXBlIHdpbGwgdXBkYXRlIHRoZSBtZWV0aW5nIHR5cGUgZmllbGRzLlxuICAgKiBJdCBpcyBndWFyYW50ZWVkIHRvIG9ubHkgdXBkYXRlIHRoZSBmaWVsZHMgcHJvdmlkZWQuXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiAgdXBkYXRlTWVldGluZ1R5cGUoe25hbWU6ICdPbmJvYXJkaW5nJ30pXG4gICAqICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbmFtZScgdG8gJ09uYm9hcmRpbmcnLiBLZWVwaW5nIHRoZSBvdGhlciBmaWVsZHMgdGhlIHNhbWUuXG4gICAqXG4gICAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHJvdmlkZSBhIGxpc3Qgb2Yga2V5cyB0byB1cGRhdGUgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICogRm9yIGV4YW1wbGU6XG4gICAqICAgdXBkYXRlTWVldGluZ1R5cGUoey4uLm9iamVjdCB3aXRoIGFsbCBmaWVsZHN9LCBbJ25hbWUnXSlcbiAgICogICB3aWxsIG9ubHkgdXBkYXRlIHRoZSBmaWVsZCAnbmFtZScgdG8gdGhlIHZhbHVlIHBhc3NlZCBpbi5cbiAgICpcbiAgICogQ2FsbGluZyB3aXRoIGFuIGVtcHR5IG9iamVjdCBhbmQgbm8ga2V5cyBpcyBhIG5vLW9wLCBvciBhbiB1bmRlZmluZWQgb2JqZWN0LlxuICAgKiBDYWxsaW5nIHdpdGggYW4gb2JqZWN0IGNvbnRhaW5pbmcgZmllbGRzIG5vdCBpbiBgTWVldGluZ1R5cGVgIG9yIHdpdGggdXBkYXRlRmllbGRzIG5vdCBsaW5rZWQgdG8gcHJvcGVydGllcyBpblxuICAgKiBgTWVldGluZ1R5cGVgIGlzIGFuIGVycm9yLlxuICAgKi9cbiAgdXBkYXRlTWVldGluZ1R5cGUocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBtZWV0aW5nVHlwZTogUGFydGlhbDxNZWV0aW5nVHlwZT47XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIE1lZXRpbmdUeXBlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEubWVldGluZ1R5cGUsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLnVwZGF0ZU1lZXRpbmdUeXBlKHtcbiAgICAgICAgaWQ6IHJlcS5pZCxcbiAgICAgICAgbWVldGluZ1R5cGU6IE1lZXRpbmdUeXBlVG9BcGkoeyBtZWV0aW5nVHlwZTogcmVxLm1lZXRpbmdUeXBlIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZU1lZXRpbmdUeXBlKHJlcTogeyBpZDogc3RyaW5nIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmRlbGV0ZU1lZXRpbmdUeXBlKHsgaWQ6IHJlcS5pZCB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBnZXRIb3N0c0ZvckNhbGVuZGFyKHJlcTogeyBjYWxlbmRhcklkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8e1xuICAgIGhvc3RVc2VyczogSG9zdFVzZXJbXTtcbiAgICBhdmFpbGFiaWxpdHlSdWxlczogeyBba2V5OiBzdHJpbmddOiBBdmFpbGFiaWxpdHlSdWxlTGlzdCB9O1xuICB9PiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5nZXRIb3N0c0ZvckNhbGVuZGFyKHsgY2FsZW5kYXJJZDogcmVxLmNhbGVuZGFySWQgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICAgIGNvbnN0IGhvc3RVc2VycyA9IChyZXMuaG9zdFVzZXJzIHx8IFtdKS5tYXAoKGhvc3R1c2VyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaG9zdFVzZXJGcm9tQXBpKGhvc3R1c2VyKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IGF2YWlsYWJpbGl0eVJ1bGVzID0gcmVzLmhvc3RVc2VyQXZhaWxhYmlsaXR5UnVsZSB8fCB7fTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBob3N0VXNlcnMsXG4gICAgICAgICAgICBhdmFpbGFiaWxpdHlSdWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBJc0NhbGVuZGFyQ29uZmlndXJlZChcbiAgICByZXE6IElzQ2FsZW5kYXJDb25maWd1cmVkUmVxdWVzdEludGVyZmFjZSxcbiAgKTogT2JzZXJ2YWJsZTxJc0NhbGVuZGFyQ29uZmlndXJlZFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UuaXNDYWxlbmRhckNvbmZpZ3VyZWQocmVxKTtcbiAgfVxuXG4gIHNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsKFxuICAgIHJlcTogU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLnNlbmRNZWV0aW5nUmVxdWVzdEVtYWlsKHJlcSk7XG4gIH1cblxuICBjcmVhdGVTZXJ2aWNlKHJlcToge1xuICAgIHNlcnZpY2U6IFNlcnZpY2U7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIFNlcnZpY2UpW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWVsZE1hc2sgPSBnZXRGaWVsZE1hc2soe1xuICAgICAgbzogcmVxLnNlcnZpY2UsXG4gICAgICB1cGRhdGVGaWVsZHM6IHJlcS51cGRhdGVGaWVsZHMsXG4gICAgfSk7XG4gICAgaWYgKGZpZWxkTWFzay5wYXRocy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvZigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmNyZWF0ZVNlcnZpY2Uoe1xuICAgICAgICBzZXJ2aWNlOiBTZXJ2aWNlVHlwZVRvQXBpKHsgc2VydmljZTogcmVxLnNlcnZpY2UgfSksXG4gICAgICAgIGZpZWxkTWFzayxcbiAgICAgICAgaG9zdElkOiByZXEuSG9zdElkLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuaWQpKTtcbiAgfVxuXG4gIHVwZGF0ZVNlcnZpY2UocmVxOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBzZXJ2aWNlOiBQYXJ0aWFsPFNlcnZpY2U+O1xuICAgIHVwZGF0ZUZpZWxkcz86IChrZXlvZiBTZXJ2aWNlKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IGZpZWxkTWFzayA9IGdldEZpZWxkTWFzayh7XG4gICAgICBvOiByZXEuc2VydmljZSxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlU2VydmljZSh7XG4gICAgICAgIGlkOiByZXEuaWQsXG4gICAgICAgIHNlcnZpY2U6IFNlcnZpY2VUeXBlVG9BcGkoeyBzZXJ2aWNlOiByZXEuc2VydmljZSB9KSxcbiAgICAgICAgZmllbGRNYXNrLFxuICAgICAgICBob3N0SWQ6IHJlcS5Ib3N0SWQsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBkZWxldGVTZXJ2aWNlKHJlcTogeyBpZDogc3RyaW5nOyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kZWxldGVTZXJ2aWNlKHsgaWQ6IHJlcS5pZCwgaG9zdElkOiByZXEuaG9zdElkIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGxpc3RTZXJ2aWNlcyhyZXE6IHsgaG9zdElkOiBzdHJpbmcgfSk6IE9ic2VydmFibGU8U2VydmljZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdFNlcnZpY2VzKHsgaG9zdElkOiByZXEuaG9zdElkIH0pLnBpcGUoXG4gICAgICBtYXAoKHJlcykgPT4ge1xuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnNlcnZpY2VzKSB7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuc2VydmljZXMubWFwKChzZXJ2aWNlKSA9PlxuICAgICAgICAgIFNlcnZpY2VGcm9tQXBpKHtcbiAgICAgICAgICAgIHNlcnZpY2VBcGk6IHNlcnZpY2UsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb25Qcm9kdWN0aW9uR2xvYmFsKClcbiAgICAgICAgICAgICAgPyBFbnZpcm9ubWVudC5QUk9EXG4gICAgICAgICAgICAgIDogRW52aXJvbm1lbnQuREVNTyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVHcm91cChyZXE6IHtcbiAgICBncm91cDogR3JvdXA7XG4gICAgdXBkYXRlRmllbGRzPzogKGtleW9mIEdyb3VwKVtdO1xuICAgIEhvc3RJZD86IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5ncm91cCxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY3JlYXRlR3JvdXAoe1xuICAgICAgICBncm91cDogR3JvdXBUeXBlVG9BUGkoeyBncm91cDogcmVxLmdyb3VwIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzLmlkKSk7XG4gIH1cblxuICB1cGRhdGVHcm91cChyZXE6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGdyb3VwOiBQYXJ0aWFsPEdyb3VwPjtcbiAgICB1cGRhdGVGaWVsZHM/OiAoa2V5b2YgR3JvdXApW107XG4gICAgSG9zdElkPzogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgZmllbGRNYXNrID0gZ2V0RmllbGRNYXNrKHtcbiAgICAgIG86IHJlcS5ncm91cCxcbiAgICAgIHVwZGF0ZUZpZWxkczogcmVxLnVwZGF0ZUZpZWxkcyxcbiAgICB9KTtcbiAgICBpZiAoZmllbGRNYXNrLnBhdGhzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG9mKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAudXBkYXRlR3JvdXAoe1xuICAgICAgICBpZDogcmVxLmlkLFxuICAgICAgICBncm91cDogR3JvdXBUeXBlVG9BUGkoeyBncm91cDogcmVxLmdyb3VwIH0pLFxuICAgICAgICBmaWVsZE1hc2ssXG4gICAgICAgIGhvc3RJZDogcmVxLkhvc3RJZCxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyh1bmRlZmluZWQpKTtcbiAgfVxuXG4gIGRlbGV0ZUdyb3VwKHJlcTogeyBpZDogc3RyaW5nOyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5kZWxldGVHcm91cCh7IGlkOiByZXEuaWQsIGhvc3RJZDogcmVxLmhvc3RJZCB9KVxuICAgICAgLnBpcGUobWFwVG8odW5kZWZpbmVkKSk7XG4gIH1cblxuICBsaXN0R3JvdXBzKHJlcTogeyBob3N0SWQ6IHN0cmluZyB9KTogT2JzZXJ2YWJsZTxHcm91cFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2UubGlzdEdyb3Vwcyh7IGhvc3RJZDogcmVxLmhvc3RJZCB9KS5waXBlKFxuICAgICAgbWFwKChyZXMpID0+IHtcbiAgICAgICAgaWYgKCFyZXMgfHwgIXJlcy5ncm91cHMpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcy5ncm91cHMubWFwKChncm91cCkgPT5cbiAgICAgICAgICBHcm91cEZyb21BcGkoe1xuICAgICAgICAgICAgZ3JvdXBBcGk6IGdyb3VwLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9uUHJvZHVjdGlvbkdsb2JhbCgpXG4gICAgICAgICAgICAgID8gRW52aXJvbm1lbnQuUFJPRFxuICAgICAgICAgICAgICA6IEVudmlyb25tZW50LkRFTU8sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0R3JvdXAocmVxOiB7XG4gICAgZ3JvdXBJZDogc3RyaW5nO1xuICAgIHNsdWc6IHN0cmluZztcbiAgICBob3N0SWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldEdyb3VwKHJlcSk7XG4gIH1cbiAgZ2V0U2VydmljZShyZXE6IHtcbiAgICBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgICBzbHVnOiBzdHJpbmc7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gIH0pOiBPYnNlcnZhYmxlPEdldFNlcnZpY2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmdldFNlcnZpY2UocmVxKTtcbiAgfVxuXG4gIGNoZWNrR3JvdXBPclNlcnZpY2VTbHVnRXhpc3QocmVxOiB7XG4gICAgaG9zdElkOiBzdHJpbmc7XG4gICAgc2x1Z0lkZW50aWZpZXI6IHN0cmluZztcbiAgICBjYXRlZ29yeTogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jaGVja0dyb3VwT3JTZXJ2aWNlU2x1Z0V4aXN0KHJlcSlcbiAgICAgIC5waXBlKG1hcCgocmVzKSA9PiByZXMuZXhpc3RzKSk7XG4gIH1cblxuICBjaGVja0V2ZW50VHlwZVNsdWdFeGlzdChyZXE6IHtcbiAgICBjYWxlbmRhcklkOiBzdHJpbmc7XG4gICAgc2x1Z0lkZW50aWZpZXI6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlXG4gICAgICAuY2hlY2tFdmVudFR5cGVTbHVnRXhpc3QocmVxKVxuICAgICAgLnBpcGUobWFwKChyZXMpID0+IHJlcy5leGlzdHMpKTtcbiAgfVxuXG4gIGdldEVudGl0eUFzc29jaWF0aW9ucyhyZXE6IHtcbiAgICBlbnRpdHlJZDogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxFbnRpdHlBc3NvY2lhdGlvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5nZXRFbnRpdHlBc3NvY2lhdGlvbnMocmVxKTtcbiAgfVxuXG4gIGVuc3VyZVNlc3Npb25FdmVudENhbGVuZGFyc0V4aXN0KHJlcToge1xuICAgIGV4dGVybmFsSWQ6IHN0cmluZztcbiAgfSk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5lbnN1cmVTZXNzaW9uRXZlbnRDYWxlbmRhcnNFeGlzdCh7IGV4dGVybmFsSWQ6IHJlcS5leHRlcm5hbElkIH0pXG4gICAgICAucGlwZShtYXAoKHJlcykgPT4gcmVzPy5jYWxlbmRhcklkIHx8IFwiXCIpKTtcbiAgfVxuXG4gIGhvc3REZWxldGVBdHRlbmRlZXMocmVxOiB7XG4gICAgbWVldGluZ0lkOiBzdHJpbmc7XG4gICAgZW1haWxzVG9EZWxldGU6IEVtYWlsc1RvRGVsZXRlW107XG4gIH0pOiBPYnNlcnZhYmxlPG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmhvc3REZWxldGVBdHRlbmRlZXMoe1xuICAgICAgICAuLi5yZXEsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwVG8obnVsbCkpO1xuICB9XG5cbiAgbGlzdEF0dGVuZGVlcyhyZXE6IHtcbiAgICBtZWV0aW5nSWQ6IHN0cmluZztcbiAgICBwYWdpbmdPcHRpb25zOiBQYWdlZFJlcXVlc3RPcHRpb25zSW50ZXJmYWNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0QXR0ZW5kZWVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0QXR0ZW5kZWVzKHJlcSk7XG4gIH1cblxuICBjYW5jZWxTZXNzaW9uKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIGNhbmNlbGxhdGlvblJlYXNvbjogc3RyaW5nO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5jYW5jZWxTZXNzaW9uKHtcbiAgICAgICAgLi4ucmVxLFxuICAgICAgfSlcbiAgICAgIC5waXBlKG1hcFRvKG51bGwpKTtcbiAgfVxuXG4gIHJlc2NoZWR1bGVTZXNzaW9uKHJlcToge1xuICAgIG1lZXRpbmdJZDogc3RyaW5nO1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIHNlc3Npb25JZDogc3RyaW5nO1xuICAgIGlzUmVjdXJyaW5nOiBib29sZWFuO1xuICB9KTogT2JzZXJ2YWJsZTxudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEFQSVNlcnZpY2VcbiAgICAgIC5yZXNjaGVkdWxlU2Vzc2lvbih7XG4gICAgICAgIC4uLnJlcSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUbyhudWxsKSk7XG4gIH1cblxuICBsaXN0QXZhaWxhYmxlVGltZXNsb3RzRm9yU2Vzc2lvbihyZXE6IHtcbiAgICBldmVudFR5cGVJZDogc3RyaW5nO1xuICAgIHRpbWVTcGFuOiBUaW1lU3BhbjtcbiAgICB0aW1lWm9uZTogVGltZVpvbmVJbnRlcmZhY2U7XG4gICAgdXNlcklkczogc3RyaW5nW107XG4gIH0pOiBPYnNlcnZhYmxlPFRpbWVTcGFuW10+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZVxuICAgICAgLmxpc3RBdmFpbGFibGVUaW1lc2xvdHNGb3JTZXNzaW9uKHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3ApID0+XG4gICAgICAgICAgcmVzcC50aW1lU2xvdHMgPyByZXNwLnRpbWVTbG90cy5tYXAoKHRzKSA9PiBUaW1lU3BhbkZyb21BcGkodHMpKSA6IFtdLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgfVxuXG4gIGxpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnMocmVxOiB7XG4gICAgY2FsZW5kYXJJZHM6IHN0cmluZ1tdO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5ob3N0QVBJU2VydmljZS5saXN0RXZlbnRUeXBlc0Zvck11bHRpcGxlQ2FsZW5kYXJzKHJlcSk7XG4gIH1cblxuICBsaXN0Qm9va2luZ1R5cGVzRm9yQWkocmVxOiB7XG4gICAgdXNlcklkOiBzdHJpbmc7XG4gICAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gICAgYm9va2luZ1NvdXJjZTogZS5Cb29raW5nU291cmNlO1xuICB9KTogT2JzZXJ2YWJsZTxMaXN0Qm9va2luZ1R5cGVzRm9yQUlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RBUElTZXJ2aWNlLmxpc3RCb29raW5nVHlwZXNGb3JBaShyZXEpO1xuICB9XG5cbn1cblxuIl19
@@ -5,4 +5,4 @@ export { addMetadataToBookingLink } from './host/url';
5
5
  export { MeetingSource, MeetingSourceStatus, DayOfWeek, FormFieldType, CalendarType, MeetingLocation, MeetingLocationType, CalendarSource, RelativeTimeUnit, DateRangeType, TeamEventMeetingType, OnBoardingState, RegistrationCutOffUnit, NotificationType, BookingSource, FeatureFlagFieldType, CalendarView } from './_internal/enums/index';
6
6
  export { MeetingSourceQuery, MeetingSourceInfo, MeetingSourceListResponse, Contact, WeekdayAvailability, CreateCalendarRequest, CreateCalendarResponse, CheckFeatureFlagRequest, CheckFeatureFlagResponse, GuestGetBookedMeetingResponseV2, GetServiceV2Response, BookBatchMeetingResponse, ListBatchAvailableTimeSlotsResponse, ListGuestBookedMeetingsResponse, MeetingDetail, ServiceEventType, ServiceGroup, BookedMeetingV2, HostBookBatchMeetingResponse, HostListBatchAvailableTimeSlotsResponse, ListBookedMeetingsV2Response, CalendarMember, } from './_internal/objects/index';
7
7
  export { PagedResponse, WellKnownMeetingMetadataKeys, WellKnownFormFieldIds, meetingSchedulerIdToMetadataKey, durationFromString, durationToString, durationStringToMinutes, newBusinessCenterApplicationContextProperties, newSalesCenterApplicationContextProperties, newPartnerCenterApplicationContextProperties, KnownCalendarApplicationContextKeys, KnownCalendarExternalIntegrations, MeetingSourceOrigin, } from './shared/index';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tZWV0aW5nc19zZGsvc3JjL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsZUFBZSxFQUF1QixNQUFNLG9CQUFvQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFHLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUUvVSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsbUNBQW1DLEVBQ25DLCtCQUErQixFQUMvQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsNEJBQTRCLEVBQzVCLHVDQUF1QyxFQUN2Qyw0QkFBNEIsRUFDNUIsY0FBYyxHQUNqQixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFHSCxhQUFhLEVBZWIsNEJBQTRCLEVBQzVCLHFCQUFxQixFQUNyQiwrQkFBK0IsRUFDL0Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsNkNBQTZDLEVBQzdDLDBDQUEwQyxFQUMxQyw0Q0FBNEMsRUFLNUMsbUNBQW1DLEVBQ25DLGlDQUFpQyxFQUtqQyxtQkFBbUIsR0FFdEIsTUFBTSxnQkFBZ0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7TWVldGluZ3NTREssIE1lZXRpbmdzU2VydmljZSwgU3RhcnRNZWV0aW5nUmVzcG9uc2V9IGZyb20gJy4vbWVldGluZ3Muc2VydmljZSc7XG5leHBvcnQge0Jvb2tlZE1lZXRpbmdJbmZvLCBCb29rTWVldGluZ1Jlc3BvbnNlLCBHdWVzdFNlcnZpY2VJbnRlcmZhY2V9IGZyb20gJy4vZ3Vlc3QnO1xuZXhwb3J0IHtHdWVzdFNlcnZpY2V9IGZyb20gJy4vZ3Vlc3QvZ3Vlc3Quc2VydmljZSc7XG5leHBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuL2hvc3QvaG9zdC5zZXJ2aWNlJztcbmV4cG9ydCB7YWRkTWV0YWRhdGFUb0Jvb2tpbmdMaW5rfSBmcm9tICcuL2hvc3QvdXJsJztcbmV4cG9ydCB7TWVldGluZ1NvdXJjZSwgTWVldGluZ1NvdXJjZVN0YXR1cywgRGF5T2ZXZWVrLCBGb3JtRmllbGRUeXBlLCBDYWxlbmRhclR5cGUsIE1lZXRpbmdMb2NhdGlvbiwgIE1lZXRpbmdMb2NhdGlvblR5cGUsIENhbGVuZGFyU291cmNlLCBSZWxhdGl2ZVRpbWVVbml0LCBEYXRlUmFuZ2VUeXBlLCBUZWFtRXZlbnRNZWV0aW5nVHlwZSwgT25Cb2FyZGluZ1N0YXRlLCBSZWdpc3RyYXRpb25DdXRPZmZVbml0LCBOb3RpZmljYXRpb25UeXBlLCBCb29raW5nU291cmNlLCBGZWF0dXJlRmxhZ0ZpZWxkVHlwZSwgQ2FsZW5kYXJWaWV3fSBmcm9tICcuL19pbnRlcm5hbC9lbnVtcy9pbmRleCc7XG5cbmV4cG9ydCB7XG4gICAgTWVldGluZ1NvdXJjZVF1ZXJ5LFxuICAgIE1lZXRpbmdTb3VyY2VJbmZvLFxuICAgIE1lZXRpbmdTb3VyY2VMaXN0UmVzcG9uc2UsXG4gICAgQ29udGFjdCxcbiAgICBXZWVrZGF5QXZhaWxhYmlsaXR5LFxuICAgIENyZWF0ZUNhbGVuZGFyUmVxdWVzdCxcbiAgICBDcmVhdGVDYWxlbmRhclJlc3BvbnNlLFxuICAgIENoZWNrRmVhdHVyZUZsYWdSZXF1ZXN0LFxuICAgIENoZWNrRmVhdHVyZUZsYWdSZXNwb25zZSxcbiAgICBHdWVzdEdldEJvb2tlZE1lZXRpbmdSZXNwb25zZVYyLFxuICAgIEdldFNlcnZpY2VWMlJlc3BvbnNlLFxuICAgIEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZSxcbiAgICBMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSxcbiAgICBMaXN0R3Vlc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlLFxuICAgIE1lZXRpbmdEZXRhaWwsXG4gICAgU2VydmljZUV2ZW50VHlwZSxcbiAgICBTZXJ2aWNlR3JvdXAsXG4gICAgQm9va2VkTWVldGluZ1YyLFxuICAgIEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UsXG4gICAgSG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c1Jlc3BvbnNlLFxuICAgIExpc3RCb29rZWRNZWV0aW5nc1YyUmVzcG9uc2UsXG4gICAgQ2FsZW5kYXJNZW1iZXIsXG59IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvaW5kZXgnXG5leHBvcnQge1xuICAgIEhvc3QsXG4gICAgVGltZVNwYW4sXG4gICAgUGFnZWRSZXNwb25zZSxcbiAgICBCb29rZWRNZWV0aW5nR3JvdXAsXG4gICAgTWVldGluZyxcbiAgICBNZWV0aW5nVHlwZSxcbiAgICBBdHRlbmRlZSxcbiAgICBBdmFpbGFiaWxpdHlSdWxlLFxuICAgIENhbGVuZGFyLFxuICAgIEhvc3RVcmxNYXAsXG4gICAgUHJlZmVyZW5jZXMsXG4gICAgRHVyYXRpb24sXG4gICAgTWVldGluZ1R5cGVGb3JtLFxuICAgIE1lZXRpbmdUeXBlRm9ybUZpZWxkLFxuICAgIE1lZXRpbmdGb3JtLFxuICAgIE1lZXRpbmdGb3JtQW5zd2VyLFxuICAgIE1lZXRpbmdNZXRhZGF0YSxcbiAgICBXZWxsS25vd25NZWV0aW5nTWV0YWRhdGFLZXlzLFxuICAgIFdlbGxLbm93bkZvcm1GaWVsZElkcyxcbiAgICBtZWV0aW5nU2NoZWR1bGVySWRUb01ldGFkYXRhS2V5LFxuICAgIGR1cmF0aW9uRnJvbVN0cmluZyxcbiAgICBkdXJhdGlvblRvU3RyaW5nLFxuICAgIGR1cmF0aW9uU3RyaW5nVG9NaW51dGVzLFxuICAgIG5ld0J1c2luZXNzQ2VudGVyQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyxcbiAgICBuZXdTYWxlc0NlbnRlckFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMsXG4gICAgbmV3UGFydG5lckNlbnRlckFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMsXG4gICAgQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1NldCxcbiAgICBCdXNpbmVzc0NlbnRlckFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMsXG4gICAgU2FsZXNDZW50ZXJBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzLFxuICAgIFBhcnRuZXJDZW50ZXJBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzLFxuICAgIEtub3duQ2FsZW5kYXJBcHBsaWNhdGlvbkNvbnRleHRLZXlzLFxuICAgIEtub3duQ2FsZW5kYXJFeHRlcm5hbEludGVncmF0aW9ucyxcbiAgICBIb3N0VXNlcixcbiAgICBHcm91cCxcbiAgICBTZXJ2aWNlLFxuICAgIEV2ZW50R3JvdXBBbmRTZXJ2aWNlQXNzb2NpYXRpb25zLFxuICAgIE1lZXRpbmdTb3VyY2VPcmlnaW4sXG4gICAgRW50aXR5QXNzb2NpYXRpb25zLFxufSBmcm9tICcuL3NoYXJlZC9pbmRleCdcbmV4cG9ydCB7XG4gICAgVGltZVJhbmdlSW50ZXJmYWNlIGFzIFRpbWVSYW5nZSxcbiAgICBUaW1lT2ZEYXlJbnRlcmZhY2UgYXMgVGltZU9mRGF5LFxuICAgIFRpbWVab25lSW50ZXJmYWNlIGFzIFRpbWVab25lLFxuICAgIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIGFzIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzLFxuICAgIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSBhcyBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnMsXG4gICAgUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSBhcyBQYWdlZFJlcXVlc3RPcHRpb25zLFxuICAgIERhdGVSYW5nZUludGVyZmFjZSBhcyBEYXRlUmFuZ2UsXG4gICAgQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIENyZWF0ZUNhbGVuZGFyUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgVXBkYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIEF0dGFjaG1lbnRJbnRlcmZhY2UsXG4gICAgR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZUludGVyZmFjZSxcbiAgICBJc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIEV2ZW50VHlwZURhdGVSYW5nZUludGVyZmFjZSxcbiAgICBEYXRlUmFuZ2VJbnRlcmZhY2UsXG4gICAgUmVsYXRpdmVEYXRlUmFuZ2VJbnRlcmZhY2UsXG4gICAgQ2hlY2tGZWF0dXJlRmxhZ1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgQ2hlY2tGZWF0dXJlRmxhZ1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgIENoZWNrRXZlbnRUeXBlU2x1Z0V4aXN0UmVxdWVzdEludGVyZmFjZSxcbiAgICBDaGVja0V2ZW50VHlwZVNsdWdFeGlzdFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgIEhvc3RCb29rTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgTWVldGluZ0ludGVyZmFjZSxcbiAgICBQaG9uZUZpZWxkc0ludGVyZmFjZSxcbiAgICBBdmFpbGFiaWxpdHlSdWxlTGlzdEludGVyZmFjZSBhcyBBdmFpbGFiaWxpdHlSdWxlTGlzdCxcbiAgICBFdmVudFR5cGVTdW1tYXJ5SW50ZXJmYWNlLFxuICAgIExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZUludGVyZmFjZSxcbiAgICBFbWFpbHNUb0RlbGV0ZUludGVyZmFjZSxcbiAgICBHZXRHcm91cFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgIEdldFNlcnZpY2VSZXNwb25zZUludGVyZmFjZSxcbiAgICBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgTGlzdEF0dGVuZGVlc1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgIFJlc2NoZWR1bGVNZWV0aW5nUmVxdWVzdEludGVyZmFjZSxcbiAgICBTZXNzaW9uQXR0ZW5kZWVzSW50ZXJmYWNlLFxuICAgIEd1ZXN0R2V0Qm9va2VkTWVldGluZ1Jlc3BvbnNlVjJJbnRlcmZhY2UsXG4gICAgTWVldGluZ0RldGFpbEludGVyZmFjZSxcbiAgICBTZXJ2aWNlRXZlbnRUeXBlSW50ZXJmYWNlLFxuICAgIFNlcnZpY2VHcm91cEludGVyZmFjZSxcbiAgICBIb3N0VXNlckludGVyZmFjZSxcbiAgICBCYXRjaEJvb2tpbmdUYXJnZXRJbnRlcmZhY2UsXG4gICAgQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2UsXG4gICAgQm9va2VkTWVldGluZ1YySW50ZXJmYWNlLFxuICAgIEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgSG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgIExpc3RCb29rZWRNZWV0aW5nc1YyUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgQ2FsZW5kYXJNZW1iZXJJbnRlcmZhY2UsXG59IGZyb20gJy4vX2ludGVybmFsL2ludGVyZmFjZXMvaW5kZXgnIl19
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tZWV0aW5nc19zZGsvc3JjL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsZUFBZSxFQUF1QixNQUFNLG9CQUFvQixDQUFDO0FBRXRGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFHLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUUvVSxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsbUNBQW1DLEVBQ25DLCtCQUErQixFQUMvQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixlQUFlLEVBQ2YsNEJBQTRCLEVBQzVCLHVDQUF1QyxFQUN2Qyw0QkFBNEIsRUFDNUIsY0FBYyxHQUNqQixNQUFNLDJCQUEyQixDQUFBO0FBQ2xDLE9BQU8sRUFHSCxhQUFhLEVBZWIsNEJBQTRCLEVBQzVCLHFCQUFxQixFQUNyQiwrQkFBK0IsRUFDL0Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsNkNBQTZDLEVBQzdDLDBDQUEwQyxFQUMxQyw0Q0FBNEMsRUFLNUMsbUNBQW1DLEVBQ25DLGlDQUFpQyxFQUtqQyxtQkFBbUIsR0FJdEIsTUFBTSxnQkFBZ0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7TWVldGluZ3NTREssIE1lZXRpbmdzU2VydmljZSwgU3RhcnRNZWV0aW5nUmVzcG9uc2V9IGZyb20gJy4vbWVldGluZ3Muc2VydmljZSc7XG5leHBvcnQge0Jvb2tlZE1lZXRpbmdJbmZvLCBCb29rTWVldGluZ1Jlc3BvbnNlLCBHdWVzdFNlcnZpY2VJbnRlcmZhY2V9IGZyb20gJy4vZ3Vlc3QnO1xuZXhwb3J0IHtHdWVzdFNlcnZpY2V9IGZyb20gJy4vZ3Vlc3QvZ3Vlc3Quc2VydmljZSc7XG5leHBvcnQge0hvc3RTZXJ2aWNlfSBmcm9tICcuL2hvc3QvaG9zdC5zZXJ2aWNlJztcbmV4cG9ydCB7YWRkTWV0YWRhdGFUb0Jvb2tpbmdMaW5rfSBmcm9tICcuL2hvc3QvdXJsJztcbmV4cG9ydCB7TWVldGluZ1NvdXJjZSwgTWVldGluZ1NvdXJjZVN0YXR1cywgRGF5T2ZXZWVrLCBGb3JtRmllbGRUeXBlLCBDYWxlbmRhclR5cGUsIE1lZXRpbmdMb2NhdGlvbiwgIE1lZXRpbmdMb2NhdGlvblR5cGUsIENhbGVuZGFyU291cmNlLCBSZWxhdGl2ZVRpbWVVbml0LCBEYXRlUmFuZ2VUeXBlLCBUZWFtRXZlbnRNZWV0aW5nVHlwZSwgT25Cb2FyZGluZ1N0YXRlLCBSZWdpc3RyYXRpb25DdXRPZmZVbml0LCBOb3RpZmljYXRpb25UeXBlLCBCb29raW5nU291cmNlLCBGZWF0dXJlRmxhZ0ZpZWxkVHlwZSwgQ2FsZW5kYXJWaWV3fSBmcm9tICcuL19pbnRlcm5hbC9lbnVtcy9pbmRleCc7XG5cbmV4cG9ydCB7XG4gICAgTWVldGluZ1NvdXJjZVF1ZXJ5LFxuICAgIE1lZXRpbmdTb3VyY2VJbmZvLFxuICAgIE1lZXRpbmdTb3VyY2VMaXN0UmVzcG9uc2UsXG4gICAgQ29udGFjdCxcbiAgICBXZWVrZGF5QXZhaWxhYmlsaXR5LFxuICAgIENyZWF0ZUNhbGVuZGFyUmVxdWVzdCxcbiAgICBDcmVhdGVDYWxlbmRhclJlc3BvbnNlLFxuICAgIENoZWNrRmVhdHVyZUZsYWdSZXF1ZXN0LFxuICAgIENoZWNrRmVhdHVyZUZsYWdSZXNwb25zZSxcbiAgICBHdWVzdEdldEJvb2tlZE1lZXRpbmdSZXNwb25zZVYyLFxuICAgIEdldFNlcnZpY2VWMlJlc3BvbnNlLFxuICAgIEJvb2tCYXRjaE1lZXRpbmdSZXNwb25zZSxcbiAgICBMaXN0QmF0Y2hBdmFpbGFibGVUaW1lU2xvdHNSZXNwb25zZSxcbiAgICBMaXN0R3Vlc3RCb29rZWRNZWV0aW5nc1Jlc3BvbnNlLFxuICAgIE1lZXRpbmdEZXRhaWwsXG4gICAgU2VydmljZUV2ZW50VHlwZSxcbiAgICBTZXJ2aWNlR3JvdXAsXG4gICAgQm9va2VkTWVldGluZ1YyLFxuICAgIEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2UsXG4gICAgSG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c1Jlc3BvbnNlLFxuICAgIExpc3RCb29rZWRNZWV0aW5nc1YyUmVzcG9uc2UsXG4gICAgQ2FsZW5kYXJNZW1iZXIsXG59IGZyb20gJy4vX2ludGVybmFsL29iamVjdHMvaW5kZXgnXG5leHBvcnQge1xuICAgIEhvc3QsXG4gICAgVGltZVNwYW4sXG4gICAgUGFnZWRSZXNwb25zZSxcbiAgICBCb29rZWRNZWV0aW5nR3JvdXAsXG4gICAgTWVldGluZyxcbiAgICBNZWV0aW5nVHlwZSxcbiAgICBBdHRlbmRlZSxcbiAgICBBdmFpbGFiaWxpdHlSdWxlLFxuICAgIENhbGVuZGFyLFxuICAgIEhvc3RVcmxNYXAsXG4gICAgUHJlZmVyZW5jZXMsXG4gICAgRHVyYXRpb24sXG4gICAgTWVldGluZ1R5cGVGb3JtLFxuICAgIE1lZXRpbmdUeXBlRm9ybUZpZWxkLFxuICAgIE1lZXRpbmdGb3JtLFxuICAgIE1lZXRpbmdGb3JtQW5zd2VyLFxuICAgIE1lZXRpbmdNZXRhZGF0YSxcbiAgICBXZWxsS25vd25NZWV0aW5nTWV0YWRhdGFLZXlzLFxuICAgIFdlbGxLbm93bkZvcm1GaWVsZElkcyxcbiAgICBtZWV0aW5nU2NoZWR1bGVySWRUb01ldGFkYXRhS2V5LFxuICAgIGR1cmF0aW9uRnJvbVN0cmluZyxcbiAgICBkdXJhdGlvblRvU3RyaW5nLFxuICAgIGR1cmF0aW9uU3RyaW5nVG9NaW51dGVzLFxuICAgIG5ld0J1c2luZXNzQ2VudGVyQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllcyxcbiAgICBuZXdTYWxlc0NlbnRlckFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMsXG4gICAgbmV3UGFydG5lckNlbnRlckFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMsXG4gICAgQXBwbGljYXRpb25Db250ZXh0UHJvcGVydGllc1NldCxcbiAgICBCdXNpbmVzc0NlbnRlckFwcGxpY2F0aW9uQ29udGV4dFByb3BlcnRpZXMsXG4gICAgU2FsZXNDZW50ZXJBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzLFxuICAgIFBhcnRuZXJDZW50ZXJBcHBsaWNhdGlvbkNvbnRleHRQcm9wZXJ0aWVzLFxuICAgIEtub3duQ2FsZW5kYXJBcHBsaWNhdGlvbkNvbnRleHRLZXlzLFxuICAgIEtub3duQ2FsZW5kYXJFeHRlcm5hbEludGVncmF0aW9ucyxcbiAgICBIb3N0VXNlcixcbiAgICBHcm91cCxcbiAgICBTZXJ2aWNlLFxuICAgIEV2ZW50R3JvdXBBbmRTZXJ2aWNlQXNzb2NpYXRpb25zLFxuICAgIE1lZXRpbmdTb3VyY2VPcmlnaW4sXG4gICAgRW50aXR5QXNzb2NpYXRpb25zLFxuICAgIE1lZXRpbmdTdGF0cyxcbiAgICBNZWV0aW5nU3RhdFBvaW50LFxufSBmcm9tICcuL3NoYXJlZC9pbmRleCdcbmV4cG9ydCB7XG4gICAgVGltZVJhbmdlSW50ZXJmYWNlIGFzIFRpbWVSYW5nZSxcbiAgICBUaW1lT2ZEYXlJbnRlcmZhY2UgYXMgVGltZU9mRGF5LFxuICAgIFRpbWVab25lSW50ZXJmYWNlIGFzIFRpbWVab25lLFxuICAgIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzSW50ZXJmYWNlIGFzIExpc3RCb29rZWRNZWV0aW5nc1JlcXVlc3RGaWx0ZXJzLFxuICAgIExpc3RBdmFpbGFiaWxpdHlSZXF1ZXN0RmlsdGVyc0ludGVyZmFjZSBhcyBMaXN0QXZhaWxhYmlsaXR5UmVxdWVzdEZpbHRlcnMsXG4gICAgUGFnZWRSZXF1ZXN0T3B0aW9uc0ludGVyZmFjZSBhcyBQYWdlZFJlcXVlc3RPcHRpb25zLFxuICAgIERhdGVSYW5nZUludGVyZmFjZSBhcyBEYXRlUmFuZ2UsXG4gICAgQ3JlYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIENyZWF0ZUNhbGVuZGFyUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgVXBkYXRlQ2FsZW5kYXJSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIEF0dGFjaG1lbnRJbnRlcmZhY2UsXG4gICAgR29vZ2xlTWVldE1lZXRpbmdBdHRlbmRlZUludGVyZmFjZSxcbiAgICBJc0NhbGVuZGFyQ29uZmlndXJlZFJlcXVlc3RJbnRlcmZhY2UsXG4gICAgU2VuZE1lZXRpbmdSZXF1ZXN0RW1haWxSZXF1ZXN0SW50ZXJmYWNlLFxuICAgIEV2ZW50VHlwZURhdGVSYW5nZUludGVyZmFjZSxcbiAgICBEYXRlUmFuZ2VJbnRlcmZhY2UsXG4gICAgUmVsYXRpdmVEYXRlUmFuZ2VJbnRlcmZhY2UsXG4gICAgQ2hlY2tGZWF0dXJlRmxhZ1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgQ2hlY2tGZWF0dXJlRmxhZ1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgIENoZWNrRXZlbnRUeXBlU2x1Z0V4aXN0UmVxdWVzdEludGVyZmFjZSxcbiAgICBDaGVja0V2ZW50VHlwZVNsdWdFeGlzdFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgIEhvc3RCb29rTWVldGluZ1JlcXVlc3RJbnRlcmZhY2UsXG4gICAgTWVldGluZ0ludGVyZmFjZSxcbiAgICBQaG9uZUZpZWxkc0ludGVyZmFjZSxcbiAgICBBdmFpbGFiaWxpdHlSdWxlTGlzdEludGVyZmFjZSBhcyBBdmFpbGFiaWxpdHlSdWxlTGlzdCxcbiAgICBFdmVudFR5cGVTdW1tYXJ5SW50ZXJmYWNlLFxuICAgIExpc3RFdmVudFR5cGVzRm9yTXVsdGlwbGVDYWxlbmRhcnNSZXNwb25zZUludGVyZmFjZSxcbiAgICBFbWFpbHNUb0RlbGV0ZUludGVyZmFjZSxcbiAgICBHZXRHcm91cFJlc3BvbnNlSW50ZXJmYWNlLFxuICAgIEdldFNlcnZpY2VSZXNwb25zZUludGVyZmFjZSxcbiAgICBJc0hvc3RDb25maWd1cmVkUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgTGlzdEF0dGVuZGVlc1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgIFJlc2NoZWR1bGVNZWV0aW5nUmVxdWVzdEludGVyZmFjZSxcbiAgICBTZXNzaW9uQXR0ZW5kZWVzSW50ZXJmYWNlLFxuICAgIEd1ZXN0R2V0Qm9va2VkTWVldGluZ1Jlc3BvbnNlVjJJbnRlcmZhY2UsXG4gICAgTWVldGluZ0RldGFpbEludGVyZmFjZSxcbiAgICBTZXJ2aWNlRXZlbnRUeXBlSW50ZXJmYWNlLFxuICAgIFNlcnZpY2VHcm91cEludGVyZmFjZSxcbiAgICBIb3N0VXNlckludGVyZmFjZSxcbiAgICBCYXRjaEJvb2tpbmdUYXJnZXRJbnRlcmZhY2UsXG4gICAgQmF0Y2hFdmVudFR5cGVUYXJnZXRJbnRlcmZhY2UsXG4gICAgQm9va2VkTWVldGluZ1YySW50ZXJmYWNlLFxuICAgIEhvc3RCb29rQmF0Y2hNZWV0aW5nUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgSG9zdExpc3RCYXRjaEF2YWlsYWJsZVRpbWVTbG90c1Jlc3BvbnNlSW50ZXJmYWNlLFxuICAgIExpc3RCb29rZWRNZWV0aW5nc1YyUmVzcG9uc2VJbnRlcmZhY2UsXG4gICAgQ2FsZW5kYXJNZW1iZXJJbnRlcmZhY2UsXG59IGZyb20gJy4vX2ludGVybmFsL2ludGVyZmFjZXMvaW5kZXgnIl19
@@ -13,4 +13,5 @@ export * from './host-id';
13
13
  export * from './host-user';
14
14
  export * from './groups-and-services';
15
15
  export * from './origin';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZWV0aW5nc19zZGsvc3JjL2xpYi9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLFdBQVcsQ0FBQTtBQUN6QixjQUFjLGtCQUFrQixDQUFBO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90aW1lLXNwYW4nXG5leHBvcnQgKiBmcm9tICcuL2hvc3QnXG5leHBvcnQgKiBmcm9tICcuL21lZXRpbmctdHlwZSdcbmV4cG9ydCAqIGZyb20gJy4vbWVldGluZydcbmV4cG9ydCAqIGZyb20gJy4vcGFnZWQtcmVzcG9uc2UnXG5leHBvcnQgKiBmcm9tICcuL2F2YWlsYWJpbGl0eSc7XG5leHBvcnQgKiBmcm9tICcuL2NhbGVuZGFyJztcbmV4cG9ydCAqIGZyb20gJy4vaG9zdC11cmwtbWFwJztcbmV4cG9ydCAqIGZyb20gJy4vcHJlZmVyZW5jZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9kdXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2ZpZWxkbWFzayc7XG5leHBvcnQgKiBmcm9tICcuL2hvc3QtaWQnO1xuZXhwb3J0ICogZnJvbSAnLi9ob3N0LXVzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cHMtYW5kLXNlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vb3JpZ2luJztcbiJdfQ==
16
+ export * from './meeting-stats';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9tZWV0aW5nc19zZGsvc3JjL2xpYi9zaGFyZWQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxnQkFBZ0IsQ0FBQTtBQUM5QixjQUFjLFdBQVcsQ0FBQTtBQUN6QixjQUFjLGtCQUFrQixDQUFBO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RpbWUtc3BhbidcbmV4cG9ydCAqIGZyb20gJy4vaG9zdCdcbmV4cG9ydCAqIGZyb20gJy4vbWVldGluZy10eXBlJ1xuZXhwb3J0ICogZnJvbSAnLi9tZWV0aW5nJ1xuZXhwb3J0ICogZnJvbSAnLi9wYWdlZC1yZXNwb25zZSdcbmV4cG9ydCAqIGZyb20gJy4vYXZhaWxhYmlsaXR5JztcbmV4cG9ydCAqIGZyb20gJy4vY2FsZW5kYXInO1xuZXhwb3J0ICogZnJvbSAnLi9ob3N0LXVybC1tYXAnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmVmZXJlbmNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2R1cmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZmllbGRtYXNrJztcbmV4cG9ydCAqIGZyb20gJy4vaG9zdC1pZCc7XG5leHBvcnQgKiBmcm9tICcuL2hvc3QtdXNlcic7XG5leHBvcnQgKiBmcm9tICcuL2dyb3Vwcy1hbmQtc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcmlnaW4nO1xuZXhwb3J0ICogZnJvbSAnLi9tZWV0aW5nLXN0YXRzJztcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ export function meetingStatsFromApi(resp) {
2
+ return {
3
+ totalMeetingsScheduled: resp.totalMeetingsScheduled || 0,
4
+ previousTotalMeetingsScheduled: resp.previousTotalMeetingsScheduled || 0,
5
+ dailyMeetingsScheduled: (resp.dailyMeetingsScheduled || []).map((point) => ({
6
+ date: point.date,
7
+ count: point.count || 0,
8
+ })),
9
+ totalMeetingsCancelled: resp.totalMeetingsCancelled || 0,
10
+ totalMeetingsRescheduled: resp.totalMeetingsRescheduled || 0,
11
+ totalAbandonedCarts: resp.totalAbandonedCarts || 0,
12
+ totalCalendarDisconnected: resp.totalCalendarDisconnected || 0,
13
+ totalBookedByAiChat: resp.totalBookedByAiChat || 0,
14
+ totalBookedByAiVoice: resp.totalBookedByAiVoice || 0,
15
+ };
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVldGluZy1zdGF0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21lZXRpbmdzX3Nkay9zcmMvbGliL3NoYXJlZC9tZWV0aW5nLXN0YXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlCQSxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBNkI7SUFDL0QsT0FBTztRQUNMLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDO1FBQ3hELDhCQUE4QixFQUFFLElBQUksQ0FBQyw4QkFBOEIsSUFBSSxDQUFDO1FBQ3hFLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQztTQUN4QixDQUFDLENBQUM7UUFDSCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLElBQUksQ0FBQztRQUN4RCx3QkFBd0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLElBQUksQ0FBQztRQUM1RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQztRQUNsRCx5QkFBeUIsRUFBRSxJQUFJLENBQUMseUJBQXlCLElBQUksQ0FBQztRQUM5RCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQztRQUNsRCxvQkFBb0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLElBQUksQ0FBQztLQUNyRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdldE1lZXRpbmdTdGF0c1Jlc3BvbnNlIH0gZnJvbSBcIi4uL19pbnRlcm5hbFwiO1xuXG4vLyBNZWV0aW5nU3RhdFBvaW50IGlzIGEgc2luZ2xlIGRheS13aXNlIGRhdGEgcG9pbnQgZm9yIHRoZSBtZWV0aW5ncyB0aW1lLXNlcmllcyBncmFwaC5cbmV4cG9ydCBpbnRlcmZhY2UgTWVldGluZ1N0YXRQb2ludCB7XG4gIC8vIFN0YXJ0IG9mIHRoZSBkYXkgKGluIHRoZSByZXF1ZXN0J3MgdGltZSB6b25lKSB0aGF0IHRoaXMgcG9pbnQgYWdncmVnYXRlcy5cbiAgZGF0ZTogRGF0ZTtcbiAgLy8gTnVtYmVyIG9mIG1lZXRpbmdzIHNjaGVkdWxlZCBvbiB0aGlzIGRheS5cbiAgY291bnQ6IG51bWJlcjtcbn1cblxuLy8gTWVldGluZ1N0YXRzIGlzIHRoZSBmcmllbmRseSBzaGFwZSByZXR1cm5lZCBieSBIb3N0U2VydmljZS5nZXRNZWV0aW5nU3RhdHMuIEl0IGJhY2tzIHRoZVxuLy8gXCJNeSBNZWV0aW5nc1wiIGRhc2hib2FyZCBjYXJkOiBhIGhlYWRsaW5lIHRvdGFsIHdpdGggYSB0cmVuZCBkZWx0YSAodnMuIHRoZSBpbW1lZGlhdGVseVxuLy8gcHJlY2VkaW5nIHBlcmlvZCBvZiBlcXVhbCBsZW5ndGgpLCBhIGRheS13aXNlIHNlcmllcyBmb3IgdGhlIGdyYXBoLCBhbmQgYnJlYWtkb3duIHRvdGFscy5cbmV4cG9ydCBpbnRlcmZhY2UgTWVldGluZ1N0YXRzIHtcbiAgdG90YWxNZWV0aW5nc1NjaGVkdWxlZDogbnVtYmVyO1xuICBwcmV2aW91c1RvdGFsTWVldGluZ3NTY2hlZHVsZWQ6IG51bWJlcjtcbiAgZGFpbHlNZWV0aW5nc1NjaGVkdWxlZDogTWVldGluZ1N0YXRQb2ludFtdO1xuICB0b3RhbE1lZXRpbmdzQ2FuY2VsbGVkOiBudW1iZXI7XG4gIHRvdGFsTWVldGluZ3NSZXNjaGVkdWxlZDogbnVtYmVyO1xuICB0b3RhbEFiYW5kb25lZENhcnRzOiBudW1iZXI7XG4gIHRvdGFsQ2FsZW5kYXJEaXNjb25uZWN0ZWQ6IG51bWJlcjtcbiAgdG90YWxCb29rZWRCeUFpQ2hhdDogbnVtYmVyO1xuICB0b3RhbEJvb2tlZEJ5QWlWb2ljZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVldGluZ1N0YXRzRnJvbUFwaShyZXNwOiBHZXRNZWV0aW5nU3RhdHNSZXNwb25zZSk6IE1lZXRpbmdTdGF0cyB7XG4gIHJldHVybiB7XG4gICAgdG90YWxNZWV0aW5nc1NjaGVkdWxlZDogcmVzcC50b3RhbE1lZXRpbmdzU2NoZWR1bGVkIHx8IDAsXG4gICAgcHJldmlvdXNUb3RhbE1lZXRpbmdzU2NoZWR1bGVkOiByZXNwLnByZXZpb3VzVG90YWxNZWV0aW5nc1NjaGVkdWxlZCB8fCAwLFxuICAgIGRhaWx5TWVldGluZ3NTY2hlZHVsZWQ6IChyZXNwLmRhaWx5TWVldGluZ3NTY2hlZHVsZWQgfHwgW10pLm1hcCgocG9pbnQpID0+ICh7XG4gICAgICBkYXRlOiBwb2ludC5kYXRlLFxuICAgICAgY291bnQ6IHBvaW50LmNvdW50IHx8IDAsXG4gICAgfSkpLFxuICAgIHRvdGFsTWVldGluZ3NDYW5jZWxsZWQ6IHJlc3AudG90YWxNZWV0aW5nc0NhbmNlbGxlZCB8fCAwLFxuICAgIHRvdGFsTWVldGluZ3NSZXNjaGVkdWxlZDogcmVzcC50b3RhbE1lZXRpbmdzUmVzY2hlZHVsZWQgfHwgMCxcbiAgICB0b3RhbEFiYW5kb25lZENhcnRzOiByZXNwLnRvdGFsQWJhbmRvbmVkQ2FydHMgfHwgMCxcbiAgICB0b3RhbENhbGVuZGFyRGlzY29ubmVjdGVkOiByZXNwLnRvdGFsQ2FsZW5kYXJEaXNjb25uZWN0ZWQgfHwgMCxcbiAgICB0b3RhbEJvb2tlZEJ5QWlDaGF0OiByZXNwLnRvdGFsQm9va2VkQnlBaUNoYXQgfHwgMCxcbiAgICB0b3RhbEJvb2tlZEJ5QWlWb2ljZTogcmVzcC50b3RhbEJvb2tlZEJ5QWlWb2ljZSB8fCAwLFxuICB9O1xufVxuIl19