@myclub_se/data-access 3.1.9 → 3.1.10

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.
@@ -45,6 +45,7 @@ const TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':teamId/activities/s
45
45
  const TEAM_BOOKING_SETTINGS_PATH = ':teamId/activities/booking-settings/';
46
46
  const TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':teamId/activities/sessions/';
47
47
  const TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':teamId/activities/sessions/:id/';
48
+ const TEAM_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':teamId/activities/sessions/:id/all/';
48
49
  const TEAM_BOOKING_CALENDAR_SLOT_PATH = ':teamId/activities/slots/:id/';
49
50
  const TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':teamId/activities/application-times/';
50
51
  const TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':teamId/activities/application-times/:id/';
@@ -708,6 +709,8 @@ export class BookingCalendarService {
708
709
  return this.deleteClubBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
709
710
  case Role.SectionAdmin:
710
711
  return this.deleteSectionBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
712
+ case Role.TeamAdmin:
713
+ return this.deleteTeamBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
711
714
  default:
712
715
  throw invalidRoleError;
713
716
  }
@@ -726,6 +729,13 @@ export class BookingCalendarService {
726
729
  id
727
730
  }, { body: { delete_until_date: deleteUntilDate } });
728
731
  }
732
+ deleteTeamBookingCalendarSlotSessionRepeatable(teamId, id, deleteUntilDate) {
733
+ return this.apiService
734
+ .deleteResourceWithBody(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
735
+ teamId,
736
+ id
737
+ }, { body: { delete_until_date: deleteUntilDate } });
738
+ }
729
739
  // endregion
730
740
  // region Booking Setting
731
741
  getBookingSettings(role, itemId) {
@@ -953,4 +963,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
953
963
  providedIn: 'root'
954
964
  }]
955
965
  }], ctorParameters: () => [{ type: i1.ApiService }] });
