@myclub_se/data-access 2.11.0 → 2.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/services/booking-calendar.service.mjs +8 -6
- package/fesm2015/myclub_se-data-access.mjs +7 -5
- package/fesm2015/myclub_se-data-access.mjs.map +1 -1
- package/fesm2020/myclub_se-data-access.mjs +7 -5
- package/fesm2020/myclub_se-data-access.mjs.map +1 -1
- package/lib/services/booking-calendar.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -372,13 +372,13 @@ export class BookingCalendarService {
|
|
|
372
372
|
params
|
|
373
373
|
});
|
|
374
374
|
}
|
|
375
|
-
clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, bookingSlotFilter) {
|
|
375
|
+
clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
376
376
|
if (role === Role.ClubAdmin) {
|
|
377
|
-
return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, bookingSlotFilter);
|
|
377
|
+
return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
378
378
|
}
|
|
379
|
-
return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, bookingSlotFilter);
|
|
379
|
+
return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
380
380
|
}
|
|
381
|
-
clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, bookingSlotFilter) {
|
|
381
|
+
clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
382
382
|
const params = bookingSlotFilter.toParams();
|
|
383
383
|
return this.apiService
|
|
384
384
|
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { clubId }, {
|
|
@@ -387,11 +387,12 @@ export class BookingCalendarService {
|
|
|
387
387
|
week_relative_indexes: weekRelativeIndexes,
|
|
388
388
|
only_delete_sessions: onlyDeleteSessions,
|
|
389
389
|
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
390
|
+
weekdays: weekdays,
|
|
390
391
|
},
|
|
391
392
|
params,
|
|
392
393
|
});
|
|
393
394
|
}
|
|
394
|
-
clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, bookingSlotFilter) {
|
|
395
|
+
clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
395
396
|
const params = bookingSlotFilter.toParams();
|
|
396
397
|
return this.apiService
|
|
397
398
|
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { sectionId }, {
|
|
@@ -400,6 +401,7 @@ export class BookingCalendarService {
|
|
|
400
401
|
week_relative_indexes: weekRelativeIndexes,
|
|
401
402
|
only_delete_sessions: onlyDeleteSessions,
|
|
402
403
|
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
404
|
+
weekdays: weekdays,
|
|
403
405
|
},
|
|
404
406
|
params,
|
|
405
407
|
});
|
|
@@ -737,4 +739,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.11", ngImpo
|
|
|
737
739
|
providedIn: 'root'
|
|
738
740
|
}]
|
|
739
741
|
}], ctorParameters: function () { return [{ type: i1.ApiService }]; } });
|
|
740
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDOzs7QUFFckIsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sc0NBQXNDLEdBQUcsaUNBQWlDLENBQUM7QUFDakYsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBQ3hFLE1BQU0sMENBQTBDLEdBQUcsbUNBQW1DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRixNQUFNLHVDQUF1QyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sNkNBQTZDLEdBQUcsc0NBQXNDLENBQUM7QUFDN0YsTUFBTSwwQkFBMEIsR0FBRyxzQ0FBc0MsQ0FBQztBQUMxRSxNQUFNLDJDQUEyQyxHQUFHLDJDQUEyQyxDQUFDO0FBQ2hHLE1BQU0sNENBQTRDLEdBQUcsdUNBQXVDLENBQUM7QUFFN0YsTUFBTSw4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Q0QsT0FBTyxJQUFJLENBQUMsd0NBQXdDLENBQUMscUJBQXFCLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVPLHdDQUF3QyxDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsMkNBQTJDLEVBQzNDO1lBQ0UsTUFBTTtZQUNOLEVBQUU7U0FDSCxDQUNGLENBQUM7SUFDTixDQUFDO0lBRU8sMkNBQTJDLENBQUMsU0FBaUIsRUFBRSxFQUFVO1FBQy9FLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLDhDQUE4QyxFQUM5QztZQUNFLFNBQVM7WUFDVCxFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVPLHdDQUF3QyxDQUFDLE1BQWMsRUFBRSxFQUFVO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFVBQVU7YUFDbkIsY0FBYyxDQUNiLElBQUksQ0FBQyxTQUFTLEVBQ2QsMkNBQTJDLEVBQzNDO1lBQ0UsTUFBTTtZQUNOLEVBQUU7U0FDSCxDQUNGLENBQUM7SUFDTixDQUFDOztvSEFobUNVLHNCQUFzQjt3SEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FwaVNlcnZpY2V9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQm9va2luZ0NhbGVuZGFyLFxuICBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUsXG4gIEJvb2tpbmdDYWxlbmRhclNsb3QsXG4gIEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uLFxuICBCb29raW5nU2V0dGluZ3MsXG4gIFJvbGUsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICBib29raW5nU2V0dGluZ3NGYWN0b3J5XG59IGZyb20gXCIuL2ZhY3Rvcmllc1wiO1xuXG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5cbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvYXBwbGljYXRpb24tdGltZXMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DT1BZX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2NvcHkvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19DTEVBUl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9jbGVhci8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvc3luYy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC9hbGwvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvYWxsLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvJztcblxuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1NZTkNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvc3luYy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYm9va2luZy1zZXR0aW5ncy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcblxuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcblxuXG5leHBvcnQgY2xhc3MgQm9va2luZ1Nsb3RGaWx0ZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgc3RhcnREYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgZW5kRGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIGNhbGVuZGFySWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgbG9jYXRpb25JZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyB0YWdJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyB0ZWFtSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgbG9jYXRpb25Hcm91cElkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGFjdGl2aXR5VHlwZUlkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGhhc09wZW5TZXNzaW9uczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBzaG93QXBwbGljYXRpb25UaW1lczogYm9vbGVhbiB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBzb3J0Qnk6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICApIHtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsdGVyKGZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpOiBCb29raW5nU2xvdEZpbHRlciB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKFxuICAgICAgZmlsdGVyLnN0YXJ0RGF0ZSxcbiAgICAgIGZpbHRlci5lbmREYXRlLFxuICAgICAgZmlsdGVyLmNhbGVuZGFySWRzLFxuICAgICAgZmlsdGVyLmxvY2F0aW9uSWRzLFxuICAgICAgZmlsdGVyLnRhZ0lkcyxcbiAgICAgIGZpbHRlci50ZWFtSWRzLFxuICAgICAgZmlsdGVyLmxvY2F0aW9uR3JvdXBJZHMsXG4gICAgICBmaWx0ZXIuYWN0aXZpdHlUeXBlSWRzLFxuICAgICAgZmlsdGVyLmhhc09wZW5TZXNzaW9ucyxcbiAgICAgIGZpbHRlci5zaG93QXBwbGljYXRpb25UaW1lcyxcbiAgICAgIGZpbHRlci5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHRvUGFyYW1zKCk6IGFueSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fZ3RlJ10gPSB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmREYXRlKSB7XG4gICAgICBwYXJhbXNbJ2RheV9fbHRlJ10gPSB0aGlzLmVuZERhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsZW5kYXJJZHMgJiYgdGhpcy5jYWxlbmRhcklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snY2FsZW5kYXJfaWQnXSA9IHRoaXMuY2FsZW5kYXJJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9jYXRpb25JZHMgJiYgdGhpcy5sb2NhdGlvbklkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1snbG9jYXRpb25faWQnXSA9IHRoaXMubG9jYXRpb25JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMubG9jYXRpb25Hcm91cElkcyAmJiB0aGlzLmxvY2F0aW9uR3JvdXBJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2dyb3VwX2lkJ10gPSB0aGlzLmxvY2F0aW9uR3JvdXBJZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFnSWRzICYmIHRoaXMudGFnSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0YWdfaWQnXSA9IHRoaXMudGFnSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRlYW1JZHMgJiYgdGhpcy50ZWFtSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWyd0ZWFtX2lkJ10gPSB0aGlzLnRlYW1JZHMuam9pbignLCcpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWN0aXZpdHlUeXBlSWRzICYmIHRoaXMuYWN0aXZpdHlUeXBlSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zW1wiYWN0aXZpdHlfdHlwZV9pZFwiXSA9IHRoaXMuYWN0aXZpdHlUeXBlSWRzLmpvaW4oXCIsXCIpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLmhhc09wZW5TZXNzaW9ucyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ2hhc19vcGVuX3Nlc3Npb25zJ10gPSBTdHJpbmcodGhpcy5oYXNPcGVuU2Vzc2lvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5zaG93QXBwbGljYXRpb25UaW1lcyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwYXJhbXNbJ3Nob3dfYXBwbGljYXRpb25fdGltZXMnXSA9IFN0cmluZyh0aGlzLnNob3dBcHBsaWNhdGlvblRpbWVzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zb3J0QnkpIHtcbiAgICAgIHBhcmFtc1snb3JkZXInXSA9IHRoaXMuc29ydEJ5O1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQm9va2luZ0NhbGVuZGFyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQXBpU2VydmljZSkge1xuICB9XG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXJcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyPikge1xuICAgIGRlbGV0ZSBjYWxlbmRhci5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKVxuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFycyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhcnMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJJZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhcnMoc2VjdGlvbklkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFycyh0ZWFtSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihzZWN0aW9uSWQ6IHN0cmluZywgY2FsZW5kYXI6IEJvb2tpbmdDYWxlbmRhcikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBjYWxlbmRhci5pZFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhclxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhcihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhcihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhcihjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdFxuXG4gIGNyZWF0ZUJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgZGVsZXRlIHNsb3QuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgc2xvdFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3RzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhclNsb3Qocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNsb3RJZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2xvdElkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZCk7XG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90KHNlY3Rpb25JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90KHRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBzbG90SWRcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHt0ZWFtSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKGNsdWJJZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjb3B5Qm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5Q29weVNsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jb3B5U2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29weUNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5Q29weVNsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHdlZWtfcmVsYXRpdmVfaW5kZXhlczogd2Vla1JlbGF0aXZlSW5kZXhlcyxcbiAgICAgICAgICBvbmx5X2NvcHlfc2xvdHM6IG9ubHlDb3B5U2xvdHMsXG4gICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIGNsZWFyQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgcm9sZTogUm9sZSxcbiAgICBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlEZWxldGVTZXNzaW9ucywgc2hvdWxkRGVsZXRlUmVwZWF0aW5nU2xvdHMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xlYXJTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seURlbGV0ZVNlc3Npb25zLCBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgICAgc2hvdWxkX2RlbGV0ZV9yZXBlYXRpbmdfc2xvdHM6IHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgICAgc2hvdWxkX2RlbGV0ZV9yZXBlYXRpbmdfc2xvdHM6IHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgc3luY0Jvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IEJvb2tpbmdDYWxlbmRhclNsb3QpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdC5pZFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdCBzZXNzaW9uXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24odGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7Y2x1YklkfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIENhbGVuZGFyIEFwcGxpY2F0aW9uIFRpbWVzXG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHNlY3Rpb25JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBkZWxldGUgYXZhaWxhYmxlVGltZS5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG5cbn1cbiJdfQ==
|
|
742
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZy1jYWxlbmRhci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zZXJ2aWNlcy9ib29raW5nLWNhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEVBTUwsSUFBSSxHQUNMLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFDTCxxQ0FBcUMsRUFDckMsc0JBQXNCLEVBQ3RCLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsc0JBQXNCLEVBQ3ZCLE1BQU0sYUFBYSxDQUFDOzs7QUFFckIsTUFBTSwyQkFBMkIsR0FBRywrQkFBK0IsQ0FBQztBQUNwRSxNQUFNLDBCQUEwQixHQUFHLG1DQUFtQyxDQUFDO0FBQ3ZFLE1BQU0sZ0NBQWdDLEdBQUcsMkJBQTJCLENBQUM7QUFDckUsTUFBTSxrREFBa0QsR0FBRyw2Q0FBNkMsQ0FBQztBQUN6RyxNQUFNLHFDQUFxQyxHQUFHLGdDQUFnQyxDQUFDO0FBQy9FLE1BQU0sc0NBQXNDLEdBQUcsaUNBQWlDLENBQUM7QUFDakYsTUFBTSxxQ0FBcUMsR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvRSxNQUFNLCtCQUErQixHQUFHLCtCQUErQixDQUFDO0FBQ3hFLE1BQU0sMENBQTBDLEdBQUcsbUNBQW1DLENBQUM7QUFDdkYsTUFBTSx3Q0FBd0MsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRixNQUFNLHVDQUF1QyxHQUFHLGtDQUFrQyxDQUFDO0FBQ25GLE1BQU0sNkNBQTZDLEdBQUcsc0NBQXNDLENBQUM7QUFDN0YsTUFBTSwwQkFBMEIsR0FBRyxzQ0FBc0MsQ0FBQztBQUMxRSxNQUFNLDJDQUEyQyxHQUFHLDJDQUEyQyxDQUFDO0FBQ2hHLE1BQU0sNENBQTRDLEdBQUcsdUNBQXVDLENBQUM7QUFFN0YsTUFBTSw4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O1NBQzlGO2FBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxxQkFBcUIsRUFBRSxlQUFlLENBQUMsQ0FBQTtTQUNoRztRQUNELE9BQU8sSUFBSSxDQUFDLHdDQUF3QyxDQUFDLHFCQUFxQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFTyx3Q0FBd0MsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUN6RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVPLDJDQUEyQyxDQUFDLFNBQWlCLEVBQUUsRUFBVTtRQUMvRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsWUFBWSxFQUNqQiw4Q0FBOEMsRUFDOUM7WUFDRSxTQUFTO1lBQ1QsRUFBRTtTQUNILENBQ0YsQ0FBQztJQUNOLENBQUM7SUFFTyx3Q0FBd0MsQ0FBQyxNQUFjLEVBQUUsRUFBVTtRQUN6RSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLGNBQWMsQ0FDYixJQUFJLENBQUMsU0FBUyxFQUNkLDJDQUEyQyxFQUMzQztZQUNFLE1BQU07WUFDTixFQUFFO1NBQ0gsQ0FDRixDQUFDO0lBQ04sQ0FBQzs7b0hBcm1DVSxzQkFBc0I7d0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBcGlTZXJ2aWNlfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEJvb2tpbmdDYWxlbmRhcixcbiAgQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lLFxuICBCb29raW5nQ2FsZW5kYXJTbG90LFxuICBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbixcbiAgQm9va2luZ1NldHRpbmdzLFxuICBSb2xlLFxufSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHtcbiAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgYm9va2luZ1NldHRpbmdzRmFjdG9yeVxufSBmcm9tIFwiLi9mYWN0b3JpZXNcIjtcblxuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9jYWxlbmRhcnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvY29weS8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NMRUFSX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nsb3RzL2NsZWFyLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy9zeW5jLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9zbG90cy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2xvdHMvOmlkL2FsbC8nO1xuY29uc3QgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTlNfUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCA9ICc6Y2x1YklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TRVNTSU9OX1BBVEggPSAnOmNsdWJJZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC9hbGwvJztcbmNvbnN0IENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9ib29raW5nLXNldHRpbmdzLyc7XG5jb25zdCBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy86aWQvJztcbmNvbnN0IENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzpjbHViSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuXG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2NhbGVuZGFycy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2NhbGVuZGFycy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ09QWV9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy9jb3B5Lyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2xvdHMvY2xlYXIvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL3Nsb3RzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0xPVF9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zbG90cy86aWQvYWxsLyc7XG5jb25zdCBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRIID0gJzpzZWN0aW9uSWQvYWN0aXZpdGllcy9zZXNzaW9ucy86aWQvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCA9ICc6c2VjdGlvbklkL2FjdGl2aXRpZXMvc2Vzc2lvbnMvOmlkL2FsbC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLzppZC8nO1xuY29uc3QgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEggPSAnOnNlY3Rpb25JZC9hY3Rpdml0aWVzL2FwcGxpY2F0aW9uLXRpbWVzLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvY2FsZW5kYXJzLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19TWU5DX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nsb3RzL3N5bmMvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9zbG90cy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL2Jvb2tpbmctc2V0dGluZ3MvJztcbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05TX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLyc7XG5jb25zdCBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEggPSAnOnRlYW1JZC9hY3Rpdml0aWVzL3Nlc3Npb25zLzppZC8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvc2xvdHMvOmlkLyc7XG5cbmNvbnN0IFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRIID0gJzp0ZWFtSWQvYWN0aXZpdGllcy9hcHBsaWNhdGlvbi10aW1lcy8nO1xuY29uc3QgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCA9ICc6dGVhbUlkL2FjdGl2aXRpZXMvYXBwbGljYXRpb24tdGltZXMvOmlkLyc7XG5cblxuZXhwb3J0IGNsYXNzIEJvb2tpbmdTbG90RmlsdGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXJ0RGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgcHVibGljIGVuZERhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsLFxuICAgIHB1YmxpYyBjYWxlbmRhcklkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGxvY2F0aW9uSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgdGFnSWRzOiBzdHJpbmdbXSB8IG51bGwgPSBbXSxcbiAgICBwdWJsaWMgdGVhbUlkczogc3RyaW5nW10gfCBudWxsID0gW10sXG4gICAgcHVibGljIGxvY2F0aW9uR3JvdXBJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBhY3Rpdml0eVR5cGVJZHM6IHN0cmluZ1tdIHwgbnVsbCA9IFtdLFxuICAgIHB1YmxpYyBoYXNPcGVuU2Vzc2lvbnM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgc2hvd0FwcGxpY2F0aW9uVGltZXM6IGJvb2xlYW4gfCBudWxsID0gbnVsbCxcbiAgICBwdWJsaWMgc29ydEJ5OiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgKSB7XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbHRlcihmaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKTogQm9va2luZ1Nsb3RGaWx0ZXIge1xuICAgIHJldHVybiBuZXcgdGhpcyhcbiAgICAgIGZpbHRlci5zdGFydERhdGUsXG4gICAgICBmaWx0ZXIuZW5kRGF0ZSxcbiAgICAgIGZpbHRlci5jYWxlbmRhcklkcyxcbiAgICAgIGZpbHRlci5sb2NhdGlvbklkcyxcbiAgICAgIGZpbHRlci50YWdJZHMsXG4gICAgICBmaWx0ZXIudGVhbUlkcyxcbiAgICAgIGZpbHRlci5sb2NhdGlvbkdyb3VwSWRzLFxuICAgICAgZmlsdGVyLmFjdGl2aXR5VHlwZUlkcyxcbiAgICAgIGZpbHRlci5oYXNPcGVuU2Vzc2lvbnMsXG4gICAgICBmaWx0ZXIuc2hvd0FwcGxpY2F0aW9uVGltZXMsXG4gICAgICBmaWx0ZXIuc29ydEJ5LFxuICAgICk7XG4gIH1cblxuICB0b1BhcmFtcygpOiBhbnkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmICh0aGlzLnN0YXJ0RGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2d0ZSddID0gdGhpcy5zdGFydERhdGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kRGF0ZSkge1xuICAgICAgcGFyYW1zWydkYXlfX2x0ZSddID0gdGhpcy5lbmREYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhbGVuZGFySWRzICYmIHRoaXMuY2FsZW5kYXJJZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2NhbGVuZGFyX2lkJ10gPSB0aGlzLmNhbGVuZGFySWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvY2F0aW9uSWRzICYmIHRoaXMubG9jYXRpb25JZHMubGVuZ3RoKSB7XG4gICAgICBwYXJhbXNbJ2xvY2F0aW9uX2lkJ10gPSB0aGlzLmxvY2F0aW9uSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmxvY2F0aW9uR3JvdXBJZHMgJiYgdGhpcy5sb2NhdGlvbkdyb3VwSWRzLmxlbmd0aCkge1xuICAgICAgcGFyYW1zWydsb2NhdGlvbl9ncm91cF9pZCddID0gdGhpcy5sb2NhdGlvbkdyb3VwSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRhZ0lkcyAmJiB0aGlzLnRhZ0lkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGFnX2lkJ10gPSB0aGlzLnRhZ0lkcy5qb2luKCcsJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZWFtSWRzICYmIHRoaXMudGVhbUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1sndGVhbV9pZCddID0gdGhpcy50ZWFtSWRzLmpvaW4oJywnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFjdGl2aXR5VHlwZUlkcyAmJiB0aGlzLmFjdGl2aXR5VHlwZUlkcy5sZW5ndGgpIHtcbiAgICAgIHBhcmFtc1tcImFjdGl2aXR5X3R5cGVfaWRcIl0gPSB0aGlzLmFjdGl2aXR5VHlwZUlkcy5qb2luKFwiLFwiKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5oYXNPcGVuU2Vzc2lvbnMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydoYXNfb3Blbl9zZXNzaW9ucyddID0gU3RyaW5nKHRoaXMuaGFzT3BlblNlc3Npb25zKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2hvd0FwcGxpY2F0aW9uVGltZXMgPT09ICdib29sZWFuJykge1xuICAgICAgcGFyYW1zWydzaG93X2FwcGxpY2F0aW9uX3RpbWVzJ10gPSBTdHJpbmcodGhpcy5zaG93QXBwbGljYXRpb25UaW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc29ydEJ5KSB7XG4gICAgICBwYXJhbXNbJ29yZGVyJ10gPSB0aGlzLnNvcnRCeTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxufVxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEJvb2tpbmdDYWxlbmRhclNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFwaVNlcnZpY2UpIHtcbiAgfVxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJJZDogc3RyaW5nLCBjYWxlbmRhcjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXI+KSB7XG4gICAgZGVsZXRlIGNhbGVuZGFyLmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGNhbGVuZGFyOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhcj4pIHtcbiAgICBkZWxldGUgY2FsZW5kYXIuaWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgIClcbiAgfVxuXG4gIGdldEJvb2tpbmdDYWxlbmRhcnMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFycyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFycyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIG5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFycyhjbHViSWQ6IHN0cmluZywgbmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICBjb25zdCBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7bGltaXQ6ICdudWxsJ307XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcGFyYW1zWyduYW1lJ10gPSBuYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJzKHNlY3Rpb25JZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIGNvbnN0IHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtsaW1pdDogJ251bGwnfTtcblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBwYXJhbXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVhbUJvb2tpbmdDYWxlbmRhcnModGVhbUlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XG4gICAgY29uc3QgcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge2xpbWl0OiAnbnVsbCd9O1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHBhcmFtc1snbmFtZSddID0gbmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyRmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUlNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBjYWxlbmRhcjogQm9va2luZ0NhbGVuZGFyKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVDbHViQm9va2luZ0NhbGVuZGFyKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY2FsZW5kYXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogY2FsZW5kYXIuaWRcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoc2VjdGlvbklkOiBzdHJpbmcsIGNhbGVuZGFyOiBCb29raW5nQ2FsZW5kYXIpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogY2FsZW5kYXIuaWRcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXJcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXIocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXIoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXIoY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIGNhbGVuZGFyIHNsb3RcblxuICBjcmVhdGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90OiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhclNsb3Q+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3QpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdDogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90Pikge1xuICAgIGRlbGV0ZSBzbG90LmlkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3Qoc2VjdGlvbklkOiBzdHJpbmcsIHNsb3Q6IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdD4pIHtcbiAgICBkZWxldGUgc2xvdC5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90cyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJTbG90cyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBzbG90SWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNsb3RJZClcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZWFtQm9va2luZ0NhbGVuZGFyU2xvdCh0ZWFtSWQ6IHN0cmluZywgc2xvdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZDogc2xvdElkXG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Qm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcilcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZVNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gIH1cblxuICBwcml2YXRlIGdldENsdWJCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFNlY3Rpb25Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyhzZWN0aW9uSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVTbG90cyh0ZWFtSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90RmFjdG9yeSxcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UU19BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBnZXRCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBib29raW5nU2xvdEZpbHRlcik7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTbG90RmlsdGVyKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbHViQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lcyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRDb2xsZWN0aW9uKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtjbHViSWR9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1zXG4gICAgICAgIH1cbiAgICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZXMoc2VjdGlvbklkOiBzdHJpbmcsIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcikge1xuICAgIGNvbnN0IHBhcmFtcyA9IGJvb2tpbmdTbG90RmlsdGVyLnRvUGFyYW1zKCk7XG5cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0Q29sbGVjdGlvbihcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FU19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVzKHRlYW1JZDogc3RyaW5nLCBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldENvbGxlY3Rpb24oXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRVNfUEFUSCxcbiAgICAgICAge3RlYW1JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbXNcbiAgICAgICAgfVxuICAgICAgKVxuICB9XG5cbiAgY29weUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seUNvcHlTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb3B5Q2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgd2Vla1JlbGF0aXZlSW5kZXhlcywgb25seUNvcHlTbG90cywgd2Vla2RheXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29weVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIG9ubHlDb3B5U2xvdHMsIHdlZWtkYXlzLCBib29raW5nU2xvdEZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNvcHlDbHViQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgY2x1YklkOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seUNvcHlTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgb25seV9jb3B5X3Nsb3RzOiBvbmx5Q29weVNsb3RzLFxuICAgICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNvcHlTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgb25seUNvcHlTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYm9va2luZ1Nsb3RGaWx0ZXIudG9QYXJhbXMoKTtcblxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wb3N0UmVzb3VyY2VOb1Jlc3BvbnNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RTX0NPUFlfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgb25seV9jb3B5X3Nsb3RzOiBvbmx5Q29weVNsb3RzLFxuICAgICAgICAgIHdlZWtkYXlzOiB3ZWVrZGF5cyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmFtc1xuICAgICAgICB9XG4gICAgICApXG4gIH1cblxuICBjbGVhckJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBvbmx5RGVsZXRlU2Vzc2lvbnM6IGJvb2xlYW4gPSBmYWxzZSxcbiAgICBzaG91bGREZWxldGVSZXBlYXRpbmdTbG90czogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHdlZWtkYXlzOiBudW1iZXJbXSA9IFtdLFxuICAgIGJvb2tpbmdTbG90RmlsdGVyOiBCb29raW5nU2xvdEZpbHRlcixcbiAgKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhckNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5RGVsZXRlU2Vzc2lvbnMsIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGVhclNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGN1cnJlbnRXZWVrU3RhcnREYXRlLCB3ZWVrUmVsYXRpdmVJbmRleGVzLCBvbmx5RGVsZXRlU2Vzc2lvbnMsIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLCB3ZWVrZGF5cywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckNsdWJCb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBjbHViSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge2NsdWJJZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgICAgc2hvdWxkX2RlbGV0ZV9yZXBlYXRpbmdfc2xvdHM6IHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLFxuICAgICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90cyhcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBjdXJyZW50V2Vla1N0YXJ0RGF0ZTogc3RyaW5nLFxuICAgIHdlZWtSZWxhdGl2ZUluZGV4ZXM6IG51bWJlcltdLFxuICAgIG9ubHlEZWxldGVTZXNzaW9uczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzOiBib29sZWFuID0gZmFsc2UsXG4gICAgd2Vla2RheXM6IG51bWJlcltdID0gW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfQ0xFQVJfUEFUSCxcbiAgICAgICAge3NlY3Rpb25JZH0sXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBjdXJyZW50X3dlZWtfc3RhcnRfZGF0ZTogY3VycmVudFdlZWtTdGFydERhdGUsXG4gICAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgICAgICBvbmx5X2RlbGV0ZV9zZXNzaW9uczogb25seURlbGV0ZVNlc3Npb25zLFxuICAgICAgICAgICAgc2hvdWxkX2RlbGV0ZV9yZXBlYXRpbmdfc2xvdHM6IHNob3VsZERlbGV0ZVJlcGVhdGluZ1Nsb3RzLFxuICAgICAgICAgICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFyYW1zLFxuICAgICAgICB9LFxuICAgICAgKVxuICB9XG5cbiAgc3luY0Jvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHJvbGU6IFJvbGUsXG4gICAgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsXG4gICAgY3VycmVudFdlZWtTdGFydERhdGU6IHN0cmluZyxcbiAgICB3ZWVrUmVsYXRpdmVJbmRleGVzOiBudW1iZXJbXSxcbiAgICBib29raW5nU2xvdEZpbHRlcjogQm9va2luZ1Nsb3RGaWx0ZXIsXG4gICkge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5zeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgY3VycmVudFdlZWtTdGFydERhdGUsIHdlZWtSZWxhdGl2ZUluZGV4ZXMsIGJvb2tpbmdTbG90RmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnN5bmNTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bmNUZWFtQm9va2luZ0NhbGVuZGFyU2xvdHMoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBjdXJyZW50V2Vla1N0YXJ0RGF0ZSwgd2Vla1JlbGF0aXZlSW5kZXhlcywgYm9va2luZ1Nsb3RGaWx0ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIGNsdWJJZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7Y2x1YklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHNlY3Rpb25JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7c2VjdGlvbklkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzeW5jVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RzKFxuICAgIHRlYW1JZDogc3RyaW5nLFxuICAgIGN1cnJlbnRXZWVrU3RhcnREYXRlOiBzdHJpbmcsXG4gICAgd2Vla1JlbGF0aXZlSW5kZXhlczogbnVtYmVyW10sXG4gICAgYm9va2luZ1Nsb3RGaWx0ZXI6IEJvb2tpbmdTbG90RmlsdGVyLFxuICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSBib29raW5nU2xvdEZpbHRlci50b1BhcmFtcygpO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnBvc3RSZXNvdXJjZU5vUmVzcG9uc2UoXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVFNfU1lOQ19QQVRILFxuICAgICAgICB7dGVhbUlkfSxcbiAgICAgICAge1xuICAgICAgICAgIGN1cnJlbnRfd2Vla19zdGFydF9kYXRlOiBjdXJyZW50V2Vla1N0YXJ0RGF0ZSxcbiAgICAgICAgICB3ZWVrX3JlbGF0aXZlX2luZGV4ZXM6IHdlZWtSZWxhdGl2ZUluZGV4ZXMsXG4gICAgICAgIH0sXG4gICAgICAgIHtwYXJhbXN9LFxuICAgICAgKVxuICB9XG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyU2xvdChyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIGlmIChyb2xlID09PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzbG90KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1YklkOiBzdHJpbmcsIHNsb3Q6IEJvb2tpbmdDYWxlbmRhclNsb3QpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogc2xvdC5pZFxuICAgICAgICB9LFxuICAgICAgICBzbG90XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgc2xvdDogQm9va2luZ0NhbGVuZGFyU2xvdCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdEZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBzbG90LmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNsb3RcbiAgICAgICk7XG4gIH1cblxuICBkZWxldGVCb29raW5nQ2FsZW5kYXJTbG90KHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdChjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3QoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90KGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdChzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RSZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NMT1RfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90UmVwZWF0YWJsZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZywgZGVsZXRlVW50aWxEYXRlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlV2l0aEJvZHkoXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfUkVQRUFUQUJMRV9TTE9UX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfSxcbiAgICAgICAge2JvZHk6IHtkZWxldGVfdW50aWxfZGF0ZTogZGVsZXRlVW50aWxEYXRlfX0sXG4gICAgICApO1xuICB9XG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgY2FsZW5kYXIgc2xvdCBzZXNzaW9uXG5cbiAgY3JlYXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24ocm9sZTogUm9sZSwgY2x1Yk9yU2VjdGlvbk9yVGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IFBhcnRpYWw8Qm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24+KSB7XG4gICAgaWYgKHJvbGUgPT09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgc2Vzc2lvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogUGFydGlhbDxCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbj4pIHtcbiAgICBkZWxldGUgc2Vzc2lvbi5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApXG4gIH1cblxuICB1cGRhdGVCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIHNlc3Npb24pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBzZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJJZDogc3RyaW5nLCBzZXNzaW9uOiBCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbikge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25GYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgY2x1YklkLFxuICAgICAgICAgIGlkOiBzZXNzaW9uLmlkXG4gICAgICAgIH0sXG4gICAgICAgIHNlc3Npb25cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihzZWN0aW9uSWQ6IHN0cmluZywgc2Vzc2lvbjogQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24pIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHNlY3Rpb25JZCxcbiAgICAgICAgICBpZDogc2Vzc2lvbi5pZFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24odGVhbUlkOiBzdHJpbmcsIHNlc3Npb246IEJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbkZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWQ6IHNlc3Npb24uaWRcbiAgICAgICAgfSxcbiAgICAgICAgc2Vzc2lvblxuICAgICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgaWYgKHJvbGUgPT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9IGVsc2UgaWYgKHJvbGUgPT0gUm9sZS5TZWN0aW9uQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbihjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb24oY2x1YklkOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2UoXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfQ0FMRU5EQVJfU0xPVF9TRVNTSU9OX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uKHNlY3Rpb25JZDogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmRlbGV0ZVJlc291cmNlKFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1NMT1RfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVRlYW1Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvbih0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9TTE9UX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIHRlYW1JZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgZGVsZXRlQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAocm9sZSA9PT0gUm9sZS5DbHViQWRtaW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUNsdWJCb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBpZCwgZGVsZXRlVW50aWxEYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhclNsb3RTZXNzaW9uUmVwZWF0YWJsZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGlkLCBkZWxldGVVbnRpbERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVDbHViQm9va2luZ0NhbGVuZGFyU2xvdFNlc3Npb25SZXBlYXRhYmxlKGNsdWJJZDogc3RyaW5nLCBpZDogc3RyaW5nLCBkZWxldGVVbnRpbERhdGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZGVsZXRlUmVzb3VyY2VXaXRoQm9keShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9SRVBFQVRBQkxFX1NFU1NJT05fUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZFxuICAgICAgICB9LFxuICAgICAgICB7Ym9keToge2RlbGV0ZV91bnRpbF9kYXRlOiBkZWxldGVVbnRpbERhdGV9fSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNlY3Rpb25Cb29raW5nQ2FsZW5kYXJTbG90U2Vzc2lvblJlcGVhdGFibGUoc2VjdGlvbklkOiBzdHJpbmcsIGlkOiBzdHJpbmcsIGRlbGV0ZVVudGlsRGF0ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZVdpdGhCb2R5KFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX0NBTEVOREFSX1JFUEVBVEFCTEVfU0VTU0lPTl9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkXG4gICAgICAgIH0sXG4gICAgICAgIHtib2R5OiB7ZGVsZXRlX3VudGlsX2RhdGU6IGRlbGV0ZVVudGlsRGF0ZX19LFxuICAgICAgKTtcbiAgfVxuXG5cbiAgLy8gZW5kcmVnaW9uXG5cbiAgLy8gcmVnaW9uIEJvb2tpbmcgU2V0dGluZ1xuXG4gIGdldEJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZykge1xuICAgIGlmIChyb2xlID09IFJvbGUuQ2x1YkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDbHViQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldFRlYW1Cb29raW5nU2V0dGluZ3MoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5nZXRSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7Y2x1YklkfVxuICAgICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLmdldFJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlNlY3Rpb25BZG1pbixcbiAgICAgICAgU0VDVElPTl9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtzZWN0aW9uSWR9XG4gICAgICApXG4gIH1cblxuICBwcml2YXRlIGdldFRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAuZ2V0UmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge3RlYW1JZH1cbiAgICAgIClcbiAgfVxuXG4gIHVwZGF0ZUJvb2tpbmdTZXR0aW5ncyhyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGJvb2tpbmdTZXR0aW5ncyk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51cGRhdGVUZWFtQm9va2luZ1NldHRpbmdzKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYm9va2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdTZXR0aW5ncyhjbHViSWQ6IHN0cmluZywgYm9va2luZ1NldHRpbmdzOiBCb29raW5nU2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc0ZhY3RvcnksXG4gICAgICAgIFJvbGUuQ2x1YkFkbWluLFxuICAgICAgICBDTFVCX0JPT0tJTkdfU0VUVElOR1NfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9va2luZ1NldHRpbmdzXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ1NldHRpbmdzKHNlY3Rpb25JZDogc3RyaW5nLCBib29raW5nU2V0dGluZ3M6IEJvb2tpbmdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC51cGRhdGVSZXNvdXJjZShcbiAgICAgICAgYm9va2luZ1NldHRpbmdzRmFjdG9yeSxcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19TRVRUSU5HU19QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICB9LFxuICAgICAgICBib29raW5nU2V0dGluZ3NcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRlYW1Cb29raW5nU2V0dGluZ3ModGVhbUlkOiBzdHJpbmcsIGJvb2tpbmdTZXR0aW5nczogQm9va2luZ1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nU2V0dGluZ3NGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX1NFVFRJTkdTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGJvb2tpbmdTZXR0aW5nc1xuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG4gIC8vIHJlZ2lvbiBCb29raW5nIENhbGVuZGFyIEFwcGxpY2F0aW9uIFRpbWVzXG5cbiAgdXBkYXRlQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHJvbGU6IFJvbGUsIGNsdWJPclNlY3Rpb25PclRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpO1xuICAgIH0gZWxzZSBpZiAocm9sZSA9PSBSb2xlLlNlY3Rpb25BZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWUpXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZVRlYW1Cb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUoY2x1Yk9yU2VjdGlvbk9yVGVhbUlkLCBhdmFpbGFibGVUaW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZTogQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnVwZGF0ZVJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLkNsdWJBZG1pbixcbiAgICAgICAgQ0xVQl9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVfUEFUSCxcbiAgICAgICAge1xuICAgICAgICAgIGNsdWJJZCxcbiAgICAgICAgICBpZDogYXZhaWxhYmxlVGltZS5pZFxuICAgICAgICB9LFxuICAgICAgICBhdmFpbGFibGVUaW1lXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHNlY3Rpb25JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuU2VjdGlvbkFkbWluLFxuICAgICAgICBTRUNUSU9OX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgc2VjdGlvbklkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBCb29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAudXBkYXRlUmVzb3VyY2UoXG4gICAgICAgIGJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZUZhY3RvcnksXG4gICAgICAgIFJvbGUuVGVhbUFkbWluLFxuICAgICAgICBURUFNX0JPT0tJTkdfQ0FMRU5EQVJfQVBQTElDQVRJT05fVElNRV9QQVRILFxuICAgICAgICB7XG4gICAgICAgICAgdGVhbUlkLFxuICAgICAgICAgIGlkOiBhdmFpbGFibGVUaW1lLmlkXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKHRlYW1JZDogc3RyaW5nLCBhdmFpbGFibGVUaW1lOiBQYXJ0aWFsPEJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZT4pIHtcbiAgICBkZWxldGUgYXZhaWxhYmxlVGltZS5pZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAucG9zdFJlc291cmNlKFxuICAgICAgICBib29raW5nQ2FsZW5kYXJBcHBsaWNhdGlvblRpbWVGYWN0b3J5LFxuICAgICAgICBSb2xlLlRlYW1BZG1pbixcbiAgICAgICAgVEVBTV9CT09LSU5HX0NBTEVOREFSX0FQUExJQ0FUSU9OX1RJTUVTX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YWlsYWJsZVRpbWVcbiAgICAgIClcbiAgfVxuXG4gIGRlbGV0ZUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShyb2xlOiBSb2xlLCBjbHViT3JTZWN0aW9uT3JUZWFtSWQ6IHN0cmluZywgYXZhaWxhYmxlVGltZUlkOiBzdHJpbmcpIHtcbiAgICBpZiAocm9sZSA9PSBSb2xlLkNsdWJBZG1pbikge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViT3JTZWN0aW9uT3JUZWFtSWQsIGF2YWlsYWJsZVRpbWVJZCk7XG4gICAgfSBlbHNlIGlmIChyb2xlID09IFJvbGUuU2VjdGlvbkFkbWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWxldGVTZWN0aW9uQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWxldGVUZWFtQm9va2luZ0NhbGVuZGFyQXBwbGljYXRpb25UaW1lKGNsdWJPclNlY3Rpb25PclRlYW1JZCwgYXZhaWxhYmxlVGltZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlQ2x1YkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShjbHViSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5DbHViQWRtaW4sXG4gICAgICAgIENMVUJfQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBjbHViSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU2VjdGlvbkJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZShzZWN0aW9uSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5TZWN0aW9uQWRtaW4sXG4gICAgICAgIFNFQ1RJT05fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICBzZWN0aW9uSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVGVhbUJvb2tpbmdDYWxlbmRhckFwcGxpY2F0aW9uVGltZSh0ZWFtSWQ6IHN0cmluZywgaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5kZWxldGVSZXNvdXJjZShcbiAgICAgICAgUm9sZS5UZWFtQWRtaW4sXG4gICAgICAgIFRFQU1fQk9PS0lOR19DQUxFTkRBUl9BUFBMSUNBVElPTl9USU1FX1BBVEgsXG4gICAgICAgIHtcbiAgICAgICAgICB0ZWFtSWQsXG4gICAgICAgICAgaWRcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8vIGVuZHJlZ2lvblxuXG5cbn1cbiJdfQ==
|
|
@@ -2918,13 +2918,13 @@ class BookingCalendarService {
|
|
|
2918
2918
|
params
|
|
2919
2919
|
});
|
|
2920
2920
|
}
|
|
2921
|
-
clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, bookingSlotFilter) {
|
|
2921
|
+
clearBookingCalendarSlots(role, clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
2922
2922
|
if (role === Role.ClubAdmin) {
|
|
2923
|
-
return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, bookingSlotFilter);
|
|
2923
|
+
return this.clearClubBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
2924
2924
|
}
|
|
2925
|
-
return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, bookingSlotFilter);
|
|
2925
|
+
return this.clearSectionBookingCalendarSlots(clubOrSectionOrTeamId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions, shouldDeleteRepeatingSlots, weekdays, bookingSlotFilter);
|
|
2926
2926
|
}
|
|
2927
|
-
clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, bookingSlotFilter) {
|
|
2927
|
+
clearClubBookingCalendarSlots(clubId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
2928
2928
|
const params = bookingSlotFilter.toParams();
|
|
2929
2929
|
return this.apiService
|
|
2930
2930
|
.deleteResourceWithBody(Role.ClubAdmin, CLUB_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { clubId }, {
|
|
@@ -2933,11 +2933,12 @@ class BookingCalendarService {
|
|
|
2933
2933
|
week_relative_indexes: weekRelativeIndexes,
|
|
2934
2934
|
only_delete_sessions: onlyDeleteSessions,
|
|
2935
2935
|
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
2936
|
+
weekdays: weekdays,
|
|
2936
2937
|
},
|
|
2937
2938
|
params,
|
|
2938
2939
|
});
|
|
2939
2940
|
}
|
|
2940
|
-
clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, bookingSlotFilter) {
|
|
2941
|
+
clearSectionBookingCalendarSlots(sectionId, currentWeekStartDate, weekRelativeIndexes, onlyDeleteSessions = false, shouldDeleteRepeatingSlots = false, weekdays = [], bookingSlotFilter) {
|
|
2941
2942
|
const params = bookingSlotFilter.toParams();
|
|
2942
2943
|
return this.apiService
|
|
2943
2944
|
.deleteResourceWithBody(Role.SectionAdmin, SECTION_BOOKING_CALENDAR_SLOTS_CLEAR_PATH, { sectionId }, {
|
|
@@ -2946,6 +2947,7 @@ class BookingCalendarService {
|
|
|
2946
2947
|
week_relative_indexes: weekRelativeIndexes,
|
|
2947
2948
|
only_delete_sessions: onlyDeleteSessions,
|
|
2948
2949
|
should_delete_repeating_slots: shouldDeleteRepeatingSlots,
|
|
2950
|
+
weekdays: weekdays,
|
|
2949
2951
|
},
|
|
2950
2952
|
params,
|
|
2951
2953
|
});
|