956
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBT0wsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3RCLDZCQUE2QixHQUM5QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7OztBQUU3QyxNQUFNLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBQ3BFLE1BQU0sMEJBQTBCLEdBQUcsbUNBQW1DLENBQUM7QUFDdkUsTUFBTSxnQ0FBZ0MsR0FBRywyQkFBMkIsQ0FBQztBQUNyRSxNQUFNLGtEQUFrRCxHQUFHLDZDQUE2QyxDQUFDO0FBQ3pHLE1BQU0scUNBQXFDLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0UsTUFBTSxzQ0FBc0MsR0FBRyxpQ0FBaUMsQ0FBQztBQUNqRixNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sK0JBQStCLEdBQUcsK0JBQStCLENBQUM7QUFDeEUsTUFBTSwwQ0FBMEMsR0FBRyxtQ0FBbUMsQ0FBQztBQUN2RixNQUFNLHdDQUF3QyxHQUFHLDhCQUE4QixDQUFDO0FBQ2hGLE1BQU0sdUNBQXVDLEdBQUcsa0NBQWtDLENBQUM7QUFDbkYsTUFBTSw2Q0FBNkMsR0FBRyxzQ0FBc0MsQ0FBQztBQUM3RixNQUFNLDBCQUEwQixHQUFHLHNDQUFzQyxDQUFDO0FBQzFFLE1BQU0sMkNBQTJDLEdBQUcsMkNB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LHFCQUFxQixFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDbkYsS0FBSyxJQUFJLENBQUMsWUFBWTtnQkFDcEIsT0FBTyxJQUFJLENBQUMsNkJBQTZCLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUN0RjtnQkFDRSxNQUFNLGdCQUFnQixDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQUMsTUFBYyxFQUFFLGlCQUFvQztRQUNyRixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGFBQWEsQ0FDWiw2QkFBNkIsRUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFDZCxzQ0FBc0MsRUFDdEMsRUFBQyxNQUFNLEVBQUMsRUFDUjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRU8sNkJBQTZCLENBQUMsU0FBaUIsRUFBRSxpQkFBb0M7UUFDM0YsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUMsVUFBVTthQUNuQixhQUFhLENBQ1osNkJBQTZCLEVBQzdCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLHlDQUF5QyxFQUN6QyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7dUdBMS9DVSxzQkFBc0I7MkdBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXBpU2VydmljZX0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQge1xuICBCb29raW5nQ2FsZW5kYXIsXG4gIEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdCxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24sXG4gIEJvb2tpbmdTZXR0aW5ncyxcbiAgQm9va2luZ1Nsb3RGaWx0ZXIsXG4gIFJvbGUsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICBvdmVyYm9va2VkQm9va2FibGVJdGVtRmFjdG9yeSxcbn0gZnJvbSBcIi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQge2ludmFsaWRSb2xlRXJyb3J9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9vdmVyYm9va2VkL3Nlc3Npb25zLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9ib29rYWJsZXMvJztcblxuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9zZXNzaW9ucy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL292ZXJib29rZWQvYm9va2FibGVzLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuXG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9ib29raW5nLWNhbGVuZGFycy8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQk9PS0FCTEVfU0xPVFNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9ib29rYWJsZXMvOmJvb2thYmxlSWQvc2xvdHMvJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCb29raW5nQ2FsZW5kYXJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhcGlTZXJ2aWNlOiBBcGlTZXJ2aWNlKSB7XG4gIH1cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhclxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKHNlY3Rpb25JZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgZGVsZXRlIGNhbGVuZGFyLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoaXRlbUlkLCBuYW1lKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKGl0ZW1JZCwgbmFtZSk7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFycyhpdGVtSWQsIG5hbWUpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJzKGl0ZW1JZCwgbmFtZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1YklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFycyhzZWN0aW9uSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKHRlYW1JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFycyhtZW1iZXJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKVxuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IGNhbGVuZGFyLmlkIGFzIHN0cmluZ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZCBhcyBzdHJpbmdcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyIHNsb3RcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3Qoc2VjdGlvbklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBkZWxldGUgc2xvdC5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90cyhyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3RzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdHMobWVtYmVySWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoaXRlbUlkLCBzbG90SWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoaXRlbUlkLCBzbG90SWQpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3QoaXRlbUlkLCBzbG90SWQpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90KGl0ZW1JZCwgc2xvdElkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdCh0ZWFtSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90KG1lbWJlcklkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgaWQ6IHNsb3RJZFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMobWVtYmVySWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKG1lbWJlcklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjb3B5Qm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlDb3B5U2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNsZWFyQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jbGVhclNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5RGVsZXRlU2Vzc2lvbnMsIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICAgIG9ubHlfZGVsZXRlX3Nlc3Npb25zOiBvbmx5RGVsZXRlU2Vzc2lvbnMsXG4gICAgICAgICAgICBzaG91bGRfZGVsZXRlX3JlcGVhdGluZ19zbG90czogc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsXG4gICAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwYXJhbXMsXG4gICAgICAgIH0sXG4gICAgICApXG4gIH1cblxuICBzeW5jQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5zeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY1RlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdC5pZCBhcyBzdHJpbmdcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3Qoc2VjdGlvbklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2xvdC5pZCBhcyBzdHJpbmdcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQsIGRlbGV0ZVVudGlsRGF0ZSk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gQm9va2luZyBjYWxlbmRhciBzbG90IHNlc3Npb25cblxuICBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbnMobWVtYmVySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFyQm9va2FibGVTbG90cyhtZW1iZXJJZDogc3RyaW5nLCBib29rYWJsZUlkOiBzdHJpbmcsIHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG4gICAgaWYgKHN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gc3RhcnREYXRlO1xuICAgIH1cbiAgICBpZiAoZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gZW5kRGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX0JPT0tBQkxFX1NMT1RTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZCwgYm9va2FibGVJZH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oaXRlbUlkLCBzZXNzaW9uKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIHNlc3Npb24pO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgc2Vzc2lvbik7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZU1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgc2Vzc2lvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIGRlbGV0ZSBzZXNzaW9uLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKG1lbWJlcklkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgZGVsZXRlIHNlc3Npb24uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgc2Vzc2lvbik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oaXRlbUlkLCBzZXNzaW9uKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIHNlc3Npb24pO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIHNlc3Npb24pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKG1lbWJlcklkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIGlkKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIGlkKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIGlkKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oaXRlbUlkLCBpZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24odGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24obWVtYmVySWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdTZXR0aW5ncyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdTZXR0aW5ncyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyhpdGVtSWQpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZW1iZXJCb29raW5nU2V0dGluZ3MoaXRlbUlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3Moc2VjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdTZXR0aW5ncyh0ZWFtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7dGVhbUlkfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW1iZXJCb29raW5nU2V0dGluZ3MobWVtYmVySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge21lbWJlcklkfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ1NldHRpbmdzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhpdGVtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKGl0ZW1JZCwgYm9va2luZ1NldHRpbmdzKVxuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdTZXR0aW5ncyhpdGVtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1lbWJlckJvb2tpbmdTZXR0aW5ncyhpdGVtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gICBwcml2YXRlIHVwZGF0ZU1lbWJlckJvb2tpbmdTZXR0aW5ncyhtZW1iZXJJZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgQ2FsZW5kYXIgQXBwbGljYXRpb24gVGltZXNcblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWUpXG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1lbWJlckJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1YklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHNlY3Rpb25JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKG1lbWJlcklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgbWVtYmVySWQsXG4gICAgICAgICAgaWQ6IGF2YWlsYWJsZVRpbWUuaWQgYXMgc3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWU+KSB7XG4gICAgZGVsZXRlIGF2YWlsYWJsZVRpbWUuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApXG4gIH1cblxuICBjcmVhdGVNZW1iZXJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUobWVtYmVySWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWU+KSB7XG4gICAgZGVsZXRlIGF2YWlsYWJsZVRpbWUuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKVxuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lSWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGl0ZW1JZCwgYXZhaWxhYmxlVGltZUlkKVxuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZU1lbWJlckJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKG1lbWJlcklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICAvLyBlbmRyZWdpb25cblxuICAvLyByZWdpb24gT3ZlcmJvb2tlZCBzZXNzaW9uc1xuICBnZXRPdmVyYm9va2VkU2Vzc2lvbnMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1Yk92ZXJib29rZWRTZXNzaW9ucyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25PdmVyYm9va2VkU2Vzc2lvbnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1Yk92ZXJib29rZWRTZXNzaW9ucyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25PdmVyYm9va2VkU2Vzc2lvbnMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIE92ZXJib29rZWQgYm9va2FibGVzXG4gIGdldE92ZXJib29rZWRCb29rYWJsZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1Yk92ZXJib29rZWRCb29rYWJsZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uT3ZlcmJvb2tlZEJvb2thYmxlcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViT3ZlcmJvb2tlZEJvb2thYmxlcyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgb3ZlcmJvb2tlZEJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uT3ZlcmJvb2tlZEJvb2thYmxlcyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgb3ZlcmJvb2tlZEJvb2thYmxlSXRlbUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG4gIC8vIGVuZHJlZ2lvblxuXG59XG4iXX0=
966
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBT0wsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3RCLDZCQUE2QixHQUM5QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxhQUFhLENBQUM7OztBQUU3QyxNQUFNLDJCQUEyQixHQUFHLCtCQUErQixDQUFDO0FBQ3BFLE1BQU0sMEJBQTBCLEdBQUcsbUNBQW1DLENBQUM7QUFDdkUsTUFBTSxnQ0FBZ0MsR0FBRywyQkFBMkIsQ0FBQztBQUNyRSxNQUFNLGtEQUFrRCxHQUFHLDZDQUE2QyxDQUFDO0FBQ3pHLE1BQU0scUNBQXFDLEdBQUcsZ0NBQWdDLENBQUM7QUFDL0UsTUFBTSxzQ0FBc0MsR0FBRyxpQ0FBaUMsQ0FBQztBQUNqRixNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sK0JBQStCLEdBQUcsK0JBQStCLENBQUM7QUFDeEUsTUFBTSwwQ0FBMEMsR0FBRyxtQ0FBbUMsQ0FBQztBQUN2RixNQUFNLHdDQUF3QyxHQUFHLDhCQUE4QixDQUFDO0FBQ2hGLE1BQU0sdUNBQXVDLEdBQUcsa0NBQWtDLENBQUM7QUFDbkYsTUFBTSw2Q0FBNkMsR0FBRyxzQ0FBc0MsQ0FBQztBQUM3RixNQUFNLDBCQUEwQixHQUFHLHNDQUFzQyxDQUFDO0FBQzFFLE1BQU0sMkNBQTJDLEdBQUcsMkNB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Q2pCLHlDQUF5QyxFQUN6QyxFQUFDLFNBQVMsRUFBQyxFQUNYO1lBQ0UsTUFBTTtTQUNQLENBQ0YsQ0FBQTtJQUNMLENBQUM7dUdBemdEVSxzQkFBc0I7MkdBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXBpU2VydmljZX0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQge1xuICBCb29raW5nQ2FsZW5kYXIsXG4gIEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdCxcbiAgQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24sXG4gIEJvb2tpbmdTZXR0aW5ncyxcbiAgQm9va2luZ1Nsb3RGaWx0ZXIsXG4gIFJvbGUsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICBvdmVyYm9va2VkQm9va2FibGVJdGVtRmFjdG9yeSxcbn0gZnJvbSBcIi4vZmFjdG9yaWVzXCI7XG5pbXBvcnQge2ludmFsaWRSb2xlRXJyb3J9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9vdmVyYm9va2VkL3Nlc3Npb25zLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfT1ZFUkJPT0tFRF9CT09LQUJMRVNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9ib29rYWJsZXMvJztcblxuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvb3ZlcmJvb2tlZC9zZXNzaW9ucy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL292ZXJib29rZWQvYm9va2FibGVzLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvYWxsLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5cbmNvbnN0IE1FTUJFUl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctY2FsZW5kYXJzLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6bWVtYmVySWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOm1lbWJlcklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5jb25zdCBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9CT09LQUJMRV9TTE9UU19QQVRIID0gJzptZW1iZXJJZC9hY3Rpdml0aWVzL2Jvb2thYmxlcy86Ym9va2FibGVJZC9zbG90cy8nO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJvb2tpbmdDYWxlbmRhclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgZGVsZXRlIGNhbGVuZGFyLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhcnMocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFycyhpdGVtSWQsIG5hbWUpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhcnMoaXRlbUlkLCBuYW1lKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKGl0ZW1JZCwgbmFtZSk7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2tpbmdDYWxlbmRhcnMoaXRlbUlkLCBuYW1lKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFycyhjbHViSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKHNlY3Rpb25JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhcnModGVhbUlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJzKG1lbWJlcklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpXG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogY2FsZW5kYXIuaWQgYXMgc3RyaW5nXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKHNlY3Rpb25JZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWQ6IGNhbGVuZGFyLmlkIGFzIHN0cmluZ1xuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdFxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgZGVsZXRlIHNsb3QuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3RzKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdHMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90cyhtZW1iZXJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdChpdGVtSWQsIHNsb3RJZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChpdGVtSWQsIHNsb3RJZCk7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdChpdGVtSWQsIHNsb3RJZCk7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3QoaXRlbUlkLCBzbG90SWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90KHRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldE1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3QobWVtYmVySWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhtZW1iZXJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoaXRlbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhpdGVtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGl0ZW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldE1lbWJlckJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMobWVtYmVySWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7bWVtYmVySWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNvcHlCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlDb3B5U2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb3B5Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlDb3B5U2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgIG9ubHlfY29weV9zbG90czogb25seUNvcHlTbG90cyxcbiAgICAgICAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY2xlYXJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seURlbGV0ZVNlc3Npb25zOiBib29sZWFuID0gZmFsc2UsXG4gICAgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICB3ZWVrZGF5czogbnVtYmVyW10gPSBbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seURlbGV0ZVNlc3Npb25zLCBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNsZWFyU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5RGVsZXRlU2Vzc2lvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgICAgb25seV9kZWxldGVfc2Vzc2lvbnM6IG9ubHlEZWxldGVTZXNzaW9ucyxcbiAgICAgICAgICAgIHNob3VsZF9kZWxldGVfcmVwZWF0aW5nX3Nsb3RzOiBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cyxcbiAgICAgICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5RGVsZXRlU2Vzc2lvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgICAgd2Vla19yZWxhdGl2ZV9pbmRleGVzOiB3ZWVrUmVsYXRpdmVJbmRleGVzLFxuICAgICAgICAgICAgb25seV9kZWxldGVfc2Vzc2lvbnM6IG9ubHlEZWxldGVTZXNzaW9ucyxcbiAgICAgICAgICAgIHNob3VsZF9kZWxldGVfcmVwZWF0aW5nX3Nsb3RzOiBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cyxcbiAgICAgICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgfVxuXG4gIHN5bmNCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICByb2xlOiBSb2xlLFxuICAgIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY1NlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5zeW5jVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN5bmNDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIHN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlTm9SZXNwb25zZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgY3VycmVudF93ZWVrX3N0YXJ0X2RhdGU6IGN1cnJlbnRXZWVrU3RhcnREYXRlLFxuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkIGFzIHN0cmluZ1xuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkIGFzIHN0cmluZ1xuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3Qoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyIHNsb3Qgc2Vzc2lvblxuXG4gIGdldE1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9ucyhtZW1iZXJJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBnZXRNZW1iZXJCb29raW5nQ2FsZW5kYXJCb29rYWJsZVNsb3RzKG1lbWJlcklkOiBzdHJpbmcsIGJvb2thYmxlSWQ6IHN0cmluZywgc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcbiAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSBzdGFydERhdGU7XG4gICAgfVxuICAgIGlmIChlbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSBlbmREYXRlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfQk9PS0FCTEVfU0xPVFNfUEFUSCxcbiAgICAgICAge21lbWJlcklkLCBib29rYWJsZUlkfSxcbiAgICAgICAge3BhcmFtc30sXG4gICAgICApXG4gIH1cblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIHNlc3Npb24pO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgc2Vzc2lvbik7XG4gICAgICBjYXNlIFJvbGUuVGVhbUFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oaXRlbUlkLCBzZXNzaW9uKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oaXRlbUlkLCBzZXNzaW9uKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgZGVsZXRlIHNlc3Npb24uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oc2VjdGlvbklkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgZGVsZXRlIHNlc3Npb24uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24odGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgZGVsZXRlIHNlc3Npb24uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24obWVtYmVySWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge21lbWJlcklkfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgc3dpdGNoIChyb2xlKSB7XG4gICAgICBjYXNlIFJvbGUuQ2x1YkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oaXRlbUlkLCBzZXNzaW9uKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIHNlc3Npb24pO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgc2Vzc2lvbik7XG4gICAgICBjYXNlIFJvbGUuTWVtYmVyQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU1lbWJlckJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgc2Vzc2lvbik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHRlYW1JZDogc3RyaW5nLCBzZXNzaW9uOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uPikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24obWVtYmVySWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5NZW1iZXJBZG1pbixcbiAgICAgICAgTUVNQkVSX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgaWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgaWQpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGl0ZW1JZCwgaWQpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihpdGVtSWQsIGlkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVNZW1iZXJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihtZW1iZXJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHN3aXRjaCAocm9sZSkge1xuICAgICAgY2FzZSBSb2xlLkNsdWJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgICAgY2FzZSBSb2xlLlRlYW1BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKHRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIFNldHRpbmdcblxuICBnZXRCb29raW5nU2V0dGluZ3Mocm9sZTogUm9sZSwgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nU2V0dGluZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nU2V0dGluZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoaXRlbUlkKTtcbiAgICAgIGNhc2UgUm9sZS5NZW1iZXJBZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWVtYmVyQm9va2luZ1NldHRpbmdzKGl0ZW1JZCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7Y2x1YklkfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWVtYmVyQm9va2luZ1NldHRpbmdzKG1lbWJlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nU2V0dGluZ3MoaXRlbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdTZXR0aW5ncyhpdGVtSWQsIGJvb2tpbmdTZXR0aW5ncylcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3MoaXRlbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVNZW1iZXJCb29raW5nU2V0dGluZ3MoaXRlbUlkLCBib29raW5nU2V0dGluZ3MpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nU2V0dGluZ3MoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdTZXR0aW5ncyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUZWFtQm9va2luZ1NldHRpbmdzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICAgcHJpdmF0ZSB1cGRhdGVNZW1iZXJCb29raW5nU2V0dGluZ3MobWVtYmVySWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIENhbGVuZGFyIEFwcGxpY2F0aW9uIFRpbWVzXG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGl0ZW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgICAgIGNhc2UgUm9sZS5TZWN0aW9uQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lKVxuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVNZW1iZXJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGludmFsaWRSb2xlRXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJJZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShzZWN0aW9uSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWU+KSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZCBhcyBzdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZU1lbWJlckJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShtZW1iZXJJZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIG1lbWJlcklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkIGFzIHN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIGRlbGV0ZSBhdmFpbGFibGVUaW1lLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgfSxcbiAgICAgICAgYXZhaWxhYmxlVGltZVxuICAgICAgKVxuICB9XG5cbiAgY3JlYXRlTWVtYmVyQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKG1lbWJlcklkOiBzdHJpbmcsIGF2YWlsYWJsZVRpbWU6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lPikge1xuICAgIGRlbGV0ZSBhdmFpbGFibGVUaW1lLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuTWVtYmVyQWRtaW4sXG4gICAgICAgIE1FTUJFUl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHttZW1iZXJJZH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShyb2xlOiBSb2xlLCBpdGVtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZUlkOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lSWQpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShpdGVtSWQsIGF2YWlsYWJsZVRpbWVJZClcbiAgICAgIGNhc2UgUm9sZS5UZWFtQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lSWQpO1xuICAgICAgY2FzZSBSb2xlLk1lbWJlckFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWxldGVNZW1iZXJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoaXRlbUlkLCBhdmFpbGFibGVUaW1lSWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUodGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZU1lbWJlckJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShtZW1iZXJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLk1lbWJlckFkbWluLFxuICAgICAgICBNRU1CRVJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBtZW1iZXJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIE92ZXJib29rZWQgc2Vzc2lvbnNcbiAgZ2V0T3ZlcmJvb2tlZFNlc3Npb25zKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJPdmVyYm9va2VkU2Vzc2lvbnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBjYXNlIFJvbGUuU2VjdGlvbkFkbWluOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uT3ZlcmJvb2tlZFNlc3Npb25zKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgaW52YWxpZFJvbGVFcnJvcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJPdmVyYm9va2VkU2Vzc2lvbnMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfU0VTU0lPTlNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uT3ZlcmJvb2tlZFNlc3Npb25zKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19PVkVSQk9PS0VEX1NFU1NJT05TX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBPdmVyYm9va2VkIGJvb2thYmxlc1xuICBnZXRPdmVyYm9va2VkQm9va2FibGVzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgUm9sZS5DbHViQWRtaW46XG4gICAgICAgIHJldHVybiB0aGlzLmdldENsdWJPdmVyYm9va2VkQm9va2FibGVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgICAgY2FzZSBSb2xlLlNlY3Rpb25BZG1pbjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbk92ZXJib29rZWRCb29rYWJsZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBpbnZhbGlkUm9sZUVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1Yk92ZXJib29rZWRCb29rYWJsZXMoY2x1YklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbk92ZXJib29rZWRCb29rYWJsZXMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIG92ZXJib29rZWRCb29rYWJsZUl0ZW1GYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX09WRVJCT09LRURfQk9PS0FCTEVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuICAvLyBlbmRyZWdpb25cblxufVxuIl19
@@ -5401,6 +5401,7 @@ const TEAM_BOOKING_CALENDAR_SLOTS_APPLICATION_TIMES_PATH = ':teamId/activities/s
5401
5401
  const TEAM_BOOKING_SETTINGS_PATH = ':teamId/activities/booking-settings/';
5402
5402
  const TEAM_BOOKING_CALENDAR_SLOT_SESSIONS_PATH = ':teamId/activities/sessions/';
5403
5403
  const TEAM_BOOKING_CALENDAR_SLOT_SESSION_PATH = ':teamId/activities/sessions/:id/';
5404
+ const TEAM_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH = ':teamId/activities/sessions/:id/all/';
5404
5405
  const TEAM_BOOKING_CALENDAR_SLOT_PATH = ':teamId/activities/slots/:id/';
5405
5406
  const TEAM_BOOKING_CALENDAR_APPLICATION_TIMES_PATH = ':teamId/activities/application-times/';
5406
5407
  const TEAM_BOOKING_CALENDAR_APPLICATION_TIME_PATH = ':teamId/activities/application-times/:id/';
@@ -6064,6 +6065,8 @@ class BookingCalendarService {
6064
6065
  return this.deleteClubBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
6065
6066
  case Role.SectionAdmin:
6066
6067
  return this.deleteSectionBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
6068
+ case Role.TeamAdmin:
6069
+ return this.deleteTeamBookingCalendarSlotSessionRepeatable(clubOrSectionOrTeamId, id, deleteUntilDate);
6067
6070
  default:
6068
6071
  throw invalidRoleError;
6069
6072
  }
@@ -6082,6 +6085,13 @@ class BookingCalendarService {
6082
6085
  id
6083
6086
  }, { body: { delete_until_date: deleteUntilDate } });
6084
6087
  }
6088
+ deleteTeamBookingCalendarSlotSessionRepeatable(teamId, id, deleteUntilDate) {
6089
+ return this.apiService
6090
+ .deleteResourceWithBody(Role.TeamAdmin, TEAM_BOOKING_CALENDAR_REPEATABLE_SESSION_PATH, {
6091
+ teamId,
6092
+ id
6093
+ }, { body: { delete_until_date: deleteUntilDate } });
6094
+ }
6085
6095
  // endregion
6086
6096
  // region Booking Setting
6087
6097
  getBookingSettings(role, itemId) {