@myclub_se/data-access 3.7.4 → 3.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/lib/api-models/api-activity-waiting-list-entry.mjs +2 -0
  3. package/esm2022/lib/api-models/api-activity.mjs +1 -1
  4. package/esm2022/lib/api-models/api-event.mjs +1 -1
  5. package/esm2022/lib/api-models/api-feature-flags.mjs +1 -1
  6. package/esm2022/lib/api-models/api-open-activity.mjs +1 -1
  7. package/esm2022/lib/api-models/index.mjs +2 -1
  8. package/esm2022/lib/models/activity-waiting-list-entry.mjs +35 -0
  9. package/esm2022/lib/models/activity.mjs +19 -3
  10. package/esm2022/lib/models/event.mjs +12 -2
  11. package/esm2022/lib/models/feature-flags.mjs +5 -3
  12. package/esm2022/lib/models/index.mjs +2 -1
  13. package/esm2022/lib/models/open-activity.mjs +23 -2
  14. package/esm2022/lib/services/activity.service.mjs +106 -6
  15. package/esm2022/lib/services/api.service.mjs +9 -1
  16. package/esm2022/lib/services/factories/activity-factory.mjs +2 -2
  17. package/esm2022/lib/services/factories/activity-waiting-list-entry-factory.mjs +3 -0
  18. package/esm2022/lib/services/factories/event-factory.mjs +2 -2
  19. package/esm2022/lib/services/factories/feature-flags-factory.mjs +2 -2
  20. package/esm2022/lib/services/factories/index.mjs +2 -1
  21. package/esm2022/lib/services/factories/open-activity-factory.mjs +2 -2
  22. package/esm2022/lib/store/actions/activity.actions.mjs +117 -1
  23. package/esm2022/lib/store/effects/activity.effects.mjs +121 -6
  24. package/esm2022/lib/store/interfaces/team-activity.interface.mjs +1 -1
  25. package/esm2022/lib/store/reducers/calendar.reducer.mjs +143 -6
  26. package/esm2022/lib/store/reducers/public.reducer.mjs +42 -3
  27. package/esm2022/lib/store/selectors/calendar.selectors.mjs +6 -1
  28. package/esm2022/lib/store/selectors/public.selectors.mjs +4 -1
  29. package/esm2022/lib/store/state/calendar.state.mjs +2 -1
  30. package/esm2022/lib/store/state/public.state.mjs +4 -1
  31. package/esm2022/lib/types/activity-waitlist-status-type.mjs +2 -0
  32. package/esm2022/lib/types/index.mjs +2 -1
  33. package/esm2022/lib/utils/index.mjs +2 -0
  34. package/esm2022/lib/utils/is-booking-reserved-for-waitlist.mjs +20 -0
  35. package/fesm2022/myclub_se-data-access.mjs +657 -24
  36. package/fesm2022/myclub_se-data-access.mjs.map +1 -1
  37. package/index.d.ts +1 -0
  38. package/lib/api-models/api-activity-waiting-list-entry.d.ts +17 -0
  39. package/lib/api-models/api-activity.d.ts +7 -0
  40. package/lib/api-models/api-event.d.ts +5 -0
  41. package/lib/api-models/api-feature-flags.d.ts +1 -0
  42. package/lib/api-models/api-open-activity.d.ts +9 -0
  43. package/lib/api-models/index.d.ts +1 -0
  44. package/lib/models/activity-waiting-list-entry.d.ts +18 -0
  45. package/lib/models/activity.d.ts +8 -1
  46. package/lib/models/event.d.ts +6 -1
  47. package/lib/models/feature-flags.d.ts +2 -1
  48. package/lib/models/index.d.ts +1 -0
  49. package/lib/models/open-activity.d.ts +10 -1
  50. package/lib/services/activity.service.d.ts +29 -4
  51. package/lib/services/api.service.d.ts +6 -0
  52. package/lib/services/factories/activity-waiting-list-entry-factory.d.ts +3 -0
  53. package/lib/services/factories/index.d.ts +1 -0
  54. package/lib/store/actions/activity.actions.d.ts +476 -2
  55. package/lib/store/effects/activity.effects.d.ts +169 -1
  56. package/lib/store/interfaces/team-activity.interface.d.ts +3 -1
  57. package/lib/store/selectors/calendar.selectors.d.ts +8 -0
  58. package/lib/store/selectors/public.selectors.d.ts +3 -0
  59. package/lib/store/state/calendar.state.d.ts +2 -1
  60. package/lib/store/state/public.state.d.ts +4 -1
  61. package/lib/types/activity-waitlist-status-type.d.ts +1 -0
  62. package/lib/types/index.d.ts +1 -0
  63. package/lib/utils/index.d.ts +1 -0
  64. package/lib/utils/is-booking-reserved-for-waitlist.d.ts +21 -0
  65. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { inject, Injectable } from '@angular/core';
2
2
  import { Actions, createEffect, ofType } from '@ngrx/effects';
3
3
  import { ActivityService } from '../../services';
4
- import { addTeamLeaderActivityInviteAction, addTeamLeaderActivityInviteFailureAction, addTeamLeaderActivityInviteSuccessAction, createTeamActivityAction, createTeamActivityFailureAction, createTeamActivityQuestionAction, createTeamActivityQuestionFailureAction, createTeamActivityQuestionSuccessAction, createTeamActivitySuccessAction, deleteTeamActivityAction, deleteTeamActivityFailureAction, deleteTeamActivityInviteAction, deleteTeamActivityInviteFailureAction, deleteTeamActivityInviteSuccessAction, deleteTeamActivityQuestionAction, deleteTeamActivityQuestionFailureAction, deleteTeamActivityQuestionSuccessAction, deleteTeamActivitySuccessAction, listMemberActivityInvitesAction, listMemberActivityInvitesFailureAction, listMemberActivityInvitesSuccessAction, listTeamActivityGuestsAction, listTeamActivityGuestsFailureAction, listTeamActivityGuestsSuccessAction, addTeamActivityGuestAction, addTeamActivityGuestFailureAction, addTeamActivityGuestSuccessAction, updateTeamActivityGuestAction, updateTeamActivityGuestFailureAction, updateTeamActivityGuestSuccessAction, deleteTeamActivityGuestAction, deleteTeamActivityGuestFailureAction, deleteTeamActivityGuestSuccessAction, listTeamActivityParticipantsAction, listTeamActivityParticipantsFailureAction, listTeamActivityParticipantsSuccessAction, listTeamActivityQuestionsAction, listTeamActivityQuestionsFailureAction, listTeamActivityQuestionsSuccessAction, listTeamLeaderExtraMembersSuccessAction, removeMemberOpenActivityAction, removeMemberOpenActivityFailureAction, removeMemberOpenActivitySuccessAction, resendTeamActivityMemberInviteAction, resendTeamActivityMemberInviteFailureAction, resendTeamActivityMemberInviteSuccessAction, retrieveMemberActivityAction, retrieveMemberActivityFailureAction, retrieveMemberActivityInviteAction, retrieveMemberActivityInviteFailureAction, retrieveMemberActivityInviteSuccessAction, retrieveMemberActivitySuccessAction, retrieveMemberOpenActivityAction, retrieveMemberOpenActivityFailureAction, retrieveMemberOpenActivitySuccessAction, retrievePublicMemberActivityAction, retrievePublicMemberActivityFailureAction, retrievePublicMemberActivityInviteAction, retrievePublicMemberActivityInviteFailureAction, retrievePublicMemberActivityInviteSuccessAction, retrievePublicActivityInviteAction, retrievePublicActivityInviteFailureAction, retrievePublicActivityInviteSuccessAction, retrievePublicMemberActivitySuccessAction, retrieveTeamActivityAction, retrieveTeamActivityFailureAction, retrieveTeamActivityQRCodeAction, retrieveTeamActivityQRCodeFailureAction, retrieveTeamActivityQRCodeSuccessAction, retrieveTeamActivityQuestionAction, retrieveTeamActivityQuestionFailureAction, retrieveTeamActivityQuestionSuccessAction, retrieveTeamActivitySettingsAction, retrieveTeamActivitySettingsFailureAction, retrieveTeamActivitySettingsSuccessAction, retrieveTeamActivitySuccessAction, retrieveTeamDefaultActivitySettingsAction, retrieveTeamDefaultActivitySettingsFailureAction, retrieveTeamDefaultActivitySettingsSuccessAction, retrieveTeamLeaderGroupSuccessAction, updateMemberActivityAttendanceAction, updateMemberActivityAttendanceFailureAction, updateMemberActivityAttendanceSuccessAction, updateMemberActivityInviteAction, updateMemberActivityInviteFailureAction, updateMemberActivityInviteSuccessAction, updateMemberOpenActivityAction, updateMemberOpenActivityFailureAction, updateMemberOpenActivitySuccessAction, updatePublicActivityInviteAction, updatePublicActivityInviteFailureAction, updatePublicActivityInviteSuccessAction, updatePublicMemberActivityInviteAction, updatePublicMemberActivityInviteFailureAction, updatePublicMemberActivityInviteSuccessAction, updatePublicMemberOpenActivityAction, updatePublicMemberOpenActivityFailureAction, updatePublicMemberOpenActivitySuccessAction, updateTeamActivityAction, updateTeamActivityAttendanceAction, updateTeamActivityAttendanceFailureAction, updateTeamActivityAttendanceSuccessAction, updateTeamActivityFailureAction, updateTeamActivityQuestionAction, updateTeamActivityQuestionFailureAction, updateTeamActivityQuestionSuccessAction, updateTeamActivitySuccessAction, updateTeamMemberActivityInviteAction, updateTeamMemberActivityInviteFailureAction, updateTeamMemberActivityInviteSuccessAction } from '../actions';
4
+ import { addTeamLeaderActivityInviteAction, addTeamLeaderActivityInviteFailureAction, addTeamLeaderActivityInviteSuccessAction, createTeamActivityAction, createTeamActivityFailureAction, createTeamActivityQuestionAction, createTeamActivityQuestionFailureAction, createTeamActivityQuestionSuccessAction, createTeamActivitySuccessAction, deleteTeamActivityAction, deleteTeamActivityFailureAction, deleteTeamActivityInviteAction, deleteTeamActivityInviteFailureAction, deleteTeamActivityInviteSuccessAction, deleteTeamActivityQuestionAction, deleteTeamActivityQuestionFailureAction, deleteTeamActivityQuestionSuccessAction, deleteTeamActivitySuccessAction, listMemberActivityInvitesAction, listMemberActivityInvitesFailureAction, listMemberActivityInvitesSuccessAction, listTeamActivityGuestsAction, listTeamActivityGuestsFailureAction, listTeamActivityGuestsSuccessAction, addTeamActivityGuestAction, addTeamActivityGuestFailureAction, addTeamActivityGuestSuccessAction, updateTeamActivityGuestAction, updateTeamActivityGuestFailureAction, updateTeamActivityGuestSuccessAction, deleteTeamActivityGuestAction, deleteTeamActivityGuestFailureAction, deleteTeamActivityGuestSuccessAction, listTeamActivityParticipantsAction, listTeamActivityParticipantsFailureAction, listTeamActivityParticipantsSuccessAction, listTeamActivityQuestionsAction, listTeamActivityQuestionsFailureAction, listTeamActivityQuestionsSuccessAction, listTeamLeaderExtraMembersSuccessAction, removeMemberOpenActivityAction, removeMemberOpenActivityFailureAction, removeMemberOpenActivitySuccessAction, resendTeamActivityMemberInviteAction, resendTeamActivityMemberInviteFailureAction, resendTeamActivityMemberInviteSuccessAction, retrieveMemberActivityAction, retrieveMemberActivityFailureAction, retrieveMemberActivityInviteAction, retrieveMemberActivityInviteFailureAction, retrieveMemberActivityInviteSuccessAction, retrieveMemberActivitySuccessAction, retrieveMemberOpenActivityAction, retrieveMemberOpenActivityFailureAction, retrieveMemberOpenActivitySuccessAction, retrievePublicMemberActivityAction, retrievePublicMemberActivityFailureAction, retrievePublicMemberActivityInviteAction, retrievePublicMemberActivityInviteFailureAction, retrievePublicMemberActivityInviteSuccessAction, retrievePublicActivityInviteAction, retrievePublicActivityInviteFailureAction, retrievePublicActivityInviteSuccessAction, retrievePublicMemberActivitySuccessAction, retrieveTeamActivityAction, retrieveTeamActivityFailureAction, retrieveTeamActivityQRCodeAction, retrieveTeamActivityQRCodeFailureAction, retrieveTeamActivityQRCodeSuccessAction, retrieveTeamActivityQuestionAction, retrieveTeamActivityQuestionFailureAction, retrieveTeamActivityQuestionSuccessAction, retrieveTeamActivitySettingsAction, retrieveTeamActivitySettingsFailureAction, retrieveTeamActivitySettingsSuccessAction, retrieveTeamActivitySuccessAction, retrieveTeamDefaultActivitySettingsAction, retrieveTeamDefaultActivitySettingsFailureAction, retrieveTeamDefaultActivitySettingsSuccessAction, retrieveTeamLeaderGroupSuccessAction, updateMemberActivityAttendanceAction, updateMemberActivityAttendanceFailureAction, updateMemberActivityAttendanceSuccessAction, removeMemberActivityInviteSuccessAction, removePublicActivityInviteSuccessAction, removePublicMemberActivityInviteSuccessAction, updateMemberActivityInviteAction, updateMemberActivityInviteFailureAction, updateMemberActivityInviteSuccessAction, updateMemberOpenActivityAction, updateMemberOpenActivityFailureAction, updateMemberOpenActivitySuccessAction, updatePublicActivityInviteAction, updatePublicActivityInviteFailureAction, updatePublicActivityInviteSuccessAction, updatePublicMemberActivityInviteAction, updatePublicMemberActivityInviteFailureAction, updatePublicMemberActivityInviteSuccessAction, updatePublicMemberOpenActivityAction, updatePublicMemberOpenActivityFailureAction, updatePublicMemberOpenActivitySuccessAction, updateTeamActivityAction, updateTeamActivityAttendanceAction, updateTeamActivityAttendanceFailureAction, updateTeamActivityAttendanceSuccessAction, updateTeamActivityFailureAction, updateTeamActivityQuestionAction, updateTeamActivityQuestionFailureAction, updateTeamActivityQuestionSuccessAction, updateTeamActivitySuccessAction, updateTeamMemberActivityInviteAction, updateTeamMemberActivityInviteFailureAction, updateTeamMemberActivityInviteSuccessAction, joinWaitingListAction, joinWaitingListFailureAction, joinWaitingListSuccessAction, leaveWaitingListAction, leaveWaitingListFailureAction, leaveWaitingListSuccessAction, retrieveMemberWaitingListEntryAction, retrieveMemberWaitingListEntryFailureAction, retrieveMemberWaitingListEntrySuccessAction, loadTeamActivityWaitingListAction, loadTeamActivityWaitingListFailureAction, loadTeamActivityWaitingListSuccessAction, admitWaitlistEntryAction, admitWaitlistEntryFailureAction, admitWaitlistEntrySuccessAction, reorderWaitlistEntryAction, reorderWaitlistEntryFailureAction, reorderWaitlistEntrySuccessAction, remindWaitlistOfferAction, remindWaitlistOfferFailureAction, remindWaitlistOfferSuccessAction, offerWaitlistEntryAction, offerWaitlistEntryFailureAction, offerWaitlistEntrySuccessAction, passWaitlistOfferAction, passWaitlistOfferFailureAction, passWaitlistOfferSuccessAction, openWaitlistPlaceAction, openWaitlistPlaceFailureAction, openWaitlistPlaceSuccessAction, removeWaitlistEntryAction, removeWaitlistEntryFailureAction, removeWaitlistEntrySuccessAction, retrievePublicWaitingListStateAction, retrievePublicWaitingListStateFailureAction, retrievePublicWaitingListStateSuccessAction, joinPublicWaitingListAction, joinPublicWaitingListFailureAction, joinPublicWaitingListSuccessAction, leavePublicWaitingListAction, leavePublicWaitingListFailureAction, leavePublicWaitingListSuccessAction, retrievePublicWaitingListOfferAction, retrievePublicWaitingListOfferFailureAction, retrievePublicWaitingListOfferSuccessAction, retrievePublicOpenActivityWaitlistOfferAction, retrievePublicOpenActivityWaitlistOfferFailureAction, retrievePublicOpenActivityWaitlistOfferSuccessAction, respondPublicOpenActivityWaitlistOfferAction, respondPublicOpenActivityWaitlistOfferFailureAction, respondPublicOpenActivityWaitlistOfferSuccessAction, declinePublicOpenActivityWaitlistOfferAction, declinePublicOpenActivityWaitlistOfferFailureAction, declinePublicOpenActivityWaitlistOfferSuccessAction } from '../actions';
5
5
  import { exhaustMap, forkJoin, mergeMap, of } from 'rxjs';
6
6
  import { catchError, map, take } from 'rxjs/operators';
7
7
  import { HttpErrorResponse } from '@angular/common/http';
@@ -155,7 +155,9 @@ export class ActivityEffects extends ExtraMembersMixin {
155
155
  guests: [],
156
156
  members,
157
157
  participants,
158
- team
158
+ team,
159
+ waitingList: [],
160
+ waitlistOutstandingOffer: null
159
161
  }
160
162
  }),
161
163
  retrieveTeamLeaderGroupSuccessAction({ payload: team }),
@@ -226,7 +228,9 @@ export class ActivityEffects extends ExtraMembersMixin {
226
228
  .pipe(catchError(() => of(null)))
227
229
  : of(null);
228
230
  return reconcile$.pipe(mergeMap(() => this.activityService.updateMemberActivity(payload.memberId, payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
229
- .pipe(map((activityInvite) => updateMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(updateMemberActivityInviteFailureAction({ payload: error }))))));
231
+ .pipe(map((activityInvite) => activityInvite
232
+ ? updateMemberActivityInviteSuccessAction({ payload: activityInvite })
233
+ : removeMemberActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updateMemberActivityInviteFailureAction({ payload: error }))))));
230
234
  })));
231
235
  updateMemberOpenActivity$ = createEffect(() => this.actions$
232
236
  .pipe(ofType(updateMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpMemberOpenActivity(payload.memberId, payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
@@ -239,7 +243,9 @@ export class ActivityEffects extends ExtraMembersMixin {
239
243
  .pipe(catchError(() => of(null)))
240
244
  : of(null);
241
245
  return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicActivityInvite(payload.activityInvite.id, payload.token, { ...payload.activityInvite, guests: newGuests(payload.guests) })
242
- .pipe(map((activityInvite) => updatePublicActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(updatePublicActivityInviteFailureAction({ payload: error }))))));
246
+ .pipe(map((activityInvite) => activityInvite
247
+ ? updatePublicActivityInviteSuccessAction({ payload: activityInvite })
248
+ : removePublicActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updatePublicActivityInviteFailureAction({ payload: error }))))));
243
249
  })));
244
250
  updatePublicMemberActivityInvite$ = createEffect(() => this.actions$
245
251
  .pipe(ofType(updatePublicMemberActivityInviteAction), exhaustMap(({ payload }) => {
@@ -249,7 +255,9 @@ export class ActivityEffects extends ExtraMembersMixin {
249
255
  .pipe(catchError(() => of(null)))
250
256
  : of(null);
251
257
  return reconcile$.pipe(mergeMap(() => this.activityService.updatePublicMemberActivityInvite(payload.activityInvite.id, { ...payload.activityInvite, guests: newGuests(payload.guests) })
252
- .pipe(map((activityInvite) => updatePublicMemberActivityInviteSuccessAction({ payload: activityInvite })), catchError((error) => of(updatePublicMemberActivityInviteFailureAction({ payload: error }))))));
258
+ .pipe(map((activityInvite) => activityInvite
259
+ ? updatePublicMemberActivityInviteSuccessAction({ payload: activityInvite })
260
+ : removePublicMemberActivityInviteSuccessAction({ payload: { activityInvite: payload.activityInvite } })), catchError((error) => of(updatePublicMemberActivityInviteFailureAction({ payload: error }))))));
253
261
  })));
254
262
  updatePublicMemberOpenActivity$ = createEffect(() => this.actions$
255
263
  .pipe(ofType(updatePublicMemberOpenActivityAction), exhaustMap(({ payload }) => this.activityService.signUpPublicOpenActivity(payload.activityId, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
@@ -266,12 +274,119 @@ export class ActivityEffects extends ExtraMembersMixin {
266
274
  updateTeamActivityQuestion$ = createEffect(() => this.actions$
267
275
  .pipe(ofType(updateTeamActivityQuestionAction), exhaustMap(({ payload }) => this.activityService.updateTeamActivityQuestion(payload.teamId, payload.question)
268
276
  .pipe(map((activityQuestion) => updateTeamActivityQuestionSuccessAction({ payload: activityQuestion })), catchError((error) => of(updateTeamActivityQuestionFailureAction({ payload: error })))))));
277
+ joinWaitingList$ = createEffect(() => this.actions$
278
+ .pipe(ofType(joinWaitingListAction), exhaustMap(({ payload }) => this.activityService.joinMemberActivityWaitingList(payload.memberId, payload.activityId)
279
+ .pipe(mergeMap((entry) => [
280
+ joinWaitingListSuccessAction({ payload: entry }),
281
+ ...memberWaitlistRefreshActions(payload)
282
+ ]), catchError((error) => of(joinWaitingListFailureAction({ payload: error })))))));
283
+ leaveWaitingList$ = createEffect(() => this.actions$
284
+ .pipe(ofType(leaveWaitingListAction), exhaustMap(({ payload }) => this.activityService.leaveMemberActivityWaitingList(payload.memberId, payload.activityId)
285
+ .pipe(mergeMap(() => [
286
+ leaveWaitingListSuccessAction({ payload: { memberId: payload.memberId, activityId: payload.activityId } }),
287
+ ...memberWaitlistRefreshActions(payload)
288
+ ]), catchError((error) => of(leaveWaitingListFailureAction({ payload: error })))))));
289
+ retrieveMemberWaitingListEntry$ = createEffect(() => this.actions$
290
+ .pipe(ofType(retrieveMemberWaitingListEntryAction), exhaustMap(({ payload }) => this.activityService.getMemberActivityWaitingListEntry(payload.memberId, payload.activityId)
291
+ .pipe(map((entry) => retrieveMemberWaitingListEntrySuccessAction({ payload: entry })), catchError((error) => of(retrieveMemberWaitingListEntryFailureAction({ payload: error })))))));
292
+ loadTeamActivityWaitingList$ = createEffect(() => this.actions$
293
+ .pipe(ofType(loadTeamActivityWaitingListAction), exhaustMap(({ payload }) => this.activityService.getTeamActivityWaitingList(payload.teamId, payload.activityId)
294
+ .pipe(map(({ entries, outstandingOffer }) => loadTeamActivityWaitingListSuccessAction({
295
+ payload: { activityId: payload.activityId, entries, outstandingOffer }
296
+ })), catchError((error) => of(loadTeamActivityWaitingListFailureAction({ payload: error })))))));
297
+ admitWaitlistEntry$ = createEffect(() => this.actions$
298
+ .pipe(ofType(admitWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.admitTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
299
+ .pipe(mergeMap(() => [
300
+ admitWaitlistEntrySuccessAction(),
301
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
302
+ ]), catchError((error) => of(admitWaitlistEntryFailureAction({ payload: error })))))));
303
+ reorderWaitlistEntry$ = createEffect(() => this.actions$
304
+ .pipe(ofType(reorderWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.reorderTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId, payload.direction)
305
+ .pipe(mergeMap(() => [
306
+ reorderWaitlistEntrySuccessAction(),
307
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
308
+ ]), catchError((error) => of(reorderWaitlistEntryFailureAction({ payload: error })))))));
309
+ remindWaitlistOffer$ = createEffect(() => this.actions$
310
+ .pipe(ofType(remindWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.remindTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
311
+ .pipe(mergeMap(() => [
312
+ remindWaitlistOfferSuccessAction(),
313
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
314
+ ]), catchError((error) => of(remindWaitlistOfferFailureAction({ payload: error })))))));
315
+ offerWaitlistEntry$ = createEffect(() => this.actions$
316
+ .pipe(ofType(offerWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.offerTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
317
+ .pipe(mergeMap((entry) => [
318
+ offerWaitlistEntrySuccessAction({ payload: entry }),
319
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
320
+ ]), catchError((error) => of(offerWaitlistEntryFailureAction({ payload: error })))))));
321
+ passWaitlistOffer$ = createEffect(() => this.actions$
322
+ .pipe(ofType(passWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.passTeamActivityWaitlistOffer(payload.teamId, payload.activityId, payload.entryId)
323
+ .pipe(mergeMap(() => [
324
+ passWaitlistOfferSuccessAction(),
325
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
326
+ ]), catchError((error) => of(passWaitlistOfferFailureAction({ payload: error })))))));
327
+ openWaitlistPlace$ = createEffect(() => this.actions$
328
+ .pipe(ofType(openWaitlistPlaceAction), exhaustMap(({ payload }) => this.activityService.openTeamActivityWaitlistPlace(payload.teamId, payload.activityId)
329
+ .pipe(mergeMap(() => [
330
+ openWaitlistPlaceSuccessAction(),
331
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
332
+ ]), catchError((error) => of(openWaitlistPlaceFailureAction({ payload: error })))))));
333
+ removeWaitlistEntry$ = createEffect(() => this.actions$
334
+ .pipe(ofType(removeWaitlistEntryAction), exhaustMap(({ payload }) => this.activityService.deleteTeamActivityWaitlistEntry(payload.teamId, payload.activityId, payload.entryId)
335
+ .pipe(mergeMap(() => [
336
+ removeWaitlistEntrySuccessAction(),
337
+ loadTeamActivityWaitingListAction({ payload: { teamId: payload.teamId, activityId: payload.activityId } })
338
+ ]), catchError((error) => of(removeWaitlistEntryFailureAction({ payload: error })))))));
339
+ retrievePublicWaitingListState$ = createEffect(() => this.actions$
340
+ .pipe(ofType(retrievePublicWaitingListStateAction), exhaustMap(({ payload }) => this.activityService.getPublicWaitingListState(payload.activityInviteId, payload.token)
341
+ .pipe(map((entry) => retrievePublicWaitingListStateSuccessAction({ payload: entry })), catchError((error) => of(retrievePublicWaitingListStateFailureAction({ payload: error })))))));
342
+ joinPublicWaitingList$ = createEffect(() => this.actions$
343
+ .pipe(ofType(joinPublicWaitingListAction), exhaustMap(({ payload }) => this.activityService.joinPublicWaitingList(payload.activityInviteId, payload.token)
344
+ .pipe(mergeMap((entry) => [
345
+ joinPublicWaitingListSuccessAction({ payload: entry }),
346
+ retrievePublicActivityInviteAction({ payload: { activityInviteId: payload.activityInviteId, token: payload.token } })
347
+ ]), catchError((error) => of(joinPublicWaitingListFailureAction({ payload: error })))))));
348
+ leavePublicWaitingList$ = createEffect(() => this.actions$
349
+ .pipe(ofType(leavePublicWaitingListAction), exhaustMap(({ payload }) => this.activityService.leavePublicWaitingList(payload.activityInviteId, payload.token)
350
+ .pipe(mergeMap(() => [
351
+ leavePublicWaitingListSuccessAction(),
352
+ retrievePublicActivityInviteAction({ payload: { activityInviteId: payload.activityInviteId, token: payload.token } })
353
+ ]), catchError((error) => of(leavePublicWaitingListFailureAction({ payload: error })))))));
354
+ retrievePublicWaitingListOffer$ = createEffect(() => this.actions$
355
+ .pipe(ofType(retrievePublicWaitingListOfferAction), exhaustMap(({ payload }) => this.activityService.getPublicWaitingListOffer(payload.id, payload.token)
356
+ .pipe(map((entry) => retrievePublicWaitingListOfferSuccessAction({ payload: entry })), catchError((error) => of(retrievePublicWaitingListOfferFailureAction({ payload: error })))))));
357
+ retrievePublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
358
+ .pipe(ofType(retrievePublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.getPublicOpenActivityWaitlistOffer(payload.id, payload.token)
359
+ .pipe(map((openActivity) => retrievePublicOpenActivityWaitlistOfferSuccessAction({ payload: openActivity })), catchError((error) => of(retrievePublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
360
+ respondPublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
361
+ .pipe(ofType(respondPublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.respondPublicOpenActivityWaitlistOffer(payload.id, payload.token, payload.comment, payload.optional_fees, payload.responses, newGuests(payload.guests))
362
+ .pipe(map((openActivity) => respondPublicOpenActivityWaitlistOfferSuccessAction({ payload: openActivity })), catchError((error) => of(respondPublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
363
+ declinePublicOpenActivityWaitlistOffer$ = createEffect(() => this.actions$
364
+ .pipe(ofType(declinePublicOpenActivityWaitlistOfferAction), exhaustMap(({ payload }) => this.activityService.declinePublicOpenActivityWaitlistOffer(payload.id, payload.token)
365
+ .pipe(map((success) => success
366
+ ? declinePublicOpenActivityWaitlistOfferSuccessAction()
367
+ : declinePublicOpenActivityWaitlistOfferFailureAction({ payload: new HttpErrorResponse({ status: 400 }) })), catchError((error) => of(declinePublicOpenActivityWaitlistOfferFailureAction({ payload: error })))))));
269
368
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
270
369
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects });
271
370
  }
272
371
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ActivityEffects, decorators: [{
273
372
  type: Injectable
274
373
  }] });
374
+ // Member join/leave both refresh the activity (or open activity) so the
375
+ // member_waiting_list_* serializer fields stay in sync, plus the invite when
376
+ // the member came through an invitation.
377
+ function memberWaitlistRefreshActions(payload) {
378
+ const actions = [];
379
+ if (payload.isOpenActivity) {
380
+ actions.push(retrieveMemberOpenActivityAction({ payload: { memberId: payload.memberId, activityId: payload.activityId } }));
381
+ }
382
+ else {
383
+ actions.push(retrieveMemberActivityAction({ payload: { memberId: payload.memberId, activityId: payload.activityId } }));
384
+ }
385
+ if (payload.activityInviteId) {
386
+ actions.push(retrieveMemberActivityInviteAction({ payload: { memberId: payload.memberId, activityInviteId: payload.activityInviteId } }));
387
+ }
388
+ return actions;
389
+ }
275
390
  // New guests (no id yet) are sent inline with the respond request, so the
276
391
  // backend creates them before the invoice and includes their guest fees.
277
392
  function newGuests(guests) {
@@ -311,4 +426,4 @@ function reconcilePublicTokenGuests(id, token, desiredGuests, existingGuests, ac
311
426
  ];
312
427
  return ops.length > 0 ? forkJoin(ops) : of(null);
313
428
  }
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc3RvcmUvZWZmZWN0cy9hY3Rpdml0eS5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsd0NBQXdDLEVBQ3hDLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyx5Q0FBeUMsRUFDekMseUNBQXlDLEVBQ3pDLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLHVDQUF1QyxFQUN2Qyw4QkFBOEIsRUFDOUIscUNBQXFDLEVBQ3JDLHFDQUFxQyxF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QU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQzVJLENBQUM7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5QWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0FjdGlvbixcbiAgbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzRmFpbHVyZUFjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c1N1Y2Nlc3NBY3Rpb24sXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0QWN0aW9uLFxuICBhZGRUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24sXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNGYWlsdXJlQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzU3VjY2Vzc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUxlYWRlckV4dHJhTWVtYmVyc1N1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlQWN0aW9uLFxuICByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtTGVhZGVyR3JvdXBTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgdXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmb3JrSm9pbiwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIEFjdGl2aXR5LFxuICBBY3Rpdml0eUV4dHJhTWVtYmVyLFxuICBBY3Rpdml0eUludml0ZSxcbiAgQWN0aXZpdHlMb2NhdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlLFxuICBBY3Rpdml0eVNldHRpbmdzLFxuICBBY3Rpdml0eVR5cGUsXG4gIENvbGxlY3Rpb24sXG4gIEd1ZXN0LFxuICBNZW1iZXJBY3Rpdml0eUludml0ZSxcbiAgT3BlbkFjdGl2aXR5LFxuICBTZWFyY2hNZW1iZXIsXG59IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBHdWVzdElucHV0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeHRyYU1lbWJlcnNNaXhpbiB9IGZyb20gJy4vbWl4aW5zL2V4dHJhLW1lbWJlcnMtbWl4aW4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWN0aXZpdHlFZmZlY3RzIGV4dGVuZHMgRXh0cmFNZW1iZXJzTWl4aW4ge1xuICBwcml2YXRlIGFjdGlvbnMkID0gaW5qZWN0KEFjdGlvbnMpO1xuICBwcml2YXRlIGFjdGl2aXR5U2VydmljZSA9IGluamVjdChBY3Rpdml0eVNlcnZpY2UpO1xuXG4gIGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIG1lbWJlcklkczogQXJyYXk8c3RyaW5nPiB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmFkZFRlYW1BY3Rpdml0eUludml0ZXMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5tZW1iZXJJZHMpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlVGVhbUFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoY3JlYXRlVGVhbUFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5OiBBY3Rpdml0eSB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmNyZWF0ZVRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IFtjcmVhdGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pLCByZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICB0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLFxuICAgICAgICAgICAgICAgIGFjdGl2aXR5SWQ6IGFjdGl2aXR5LmlkLFxuICAgICAgICAgICAgICAgIHJldHJpZXZlRXh0cmFNZW1iZXJzOiB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbiB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLnF1ZXN0aW9uKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKHF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9uKSA9PiBbXG4gICAgICAgICAgICAgIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcXVlc3Rpb259KSxcbiAgICAgICAgICAgICAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0FjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVsZXRlVGVhbUFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogcGF5bG9hZC5hY3Rpdml0eUlkfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5kZWxldGVUZWFtQWN0aXZpdHlJbnZpdGUocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0gOiB7cGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgcXVlc3Rpb25JZDogc3RyaW5nIH0gfSApID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLnF1ZXN0aW9uSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7Li4ucGF5bG9hZH19KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0FjdGlvbiksXG4gICAgICBtZXJnZU1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IEFycmF5PHN0cmluZz4gfSkgPT5cbiAgICAgICAgZm9ya0pvaW4oXG4gICAgICAgICAgcGF5bG9hZC5tYXAoKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRNZW1iZXJBY3Rpdml0eUludml0ZXMoaWQpXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoe2Vycm9yfSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICBtYXAocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZTogQXJyYXk8QWN0aXZpdHlJbnZpdGU+ID0gW107XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzUmVzdWx0cyA9IHJlc3VsdHMuZmlsdGVyKHJlc3VsdCA9PiAhKHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSkgYXMgQXJyYXk8Q29sbGVjdGlvbjxBY3Rpdml0eUludml0ZT4+O1xuICAgICAgICAgICAgY29uc3QgZXJyb3JSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+IHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSBhcyBBcnJheTxIdHRwRXJyb3JSZXNwb25zZT47XG5cbiAgICAgICAgICAgIGlmIChlcnJvclJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3JSZXN1bHRzWzBdfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWNjZXNzUmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVyblZhbHVlLnB1c2goLi4ucmVzdWx0LnRvQXJyYXkoKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiByZXR1cm5WYWx1ZX0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2YobGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eVBhcnRpY2lwYW50czogQ29sbGVjdGlvbjxTZWFyY2hNZW1iZXI+KSA9PiBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWQsXG4gICAgICAgICAgICAgICAgcmVzdWx0czogYWN0aXZpdHlQYXJ0aWNpcGFudHMudG9BcnJheSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50c0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RUZWFtQWN0aXZpdHlHdWVzdHNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlHdWVzdHMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3Vlc3RzOiBDb2xsZWN0aW9uPEd1ZXN0PikgPT4gbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c1N1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgcmVzdWx0czogZ3Vlc3RzLnRvQXJyYXkoKSB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxpc3RUZWFtQWN0aXZpdHlHdWVzdHNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoYWRkVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5hZGRUZWFtQWN0aXZpdHlHdWVzdChwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCB7IG5hbWU6IHBheWxvYWQubmFtZSwgY29tbWVudDogcGF5bG9hZC5jb21tZW50IH0pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGd1ZXN0OiBHdWVzdCkgPT4gYWRkVGVhbUFjdGl2aXR5R3Vlc3RTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogeyBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWQsIGd1ZXN0IH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoYWRkVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHlHdWVzdChwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmd1ZXN0SWQsIHsgbmFtZTogcGF5bG9hZC5uYW1lLCBjb21tZW50OiBwYXlsb2FkLmNvbW1lbnQgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3Vlc3Q6IEd1ZXN0KSA9PiB1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZ3Vlc3QgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZ3Vlc3RJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZ3Vlc3RJZDogcGF5bG9hZC5ndWVzdElkIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0VGVhbUFjdGl2aXR5UXVlc3Rpb25zQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlRdWVzdGlvbnMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHlRdWVzdGlvbnM6IENvbGxlY3Rpb248QWN0aXZpdHlRdWVzdGlvbj4pID0+IGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgcmVzdWx0czogYWN0aXZpdHlRdWVzdGlvbnMudG9BcnJheSgpfX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgZXJyb3J9fSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVzZW5kVGVhbUFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVzZW5kSW52aXRlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVNZW1iZXJBY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlckFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IEFjdGl2aXR5KSA9PiByZXRyaWV2ZU1lbWJlckFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0TWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlck9wZW5BY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlclB1YmxpY0FjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiBzdHJpbmcgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljTWVtYmVyQWN0aXZpdHkocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eSA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgcmV0cmlldmVFeHRyYU1lbWJlcnM6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgYWN0aXZpdHk6IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgZXh0cmFNZW1iZXJzOiBwYXlsb2FkLnJldHJpZXZlRXh0cmFNZW1iZXJzID8gdGhpcy50ZWFtTGVhZGVyR2V0QWxsRXh0cmFNZW1iZXJzKHBheWxvYWQudGVhbUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICApIDogb2YobmV3IEFycmF5PEFjdGl2aXR5RXh0cmFNZW1iZXI+KCkpLFxuICAgICAgICAgIG1lbWJlcnM6IHRoaXMudGVhbUxlYWRlckdldEFsbE1lbWJlcnMocGF5bG9hZC50ZWFtSWQpLFxuICAgICAgICAgIHBhcnRpY2lwYW50czogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogQ29sbGVjdGlvbjxTZWFyY2hNZW1iZXI+KSA9PiByZXNwb25zZS50b0FycmF5KCkpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIHRlYW06IHRoaXMudGVhbVNlcnZpY2UuZ2V0VGVhbUxlYWRlclRlYW0ocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKCh7YWN0aXZpdHksIGV4dHJhTWVtYmVycywgbWVtYmVycywgcGFydGljaXBhbnRzLCB0ZWFtfSkgPT4gW1xuICAgICAgICAgICAgcmV0cmlldmVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5LFxuICAgICAgICAgICAgICAgIGV4dHJhTWVtYmVycyxcbiAgICAgICAgICAgICAgICBleHRyYU1lbWJlcnNMb2FkZWQ6IHBheWxvYWQucmV0cmlldmVFeHRyYU1lbWJlcnMsXG4gICAgICAgICAgICAgICAgZ3Vlc3RzOiBbXSxcbiAgICAgICAgICAgICAgICBtZW1iZXJzLFxuICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50cyxcbiAgICAgICAgICAgICAgICB0ZWFtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcmV0cmlldmVUZWFtTGVhZGVyR3JvdXBTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB0ZWFtfSksXG4gICAgICAgICAgICBsaXN0VGVhbUxlYWRlckV4dHJhTWVtYmVyc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCByZXN1bHRzOiBleHRyYU1lbWJlcnN9fSksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHthY3Rpdml0eUludml0ZUlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcgfX0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFB1YmxpY0FjdGl2aXR5SW52aXRlKHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiBzdHJpbmd9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZShwYXlsb2FkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSkgPT4gcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5UVJDb2RlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIHRlYW1JZDogcGF5bG9hZC50ZWFtSWQsXG4gICAgICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIHF1ZXN0aW9uSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVF1ZXN0aW9uKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLnF1ZXN0aW9uSWQpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHlRdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbikgPT4gcmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5UXVlc3Rpb259KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5ncyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGNyZWF0ZTogYm9vbGVhbiB9IH0pID0+XG4gICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICBhY3Rpdml0eVNldHRpbmdzOiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlTZXR0aW5ncyhwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIGFjdGl2aXR5TG9jYXRpb25zOiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlMb2NhdGlvbnMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogQ29sbGVjdGlvbjxBY3Rpdml0eUxvY2F0aW9uPikgPT4gcmVzcG9uc2UudG9BcnJheSgpLm1hcCgodmFsdWU6IEFjdGl2aXR5TG9jYXRpb24pID0+ICh7XG4gICAgICAgICAgICAgICAgdGV4dDogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuaWRcbiAgICAgICAgICAgICAgfSkpKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBhY3Rpdml0eVR5cGVzOiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlUeXBlcyhwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBDb2xsZWN0aW9uPEFjdGl2aXR5VHlwZT4pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IHBheWxvYWQuY3JlYXRlID8gcmVzcG9uc2UudG9BcnJheSgpLmZpbHRlcigodHlwZTogQWN0aXZpdHlUeXBlKSA9PiB0eXBlLmFjdGl2ZSkgOiByZXNwb25zZS50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVzLm1hcCgodmFsdWU6IEFjdGl2aXR5VHlwZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIHRleHQ6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuaWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgbWFwKCh7YWN0aXZpdHlTZXR0aW5ncywgYWN0aXZpdHlMb2NhdGlvbnMsIGFjdGl2aXR5VHlwZXN9KSA9PiB7XG4gICAgICAgICAgICAvLyBBZGQgbG9jYXRpb25zIGFuZCB0eXBlcyB0byB0aGUgYWN0aXZpdHlTZXR0aW5ncyBvYmplY3RcbiAgICAgICAgICAgIGFjdGl2aXR5U2V0dGluZ3MuYWN0aXZpdHlMb2NhdGlvbnMgPSBhY3Rpdml0eUxvY2F0aW9ucztcbiAgICAgICAgICAgIGFjdGl2aXR5U2V0dGluZ3MuYWN0aXZpdHlUeXBlcyA9IGFjdGl2aXR5VHlwZXM7XG5cbiAgICAgICAgICAgIHJldHVybiByZXRyaWV2ZVRlYW1BY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlTZXR0aW5ncyBhcyBBY3Rpdml0eVNldHRpbmdzfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVRlYW1BY3Rpdml0eVNldHRpbmdzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVUZWFtRGVmYXVsdEFjdGl2aXR5U2V0dGluZ3MkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogc3RyaW5nIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eU5ldyhwYXlsb2FkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gcmV0cmlldmVUZWFtRGVmYXVsdEFjdGl2aXR5U2V0dGluZ3NTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlKHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT4ge1xuICAgICAgICAvLyBOZXcgZ3Vlc3RzIGFyZSBzZW50IGlubGluZSB3aXRoIHRoZSByZXNwb25kIHJlcXVlc3Qgc28gdGhlIGJhY2tlbmQgY2FuXG4gICAgICAgIC8vIGluY2x1ZGUgdGhlaXIgZ3Vlc3QgZmVlcyBpbiB0aGUgaW52b2ljZSBpdCBjcmVhdGVzIG9uIGFjY2VwdC4gRXhpc3RpbmdcbiAgICAgICAgLy8gZ3Vlc3RzIGFyZSByZWNvbmNpbGVkICh1cGRhdGUvZGVsZXRlKSBiZWZvcmUgcmVzcG9uZGluZywgc28gcmVtb3ZlZFxuICAgICAgICAvLyBndWVzdHMgYXJlIG5vdCBpbnZvaWNlZC5cbiAgICAgICAgY29uc3QgZXhpc3RpbmdHdWVzdHMgPSBwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmd1ZXN0cyA/PyBbXTtcbiAgICAgICAgY29uc3QgcmVjb25jaWxlJCA9IHBheWxvYWQuZ3Vlc3RzXG4gICAgICAgICAgPyByZWNvbmNpbGVNZW1iZXJHdWVzdHMocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgcGF5bG9hZC5ndWVzdHMsIGV4aXN0aW5nR3Vlc3RzLCB0aGlzLmFjdGl2aXR5U2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICAgIDogb2YobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZSQucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlTWVtYmVyQWN0aXZpdHkocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgey4uLnBheWxvYWQuYWN0aXZpdHlJbnZpdGUsIGd1ZXN0czogbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKX0pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnNpZ25VcE1lbWJlck9wZW5BY3Rpdml0eShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuY29tbWVudCwgcGF5bG9hZC5vcHRpb25hbF9mZWVzLCBwYXlsb2FkLnJlc3BvbnNlcywgbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgob3BlbkFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHVwZGF0ZU1lbWJlck9wZW5BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHt0b2tlbjogc3RyaW5nLCBhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUsIGd1ZXN0cz86IEFycmF5PEd1ZXN0SW5wdXQ+fX0pID0+IHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdHdWVzdHMgPSBwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmd1ZXN0cyA/PyBbXTtcbiAgICAgICAgY29uc3QgcmVjb25jaWxlJCA9IHBheWxvYWQuZ3Vlc3RzXG4gICAgICAgICAgPyByZWNvbmNpbGVQdWJsaWNUb2tlbkd1ZXN0cyhwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmlkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLmd1ZXN0cywgZXhpc3RpbmdHdWVzdHMsIHRoaXMuYWN0aXZpdHlTZXJ2aWNlKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSkpXG4gICAgICAgICAgOiBvZihudWxsKTtcblxuICAgICAgICByZXR1cm4gcmVjb25jaWxlJC5waXBlKFxuICAgICAgICAgIG1lcmdlTWFwKCgpID0+XG4gICAgICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZShwYXlsb2FkLmFjdGl2aXR5SW52aXRlLmlkLCBwYXlsb2FkLnRva2VuLCB7Li4ucGF5bG9hZC5hY3Rpdml0eUludml0ZSwgZ3Vlc3RzOiBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpfSlcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlLCBndWVzdHM/OiBBcnJheTxHdWVzdElucHV0Pn19KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3Vlc3RzID0gcGF5bG9hZC5hY3Rpdml0eUludml0ZS5ndWVzdHMgPz8gW107XG4gICAgICAgIGNvbnN0IHJlY29uY2lsZSQgPSBwYXlsb2FkLmd1ZXN0c1xuICAgICAgICAgID8gcmVjb25jaWxlUHVibGljVG9rZW5HdWVzdHMocGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZS50b2tlbiwgcGF5bG9hZC5ndWVzdHMsIGV4aXN0aW5nR3Vlc3RzLCB0aGlzLmFjdGl2aXR5U2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICAgIDogb2YobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZSQucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgey4uLnBheWxvYWQuYWN0aXZpdHlJbnZpdGUsIGd1ZXN0czogbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKX0pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVB1YmxpY01lbWJlck9wZW5BY3Rpdml0eSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVB1YmxpY01lbWJlck9wZW5BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7YWN0aXZpdHlJZDogc3RyaW5nLCBjb21tZW50OiBzdHJpbmcsIG9wdGlvbmFsX2ZlZXM6IEFycmF5PHN0cmluZz4sIHJlc3BvbnNlczogQXJyYXk8QWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlPiwgZ3Vlc3RzPzogQXJyYXk8R3Vlc3RJbnB1dD59fSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uuc2lnblVwUHVibGljT3BlbkFjdGl2aXR5KHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5jb21tZW50LCBwYXlsb2FkLm9wdGlvbmFsX2ZlZXMsIHBheWxvYWQucmVzcG9uc2VzLCBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcGVuQWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogb3BlbkFjdGl2aXR5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eSA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbUFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5OiBBY3Rpdml0eSB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IEFjdGl2aXR5KSA9PiB1cGRhdGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgbWVtYmVySWRzOiBBcnJheTxzdHJpbmc+IH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlVGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQubWVtYmVySWRzKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VTdWNjZXNzQWN0aW9uKCkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGUgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICB0ZWFtSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIG1lbWJlckFjdGl2aXR5SW52aXRlOiBNZW1iZXJBY3Rpdml0eUludml0ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlVGVhbUFjdGl2aXR5SW52aXRlKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC5tZW1iZXJBY3Rpdml0eUludml0ZSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgobWVtYmVyQWN0aXZpdHlJbnZpdGU6IE1lbWJlckFjdGl2aXR5SW52aXRlKSA9PiB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBtZW1iZXJBY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSA6IHtwYXlsb2FkOiB7dGVhbUlkOiBzdHJpbmcsIHF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9ufX0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLnF1ZXN0aW9uKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlRdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbikgPT4gdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eVF1ZXN0aW9ufSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG4vLyBOZXcgZ3Vlc3RzIChubyBpZCB5ZXQpIGFyZSBzZW50IGlubGluZSB3aXRoIHRoZSByZXNwb25kIHJlcXVlc3QsIHNvIHRoZVxuLy8gYmFja2VuZCBjcmVhdGVzIHRoZW0gYmVmb3JlIHRoZSBpbnZvaWNlIGFuZCBpbmNsdWRlcyB0aGVpciBndWVzdCBmZWVzLlxuZnVuY3Rpb24gbmV3R3Vlc3RzKGd1ZXN0czogQXJyYXk8R3Vlc3RJbnB1dD4gfCB1bmRlZmluZWQpOiBBcnJheTx7IG5hbWU6IHN0cmluZywgY29tbWVudD86IHN0cmluZyB9PiB7XG4gIHJldHVybiAoZ3Vlc3RzID8/IFtdKS5maWx0ZXIoZyA9PiAhZy5pZCkubWFwKGcgPT4gKHsgbmFtZTogZy5uYW1lLCBjb21tZW50OiBnLmNvbW1lbnQgPz8gdW5kZWZpbmVkIH0pKTtcbn1cblxuLy8gVXBkYXRlcyBhbmQgZGVsZXRlcyBvZiBleGlzdGluZyBndWVzdHMgc3RpbGwgdXNlIHRoZSBkZWRpY2F0ZWQgZ3Vlc3Rcbi8vIGVuZHBvaW50czsgbmV3IGd1ZXN0cyBhcmUgc2VudCBpbmxpbmUgd2l0aCB0aGUgcmVzcG9uZCByZXF1ZXN0IGluc3RlYWQuXG5mdW5jdGlvbiByZWNvbmNpbGVNZW1iZXJHdWVzdHMoXG4gIG1lbWJlcklkOiBzdHJpbmcsXG4gIGludml0ZUlkOiBzdHJpbmcsXG4gIGRlc2lyZWRHdWVzdHM6IEFycmF5PEd1ZXN0SW5wdXQ+LFxuICBleGlzdGluZ0d1ZXN0czogQXJyYXk8R3Vlc3Q+LFxuICBhY3Rpdml0eVNlcnZpY2U6IEFjdGl2aXR5U2VydmljZVxuKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gIGNvbnN0IGV4aXN0aW5nQnlJZCA9IG5ldyBNYXAoZXhpc3RpbmdHdWVzdHMubWFwKGcgPT4gW2cuaWQsIGddKSk7XG4gIGNvbnN0IGRlc2lyZWRJZHMgPSBuZXcgU2V0KGRlc2lyZWRHdWVzdHMuZmlsdGVyKGcgPT4gZy5pZCkubWFwKGcgPT4gZy5pZCEpKTtcblxuICBjb25zdCB0b0RlbGV0ZSA9IGV4aXN0aW5nR3Vlc3RzLmZpbHRlcihnID0+ICFkZXNpcmVkSWRzLmhhcyhnLmlkKSk7XG4gIGNvbnN0IHRvVXBkYXRlID0gZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiB7XG4gICAgaWYgKCFnLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ0J5SWQuZ2V0KGcuaWQpO1xuICAgIHJldHVybiBleGlzdGluZyAmJiAoZXhpc3RpbmcubmFtZSAhPT0gZy5uYW1lIHx8IGV4aXN0aW5nLmNvbW1lbnQgIT09IGcuY29tbWVudCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9wczogQXJyYXk8T2JzZXJ2YWJsZTx1bmtub3duPj4gPSBbXG4gICAgLi4udG9EZWxldGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZU1lbWJlckFjdGl2aXR5R3Vlc3QobWVtYmVySWQsIGludml0ZUlkLCBnLmlkKSksXG4gICAgLi4udG9VcGRhdGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZU1lbWJlckFjdGl2aXR5R3Vlc3QobWVtYmVySWQsIGludml0ZUlkLCBnLmlkISwgeyBuYW1lOiBnLm5hbWUsIGNvbW1lbnQ6IGcuY29tbWVudCA/PyB1bmRlZmluZWQgfSkpLFxuICBdO1xuXG4gIHJldHVybiBvcHMubGVuZ3RoID4gMCA/IGZvcmtKb2luKG9wcykgOiBvZihudWxsKTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlUHVibGljVG9rZW5HdWVzdHMoXG4gIGlkOiBzdHJpbmcsXG4gIHRva2VuOiBzdHJpbmcsXG4gIGRlc2lyZWRHdWVzdHM6IEFycmF5PEd1ZXN0SW5wdXQ+LFxuICBleGlzdGluZ0d1ZXN0czogQXJyYXk8R3Vlc3Q+LFxuICBhY3Rpdml0eVNlcnZpY2U6IEFjdGl2aXR5U2VydmljZVxuKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gIGNvbnN0IGV4aXN0aW5nQnlJZCA9IG5ldyBNYXAoZXhpc3RpbmdHdWVzdHMubWFwKGcgPT4gW2cuaWQsIGddKSk7XG4gIGNvbnN0IGRlc2lyZWRJZHMgPSBuZXcgU2V0KGRlc2lyZWRHdWVzdHMuZmlsdGVyKGcgPT4gZy5pZCkubWFwKGcgPT4gZy5pZCEpKTtcblxuICBjb25zdCB0b0RlbGV0ZSA9IGV4aXN0aW5nR3Vlc3RzLmZpbHRlcihnID0+ICFkZXNpcmVkSWRzLmhhcyhnLmlkKSk7XG4gIGNvbnN0IHRvVXBkYXRlID0gZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiB7XG4gICAgaWYgKCFnLmlkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBleGlzdGluZ0J5SWQuZ2V0KGcuaWQpO1xuICAgIHJldHVybiBleGlzdGluZyAmJiAoZXhpc3RpbmcubmFtZSAhPT0gZy5uYW1lIHx8IGV4aXN0aW5nLmNvbW1lbnQgIT09IGcuY29tbWVudCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9wczogQXJyYXk8T2JzZXJ2YWJsZTx1bmtub3duPj4gPSBbXG4gICAgLi4udG9EZWxldGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkLCB0b2tlbiwgZy5pZCkpLFxuICAgIC4uLnRvVXBkYXRlLm1hcChnID0+IGFjdGl2aXR5U2VydmljZS51cGRhdGVQdWJsaWNBY3Rpdml0eUd1ZXN0QnlUb2tlbihpZCwgdG9rZW4sIGcuaWQhLCB7IG5hbWU6IGcubmFtZSwgY29tbWVudDogZy5jb21tZW50ID8/IHVuZGVmaW5lZCB9KSksXG4gIF07XG5cbiAgcmV0dXJuIG9wcy5sZW5ndGggPiAwID8gZm9ya0pvaW4ob3BzKSA6IG9mKG51bGwpO1xufVxuIl19
429
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHkuZWZmZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RhdGEtYWNjZXNzL3NyYy9saWIvc3RvcmUvZWZmZWN0cy9hY3Rpdml0eS5lZmZlY3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUNMLGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsd0NBQXdDLEVBQ3hDLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLHFDQUFxQyxFQUNyQyxxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLHVDQUF1QyxFQUN2Qyx1Q0FBdUMsRUFDdkMsK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1QixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLDBCQUEwQixFQUMxQixpQ0FBaUMsRUFDakMsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLDZCQUE2QixFQUM3QixvQ0FBb0MsRUFDcEMsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyx5Q0FBeUMsRUFDekMseUNBQXlDLEVBQ3pDLCtCQUErQixFQUMvQixzQ0FBc0MsRUFDdEMsc0NBQXNDLEVBQ3RDLHVDQUF1QyxFQUN2Qyw4QkFBOEIsRUFDOUIscUNBQXFDLEVBQ3JDLHFDQUFxQyxF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LE9BQU8sS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLEdBQUcsR0FBK0I7UUFDdEMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLGdDQUFnQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQzVJLENBQUM7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgQWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgY3JlYXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5QWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24sXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0FjdGlvbixcbiAgbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzRmFpbHVyZUFjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eUd1ZXN0c1N1Y2Nlc3NBY3Rpb24sXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0QWN0aW9uLFxuICBhZGRUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24sXG4gIGFkZFRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3RTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbixcbiAgZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3RGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNGYWlsdXJlQWN0aW9uLFxuICBsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzU3VjY2Vzc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0FjdGlvbixcbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0ZhaWx1cmVBY3Rpb24sXG4gIGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNTdWNjZXNzQWN0aW9uLFxuICBsaXN0VGVhbUxlYWRlckV4dHJhTWVtYmVyc1N1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmVzZW5kVGVhbUFjdGl2aXR5TWVtYmVySW52aXRlQWN0aW9uLFxuICByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICByZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlckFjdGl2aXR5U3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5QWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZUFjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlRUkNvZGVGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3NTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzQWN0aW9uLFxuICByZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbixcbiAgcmV0cmlldmVUZWFtTGVhZGVyR3JvdXBTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZVN1Y2Nlc3NBY3Rpb24sXG4gIHJlbW92ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlUHVibGljQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uLFxuICByZW1vdmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbixcbiAgdXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VBY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25BY3Rpb24sXG4gIHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uLFxuICB1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGpvaW5XYWl0aW5nTGlzdEFjdGlvbixcbiAgam9pbldhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbixcbiAgam9pbldhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgbGVhdmVXYWl0aW5nTGlzdEFjdGlvbixcbiAgbGVhdmVXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGxlYXZlV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24sXG4gIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbixcbiAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbixcbiAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgYWRtaXRXYWl0bGlzdEVudHJ5QWN0aW9uLFxuICBhZG1pdFdhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICBhZG1pdFdhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICByZW9yZGVyV2FpdGxpc3RFbnRyeUFjdGlvbixcbiAgcmVvcmRlcldhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICByZW9yZGVyV2FpdGxpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24sXG4gIHJlbWluZFdhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIHJlbWluZFdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICByZW1pbmRXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbixcbiAgb2ZmZXJXYWl0bGlzdEVudHJ5QWN0aW9uLFxuICBvZmZlcldhaXRsaXN0RW50cnlGYWlsdXJlQWN0aW9uLFxuICBvZmZlcldhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICBwYXNzV2FpdGxpc3RPZmZlckFjdGlvbixcbiAgcGFzc1dhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICBwYXNzV2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24sXG4gIG9wZW5XYWl0bGlzdFBsYWNlQWN0aW9uLFxuICBvcGVuV2FpdGxpc3RQbGFjZUZhaWx1cmVBY3Rpb24sXG4gIG9wZW5XYWl0bGlzdFBsYWNlU3VjY2Vzc0FjdGlvbixcbiAgcmVtb3ZlV2FpdGxpc3RFbnRyeUFjdGlvbixcbiAgcmVtb3ZlV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24sXG4gIHJlbW92ZVdhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZUZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZVN1Y2Nlc3NBY3Rpb24sXG4gIGpvaW5QdWJsaWNXYWl0aW5nTGlzdEFjdGlvbixcbiAgam9pblB1YmxpY1dhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbixcbiAgam9pblB1YmxpY1dhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbixcbiAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdEFjdGlvbixcbiAgbGVhdmVQdWJsaWNXYWl0aW5nTGlzdEZhaWx1cmVBY3Rpb24sXG4gIGxlYXZlUHVibGljV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0T2ZmZXJBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlckZhaWx1cmVBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlclN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbixcbiAgcmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24sXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbixcbiAgcmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uLFxuICBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckFjdGlvbixcbiAgZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uLFxuICBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb25cbn0gZnJvbSAnLi4vYWN0aW9ucyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmb3JrSm9pbiwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gIEFjdGl2aXR5LFxuICBBY3Rpdml0eUV4dHJhTWVtYmVyLFxuICBBY3Rpdml0eUludml0ZSxcbiAgQWN0aXZpdHlMb2NhdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvbixcbiAgQWN0aXZpdHlRdWVzdGlvblJlc3BvbnNlLFxuICBBY3Rpdml0eVNldHRpbmdzLFxuICBBY3Rpdml0eVR5cGUsXG4gIEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSxcbiAgQ29sbGVjdGlvbixcbiAgR3Vlc3QsXG4gIE1lbWJlckFjdGl2aXR5SW52aXRlLFxuICBPcGVuQWN0aXZpdHksXG4gIFNlYXJjaE1lbWJlcixcbn0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEd1ZXN0SW5wdXQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEV4dHJhTWVtYmVyc01peGluIH0gZnJvbSAnLi9taXhpbnMvZXh0cmEtbWVtYmVycy1taXhpbic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBY3Rpdml0eUVmZmVjdHMgZXh0ZW5kcyBFeHRyYU1lbWJlcnNNaXhpbiB7XG4gIHByaXZhdGUgYWN0aW9ucyQgPSBpbmplY3QoQWN0aW9ucyk7XG4gIHByaXZhdGUgYWN0aXZpdHlTZXJ2aWNlID0gaW5qZWN0KEFjdGl2aXR5U2VydmljZSk7XG5cbiAgYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgbWVtYmVySWRzOiBBcnJheTxzdHJpbmc+IH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuYWRkVGVhbUFjdGl2aXR5SW52aXRlcyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLm1lbWJlcklkcylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhZGRUZWFtTGVhZGVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRlYW1MZWFkZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoYWRkVGVhbUxlYWRlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVUZWFtQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShjcmVhdGVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHk6IEFjdGl2aXR5IH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuY3JlYXRlVGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gW2NyZWF0ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5fSksIHJldHJpZXZlVGVhbUFjdGl2aXR5QWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIHRlYW1JZDogcGF5bG9hZC50ZWFtSWQsXG4gICAgICAgICAgICAgICAgYWN0aXZpdHlJZDogYWN0aXZpdHkuaWQsXG4gICAgICAgICAgICAgICAgcmV0cmlldmVFeHRyYU1lbWJlcnM6IHRydWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSldKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoY3JlYXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBjcmVhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIHF1ZXN0aW9uOiBBY3Rpdml0eVF1ZXN0aW9uIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24ocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQucXVlc3Rpb24pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgocXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pID0+IFtcbiAgICAgICAgICAgICAgY3JlYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBxdWVzdGlvbn0pLFxuICAgICAgICAgICAgICBsaXN0VGVhbUFjdGl2aXR5UXVlc3Rpb25zQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGNyZWF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShkZWxldGVUZWFtQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVsZXRlVGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBwYXlsb2FkLmFjdGl2aXR5SWR9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlVGVhbUFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1BY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlVGVhbUFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbiQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSA6IHtwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbklkOiBzdHJpbmcgfSB9ICkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVsZXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24ocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQucXVlc3Rpb25JZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvblN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHsuLi5wYXlsb2FkfX0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzQWN0aW9uKSxcbiAgICAgIG1lcmdlTWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogQXJyYXk8c3RyaW5nPiB9KSA9PlxuICAgICAgICBmb3JrSm9pbihcbiAgICAgICAgICBwYXlsb2FkLm1hcCgoaWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlckFjdGl2aXR5SW52aXRlcyhpZClcbiAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih7ZXJyb3J9KSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlOiBBcnJheTxBY3Rpdml0eUludml0ZT4gPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NSZXN1bHRzID0gcmVzdWx0cy5maWx0ZXIocmVzdWx0ID0+ICEocmVzdWx0IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpKSBhcyBBcnJheTxDb2xsZWN0aW9uPEFjdGl2aXR5SW52aXRlPj47XG4gICAgICAgICAgICBjb25zdCBlcnJvclJlc3VsdHMgPSByZXN1bHRzLmZpbHRlcihyZXN1bHQgPT4gcmVzdWx0IGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIGFzIEFycmF5PEh0dHBFcnJvclJlc3BvbnNlPjtcblxuICAgICAgICAgICAgaWYgKGVycm9yUmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpc3RNZW1iZXJBY3Rpdml0eUludml0ZXNGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvclJlc3VsdHNbMF19KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1Y2Nlc3NSZXN1bHRzLmZvckVhY2gocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHVzaCguLi5yZXN1bHQudG9BcnJheSgpKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gbGlzdE1lbWJlckFjdGl2aXR5SW52aXRlc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHJldHVyblZhbHVlfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiBvZihsaXN0TWVtYmVyQWN0aXZpdHlJbnZpdGVzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdFRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5UGFydGljaXBhbnRzOiBDb2xsZWN0aW9uPFNlYXJjaE1lbWJlcj4pID0+IGxpc3RUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHNTdWNjZXNzQWN0aW9uKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCxcbiAgICAgICAgICAgICAgICByZXN1bHRzOiBhY3Rpdml0eVBhcnRpY2lwYW50cy50b0FycmF5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihsaXN0VGVhbUFjdGl2aXR5UGFydGljaXBhbnRzRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGlzdFRlYW1BY3Rpdml0eUd1ZXN0c0FjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eUd1ZXN0cyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChndWVzdHM6IENvbGxlY3Rpb248R3Vlc3Q+KSA9PiBsaXN0VGVhbUFjdGl2aXR5R3Vlc3RzU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCByZXN1bHRzOiBndWVzdHMudG9BcnJheSgpIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFRlYW1BY3Rpdml0eUd1ZXN0c0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgYWRkVGVhbUFjdGl2aXR5R3Vlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShhZGRUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmFkZFRlYW1BY3Rpdml0eUd1ZXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHsgbmFtZTogcGF5bG9hZC5uYW1lLCBjb21tZW50OiBwYXlsb2FkLmNvbW1lbnQgfSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZ3Vlc3Q6IEd1ZXN0KSA9PiBhZGRUZWFtQWN0aXZpdHlHdWVzdFN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZCwgZ3Vlc3QgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihhZGRUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5R3Vlc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtQWN0aXZpdHlHdWVzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZ3Vlc3RJZCwgeyBuYW1lOiBwYXlsb2FkLm5hbWUsIGNvbW1lbnQ6IHBheWxvYWQuY29tbWVudCB9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChndWVzdDogR3Vlc3QpID0+IHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCBndWVzdCB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1BY3Rpdml0eUd1ZXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBkZWxldGVUZWFtQWN0aXZpdHlHdWVzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuZGVsZXRlVGVhbUFjdGl2aXR5R3Vlc3QocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5ndWVzdElkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IGRlbGV0ZVRlYW1BY3Rpdml0eUd1ZXN0U3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCBndWVzdElkOiBwYXlsb2FkLmd1ZXN0SWQgfVxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVUZWFtQWN0aXZpdHlHdWVzdEZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9ucyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxpc3RUZWFtQWN0aXZpdHlRdWVzdGlvbnNBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVF1ZXN0aW9ucyhwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eVF1ZXN0aW9uczogQ29sbGVjdGlvbjxBY3Rpdml0eVF1ZXN0aW9uPikgPT4gbGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCByZXN1bHRzOiBhY3Rpdml0eVF1ZXN0aW9ucy50b0FycmF5KCl9fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFRlYW1BY3Rpdml0eVF1ZXN0aW9uc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBlcnJvcn19KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UucmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW1vdmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbW92ZU1lbWJlck9wZW5BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVtb3ZlTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXNlbmRUZWFtQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5yZXNlbmRJbnZpdGUocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJlc2VuZFRlYW1BY3Rpdml0eU1lbWJlckludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXNlbmRUZWFtQWN0aXZpdHlNZW1iZXJJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZU1lbWJlckFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0TWVtYmVyQWN0aXZpdHkocGF5bG9hZC5tZW1iZXJJZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlTWVtYmVyQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJBY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDogeyBtZW1iZXJJZDogc3RyaW5nLCBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRNZW1iZXJBY3Rpdml0eUludml0ZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSkgPT4gcmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5SW52aXRlfSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZU1lbWJlck9wZW5BY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgbWVtYmVySWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nIH1cbiAgICAgICAgfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0TWVtYmVyT3BlbkFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoYWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gcmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyUHVibGljQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY01lbWJlckFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge3BheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNNZW1iZXJBY3Rpdml0eShwYXlsb2FkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5fSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5ID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogeyB0ZWFtSWQ6IHN0cmluZywgYWN0aXZpdHlJZDogc3RyaW5nLCByZXRyaWV2ZUV4dHJhTWVtYmVyczogYm9vbGVhbiB9IH0pID0+XG4gICAgICAgIGZvcmtKb2luKHtcbiAgICAgICAgICBhY3Rpdml0eTogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBleHRyYU1lbWJlcnM6IHBheWxvYWQucmV0cmlldmVFeHRyYU1lbWJlcnMgPyB0aGlzLnRlYW1MZWFkZXJHZXRBbGxFeHRyYU1lbWJlcnMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICkgOiBvZihuZXcgQXJyYXk8QWN0aXZpdHlFeHRyYU1lbWJlcj4oKSksXG4gICAgICAgICAgbWVtYmVyczogdGhpcy50ZWFtTGVhZGVyR2V0QWxsTWVtYmVycyhwYXlsb2FkLnRlYW1JZCksXG4gICAgICAgICAgcGFydGljaXBhbnRzOiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlQYXJ0aWNpcGFudHMocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBDb2xsZWN0aW9uPFNlYXJjaE1lbWJlcj4pID0+IHJlc3BvbnNlLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdGVhbTogdGhpcy50ZWFtU2VydmljZS5nZXRUZWFtTGVhZGVyVGVhbShwYXlsb2FkLnRlYW1JZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICB0YWtlKDEpXG4gICAgICAgICAgICApXG4gICAgICAgIH0pLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKHthY3Rpdml0eSwgZXh0cmFNZW1iZXJzLCBtZW1iZXJzLCBwYXJ0aWNpcGFudHMsIHRlYW19KSA9PiBbXG4gICAgICAgICAgICByZXRyaWV2ZVRlYW1BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe1xuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgYWN0aXZpdHksXG4gICAgICAgICAgICAgICAgZXh0cmFNZW1iZXJzLFxuICAgICAgICAgICAgICAgIGV4dHJhTWVtYmVyc0xvYWRlZDogcGF5bG9hZC5yZXRyaWV2ZUV4dHJhTWVtYmVycyxcbiAgICAgICAgICAgICAgICBndWVzdHM6IFtdLFxuICAgICAgICAgICAgICAgIG1lbWJlcnMsXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRzLFxuICAgICAgICAgICAgICAgIHRlYW0sXG4gICAgICAgICAgICAgICAgd2FpdGluZ0xpc3Q6IFtdLFxuICAgICAgICAgICAgICAgIHdhaXRsaXN0T3V0c3RhbmRpbmdPZmZlcjogbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHJldHJpZXZlVGVhbUxlYWRlckdyb3VwU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogdGVhbX0pLFxuICAgICAgICAgICAgbGlzdFRlYW1MZWFkZXJFeHRyYU1lbWJlcnNTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgcmVzdWx0czogZXh0cmFNZW1iZXJzfX0pLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGVJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nIH19KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNBY3Rpdml0eUludml0ZShwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHBheWxvYWQudG9rZW4pXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlKSA9PiByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDogc3RyaW5nfSkgPT4gdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eUludml0ZTogQWN0aXZpdHlJbnZpdGUpID0+IHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pKSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVFSQ29kZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfToge1xuICAgICAgICAgIHBheWxvYWQ6IHsgdGVhbUlkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVFSQ29kZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlU3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgICAgICB0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLFxuICAgICAgICAgICAgICAgIGFjdGl2aXR5OiBhY3Rpdml0eVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlVGVhbUFjdGl2aXR5UVJDb2RlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBxdWVzdGlvbklkOiBzdHJpbmcgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlRdWVzdGlvbihwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5xdWVzdGlvbklkKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKGFjdGl2aXR5UXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pID0+IHJldHJpZXZlVGVhbUFjdGl2aXR5UXVlc3Rpb25TdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eVF1ZXN0aW9ufSkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlRdWVzdGlvbkZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbUFjdGl2aXR5U2V0dGluZ3MkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVRlYW1BY3Rpdml0eVNldHRpbmdzQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBjcmVhdGU6IGJvb2xlYW4gfSB9KSA9PlxuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgYWN0aXZpdHlTZXR0aW5nczogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5U2V0dGluZ3MocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBhY3Rpdml0eUxvY2F0aW9uczogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5TG9jYXRpb25zKHBheWxvYWQudGVhbUlkKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IENvbGxlY3Rpb248QWN0aXZpdHlMb2NhdGlvbj4pID0+IHJlc3BvbnNlLnRvQXJyYXkoKS5tYXAoKHZhbHVlOiBBY3Rpdml0eUxvY2F0aW9uKSA9PiAoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmlkXG4gICAgICAgICAgICAgIH0pKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgYWN0aXZpdHlUeXBlczogdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0VGVhbUFjdGl2aXR5VHlwZXMocGF5bG9hZC50ZWFtSWQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgbWFwKChyZXNwb25zZTogQ29sbGVjdGlvbjxBY3Rpdml0eVR5cGU+KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZXMgPSBwYXlsb2FkLmNyZWF0ZSA/IHJlc3BvbnNlLnRvQXJyYXkoKS5maWx0ZXIoKHR5cGU6IEFjdGl2aXR5VHlwZSkgPT4gdHlwZS5hY3RpdmUpIDogcmVzcG9uc2UudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlcy5tYXAoKHZhbHVlOiBBY3Rpdml0eVR5cGUpID0+ICh7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLmlkXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgIG1hcCgoe2FjdGl2aXR5U2V0dGluZ3MsIGFjdGl2aXR5TG9jYXRpb25zLCBhY3Rpdml0eVR5cGVzfSkgPT4ge1xuICAgICAgICAgICAgLy8gQWRkIGxvY2F0aW9ucyBhbmQgdHlwZXMgdG8gdGhlIGFjdGl2aXR5U2V0dGluZ3Mgb2JqZWN0XG4gICAgICAgICAgICBhY3Rpdml0eVNldHRpbmdzLmFjdGl2aXR5TG9jYXRpb25zID0gYWN0aXZpdHlMb2NhdGlvbnM7XG4gICAgICAgICAgICBhY3Rpdml0eVNldHRpbmdzLmFjdGl2aXR5VHlwZXMgPSBhY3Rpdml0eVR5cGVzO1xuXG4gICAgICAgICAgICByZXR1cm4gcmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFjdGl2aXR5U2V0dGluZ3MgYXMgQWN0aXZpdHlTZXR0aW5nc30pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmVUZWFtQWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVUZWFtRGVmYXVsdEFjdGl2aXR5U2V0dGluZ3NBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRUZWFtQWN0aXZpdHlOZXcocGF5bG9hZClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChhY3Rpdml0eTogQWN0aXZpdHkpID0+IHJldHJpZXZlVGVhbURlZmF1bHRBY3Rpdml0eVNldHRpbmdzU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVRlYW1EZWZhdWx0QWN0aXZpdHlTZXR0aW5nc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZyB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlTWVtYmVyQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVNZW1iZXJBY3Rpdml0eUF0dGVuZGFuY2VGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZU1lbWJlckFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+IHtcbiAgICAgICAgLy8gTmV3IGd1ZXN0cyBhcmUgc2VudCBpbmxpbmUgd2l0aCB0aGUgcmVzcG9uZCByZXF1ZXN0IHNvIHRoZSBiYWNrZW5kIGNhblxuICAgICAgICAvLyBpbmNsdWRlIHRoZWlyIGd1ZXN0IGZlZXMgaW4gdGhlIGludm9pY2UgaXQgY3JlYXRlcyBvbiBhY2NlcHQuIEV4aXN0aW5nXG4gICAgICAgIC8vIGd1ZXN0cyBhcmUgcmVjb25jaWxlZCAodXBkYXRlL2RlbGV0ZSkgYmVmb3JlIHJlc3BvbmRpbmcsIHNvIHJlbW92ZWRcbiAgICAgICAgLy8gZ3Vlc3RzIGFyZSBub3QgaW52b2ljZWQuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3Vlc3RzID0gcGF5bG9hZC5hY3Rpdml0eUludml0ZS5ndWVzdHMgPz8gW107XG4gICAgICAgIGNvbnN0IHJlY29uY2lsZSQgPSBwYXlsb2FkLmd1ZXN0c1xuICAgICAgICAgID8gcmVjb25jaWxlTWVtYmVyR3Vlc3RzKHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQuZ3Vlc3RzLCBleGlzdGluZ0d1ZXN0cywgdGhpcy5hY3Rpdml0eVNlcnZpY2UpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgICA6IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiByZWNvbmNpbGUkLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZU1lbWJlckFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHsuLi5wYXlsb2FkLmFjdGl2aXR5SW52aXRlLCBndWVzdHM6IG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cyl9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSB8IG51bGwpID0+IGFjdGl2aXR5SW52aXRlXG4gICAgICAgICAgICAgICAgICA/IHVwZGF0ZU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KVxuICAgICAgICAgICAgICAgICAgOiByZW1vdmVNZW1iZXJBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZTogcGF5bG9hZC5hY3Rpdml0eUludml0ZX19KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVNZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uuc2lnblVwTWVtYmVyT3BlbkFjdGl2aXR5KHBheWxvYWQubWVtYmVySWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5jb21tZW50LCBwYXlsb2FkLm9wdGlvbmFsX2ZlZXMsIHBheWxvYWQucmVzcG9uc2VzLCBuZXdHdWVzdHMocGF5bG9hZC5ndWVzdHMpKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcGVuQWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gdXBkYXRlTWVtYmVyT3BlbkFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogb3BlbkFjdGl2aXR5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVNZW1iZXJPcGVuQWN0aXZpdHlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlUHVibGljQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge3Rva2VuOiBzdHJpbmcsIGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSwgZ3Vlc3RzPzogQXJyYXk8R3Vlc3RJbnB1dD59fSkgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZ0d1ZXN0cyA9IHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuZ3Vlc3RzID8/IFtdO1xuICAgICAgICBjb25zdCByZWNvbmNpbGUkID0gcGF5bG9hZC5ndWVzdHNcbiAgICAgICAgICA/IHJlY29uY2lsZVB1YmxpY1Rva2VuR3Vlc3RzKHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQudG9rZW4sIHBheWxvYWQuZ3Vlc3RzLCBleGlzdGluZ0d1ZXN0cywgdGhpcy5hY3Rpdml0eVNlcnZpY2UpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKSlcbiAgICAgICAgICA6IG9mKG51bGwpO1xuXG4gICAgICAgIHJldHVybiByZWNvbmNpbGUkLnBpcGUoXG4gICAgICAgICAgbWVyZ2VNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlKHBheWxvYWQuYWN0aXZpdHlJbnZpdGUuaWQsIHBheWxvYWQudG9rZW4sIHsuLi5wYXlsb2FkLmFjdGl2aXR5SW52aXRlLCBndWVzdHM6IG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cyl9KVxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGFjdGl2aXR5SW52aXRlOiBBY3Rpdml0eUludml0ZSB8IG51bGwpID0+IGFjdGl2aXR5SW52aXRlXG4gICAgICAgICAgICAgICAgICA/IHVwZGF0ZVB1YmxpY0FjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlJbnZpdGV9KVxuICAgICAgICAgICAgICAgICAgOiByZW1vdmVQdWJsaWNBY3Rpdml0eUludml0ZVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZTogcGF5bG9hZC5hY3Rpdml0eUludml0ZX19KSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVQdWJsaWNBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVQdWJsaWNNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlLCBndWVzdHM/OiBBcnJheTxHdWVzdElucHV0Pn19KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3Vlc3RzID0gcGF5bG9hZC5hY3Rpdml0eUludml0ZS5ndWVzdHMgPz8gW107XG4gICAgICAgIGNvbnN0IHJlY29uY2lsZSQgPSBwYXlsb2FkLmd1ZXN0c1xuICAgICAgICAgID8gcmVjb25jaWxlUHVibGljVG9rZW5HdWVzdHMocGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgcGF5bG9hZC5hY3Rpdml0eUludml0ZS50b2tlbiwgcGF5bG9hZC5ndWVzdHMsIGV4aXN0aW5nR3Vlc3RzLCB0aGlzLmFjdGl2aXR5U2VydmljZSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpKVxuICAgICAgICAgIDogb2YobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlY29uY2lsZSQucGlwZShcbiAgICAgICAgICBtZXJnZU1hcCgoKSA9PlxuICAgICAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UudXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGUocGF5bG9hZC5hY3Rpdml0eUludml0ZS5pZCwgey4uLnBheWxvYWQuYWN0aXZpdHlJbnZpdGUsIGd1ZXN0czogbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKX0pXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoYWN0aXZpdHlJbnZpdGU6IEFjdGl2aXR5SW52aXRlIHwgbnVsbCkgPT4gYWN0aXZpdHlJbnZpdGVcbiAgICAgICAgICAgICAgICAgID8gdXBkYXRlUHVibGljTWVtYmVyQWN0aXZpdHlJbnZpdGVTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBhY3Rpdml0eUludml0ZX0pXG4gICAgICAgICAgICAgICAgICA6IHJlbW92ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDoge2FjdGl2aXR5SW52aXRlOiBwYXlsb2FkLmFjdGl2aXR5SW52aXRlfX0pKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVB1YmxpY01lbWJlckFjdGl2aXR5SW52aXRlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVQdWJsaWNNZW1iZXJPcGVuQWN0aXZpdHlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7cGF5bG9hZDoge2FjdGl2aXR5SWQ6IHN0cmluZywgY29tbWVudDogc3RyaW5nLCBvcHRpb25hbF9mZWVzOiBBcnJheTxzdHJpbmc+LCByZXNwb25zZXM6IEFycmF5PEFjdGl2aXR5UXVlc3Rpb25SZXNwb25zZT4sIGd1ZXN0cz86IEFycmF5PEd1ZXN0SW5wdXQ+fX0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnNpZ25VcFB1YmxpY09wZW5BY3Rpdml0eShwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuY29tbWVudCwgcGF5bG9hZC5vcHRpb25hbF9mZWVzLCBwYXlsb2FkLnJlc3BvbnNlcywgbmV3R3Vlc3RzKHBheWxvYWQuZ3Vlc3RzKSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgob3BlbkFjdGl2aXR5OiBPcGVuQWN0aXZpdHkpID0+IHVwZGF0ZVB1YmxpY01lbWJlck9wZW5BY3Rpdml0eVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlUHVibGljTWVtYmVyT3BlbkFjdGl2aXR5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICB1cGRhdGVUZWFtQWN0aXZpdHkgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHVwZGF0ZVRlYW1BY3Rpdml0eUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eTogQWN0aXZpdHkgfVxuICAgICAgICB9KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5OiBBY3Rpdml0eSkgPT4gdXBkYXRlVGVhbUFjdGl2aXR5U3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1BY3Rpdml0eUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZSA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUodXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgICAgICBwYXlsb2FkOiB7IHRlYW1JZDogc3RyaW5nLCBhY3Rpdml0eUlkOiBzdHJpbmcsIG1lbWJlcklkczogQXJyYXk8c3RyaW5nPiB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eVBhcnRpY2lwYW50cyhwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLm1lbWJlcklkcylcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiB1cGRhdGVUZWFtQWN0aXZpdHlBdHRlbmRhbmNlU3VjY2Vzc0FjdGlvbigpKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlVGVhbUFjdGl2aXR5QXR0ZW5kYW5jZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtTWVtYmVyQWN0aXZpdHlJbnZpdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgdGVhbUlkOiBzdHJpbmcsXG4gICAgICAgICAgICBhY3Rpdml0eUlkOiBzdHJpbmcsXG4gICAgICAgICAgICBhY3Rpdml0eUludml0ZUlkOiBzdHJpbmcsXG4gICAgICAgICAgICBtZW1iZXJBY3Rpdml0eUludml0ZTogTWVtYmVyQWN0aXZpdHlJbnZpdGVcbiAgICAgICAgICB9XG4gICAgICAgIH0pID0+IHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVRlYW1BY3Rpdml0eUludml0ZShwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5hY3Rpdml0eUlkLCBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHBheWxvYWQubWVtYmVyQWN0aXZpdHlJbnZpdGUpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG1lbWJlckFjdGl2aXR5SW52aXRlOiBNZW1iZXJBY3Rpdml0eUludml0ZSkgPT4gdXBkYXRlVGVhbU1lbWJlckFjdGl2aXR5SW52aXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogbWVtYmVyQWN0aXZpdHlJbnZpdGV9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZVRlYW1NZW1iZXJBY3Rpdml0eUludml0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgdXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb24kID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZSh1cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbkFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0gOiB7cGF5bG9hZDoge3RlYW1JZDogc3RyaW5nLCBxdWVzdGlvbjogQWN0aXZpdHlRdWVzdGlvbn19KSA9PiB0aGlzLmFjdGl2aXR5U2VydmljZS51cGRhdGVUZWFtQWN0aXZpdHlRdWVzdGlvbihwYXlsb2FkLnRlYW1JZCwgcGF5bG9hZC5xdWVzdGlvbilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGFjdGl2aXR5UXVlc3Rpb246IEFjdGl2aXR5UXVlc3Rpb24pID0+IHVwZGF0ZVRlYW1BY3Rpdml0eVF1ZXN0aW9uU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWN0aXZpdHlRdWVzdGlvbn0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodXBkYXRlVGVhbUFjdGl2aXR5UXVlc3Rpb25GYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBqb2luV2FpdGluZ0xpc3QkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShqb2luV2FpdGluZ0xpc3RBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5qb2luTWVtYmVyQWN0aXZpdHlXYWl0aW5nTGlzdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gW1xuICAgICAgICAgICAgICBqb2luV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiBlbnRyeX0pLFxuICAgICAgICAgICAgICAuLi5tZW1iZXJXYWl0bGlzdFJlZnJlc2hBY3Rpb25zKHBheWxvYWQpXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoam9pbldhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsZWF2ZVdhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGVhdmVXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmxlYXZlTWVtYmVyQWN0aXZpdHlXYWl0aW5nTGlzdChwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIGxlYXZlV2FpdGluZ0xpc3RTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB7bWVtYmVySWQ6IHBheWxvYWQubWVtYmVySWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KSxcbiAgICAgICAgICAgICAgLi4ubWVtYmVyV2FpdGxpc3RSZWZyZXNoQWN0aW9ucyhwYXlsb2FkKVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxlYXZlV2FpdGluZ0xpc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldE1lbWJlckFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeShwYXlsb2FkLm1lbWJlcklkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGVudHJ5OiBBY3Rpdml0eVdhaXRpbmdMaXN0RW50cnkpID0+IHJldHJpZXZlTWVtYmVyV2FpdGluZ0xpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZU1lbWJlcldhaXRpbmdMaXN0RW50cnlGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHtlbnRyaWVzLCBvdXRzdGFuZGluZ09mZmVyfSkgPT4gbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbih7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IHsgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkLCBlbnRyaWVzLCBvdXRzdGFuZGluZ09mZmVyIH1cbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBhZG1pdFdhaXRsaXN0RW50cnkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShhZG1pdFdhaXRsaXN0RW50cnlBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5hZG1pdFRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5lbnRyeUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICBhZG1pdFdhaXRsaXN0RW50cnlTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGFkbWl0V2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVvcmRlcldhaXRsaXN0RW50cnkkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZW9yZGVyV2FpdGxpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnJlb3JkZXJUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZCwgcGF5bG9hZC5kaXJlY3Rpb24pXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgICAgICAgIHJlb3JkZXJXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZW9yZGVyV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmVtaW5kV2FpdGxpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJlbWluZFdhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5yZW1pbmRUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgcmVtaW5kV2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24oKSxcbiAgICAgICAgICAgICAgbG9hZFRlYW1BY3Rpdml0eVdhaXRpbmdMaXN0QWN0aW9uKHtwYXlsb2FkOiB7dGVhbUlkOiBwYXlsb2FkLnRlYW1JZCwgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkfX0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVtaW5kV2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgb2ZmZXJXYWl0bGlzdEVudHJ5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUob2ZmZXJXYWl0bGlzdEVudHJ5QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uub2ZmZXJUZWFtQWN0aXZpdHlXYWl0bGlzdEVudHJ5KHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChlbnRyeTogQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5KSA9PiBbXG4gICAgICAgICAgICAgIG9mZmVyV2FpdGxpc3RFbnRyeVN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKG9mZmVyV2FpdGxpc3RFbnRyeUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcGFzc1dhaXRsaXN0T2ZmZXIkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShwYXNzV2FpdGxpc3RPZmZlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLnBhc3NUZWFtQWN0aXZpdHlXYWl0bGlzdE9mZmVyKHBheWxvYWQudGVhbUlkLCBwYXlsb2FkLmFjdGl2aXR5SWQsIHBheWxvYWQuZW50cnlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgcGFzc1dhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHBhc3NXYWl0bGlzdE9mZmVyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBvcGVuV2FpdGxpc3RQbGFjZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKG9wZW5XYWl0bGlzdFBsYWNlQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uub3BlblRlYW1BY3Rpdml0eVdhaXRsaXN0UGxhY2UocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IFtcbiAgICAgICAgICAgICAgb3BlbldhaXRsaXN0UGxhY2VTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGxvYWRUZWFtQWN0aXZpdHlXYWl0aW5nTGlzdEFjdGlvbih7cGF5bG9hZDoge3RlYW1JZDogcGF5bG9hZC50ZWFtSWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKG9wZW5XYWl0bGlzdFBsYWNlRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZW1vdmVXYWl0bGlzdEVudHJ5JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVtb3ZlV2FpdGxpc3RFbnRyeUFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmRlbGV0ZVRlYW1BY3Rpdml0eVdhaXRsaXN0RW50cnkocGF5bG9hZC50ZWFtSWQsIHBheWxvYWQuYWN0aXZpdHlJZCwgcGF5bG9hZC5lbnRyeUlkKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICByZW1vdmVXYWl0bGlzdEVudHJ5U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBsb2FkVGVhbUFjdGl2aXR5V2FpdGluZ0xpc3RBY3Rpb24oe3BheWxvYWQ6IHt0ZWFtSWQ6IHBheWxvYWQudGVhbUlkLCBhY3Rpdml0eUlkOiBwYXlsb2FkLmFjdGl2aXR5SWR9fSlcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZW1vdmVXYWl0bGlzdEVudHJ5RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICByZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyRcbiAgICAucGlwZShcbiAgICAgIG9mVHlwZShyZXRyaWV2ZVB1YmxpY1dhaXRpbmdMaXN0U3RhdGVBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5nZXRQdWJsaWNXYWl0aW5nTGlzdFN0YXRlKHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdFN0YXRlU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogZW50cnl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RTdGF0ZUZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgam9pblB1YmxpY1dhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoam9pblB1YmxpY1dhaXRpbmdMaXN0QWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2Uuam9pblB1YmxpY1dhaXRpbmdMaXN0KHBheWxvYWQuYWN0aXZpdHlJbnZpdGVJZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKChlbnRyeTogQWN0aXZpdHlXYWl0aW5nTGlzdEVudHJ5KSA9PiBbXG4gICAgICAgICAgICAgIGpvaW5QdWJsaWNXYWl0aW5nTGlzdFN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGVudHJ5fSksXG4gICAgICAgICAgICAgIHJldHJpZXZlUHVibGljQWN0aXZpdHlJbnZpdGVBY3Rpb24oe3BheWxvYWQ6IHthY3Rpdml0eUludml0ZUlkOiBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQsIHRva2VuOiBwYXlsb2FkLnRva2VufX0pXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2Yoam9pblB1YmxpY1dhaXRpbmdMaXN0RmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKTtcblxuICBsZWF2ZVB1YmxpY1dhaXRpbmdMaXN0JCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUobGVhdmVQdWJsaWNXYWl0aW5nTGlzdEFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmxlYXZlUHVibGljV2FpdGluZ0xpc3QocGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICAgICAgICBsZWF2ZVB1YmxpY1dhaXRpbmdMaXN0U3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICByZXRyaWV2ZVB1YmxpY0FjdGl2aXR5SW52aXRlQWN0aW9uKHtwYXlsb2FkOiB7YWN0aXZpdHlJbnZpdGVJZDogcGF5bG9hZC5hY3Rpdml0eUludml0ZUlkLCB0b2tlbjogcGF5bG9hZC50b2tlbn19KVxuICAgICAgICAgICAgXSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxlYXZlUHVibGljV2FpdGluZ0xpc3RGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlciQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJFxuICAgIC5waXBlKFxuICAgICAgb2ZUeXBlKHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlckFjdGlvbiksXG4gICAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH0pID0+XG4gICAgICAgIHRoaXMuYWN0aXZpdHlTZXJ2aWNlLmdldFB1YmxpY1dhaXRpbmdMaXN0T2ZmZXIocGF5bG9hZC5pZCwgcGF5bG9hZC50b2tlbilcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoZW50cnk6IEFjdGl2aXR5V2FpdGluZ0xpc3RFbnRyeSkgPT4gcmV0cmlldmVQdWJsaWNXYWl0aW5nTGlzdE9mZmVyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogZW50cnl9KSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlUHVibGljV2FpdGluZ0xpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG5cbiAgcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyQWN0aW9uKSxcbiAgICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfSkgPT5cbiAgICAgICAgdGhpcy5hY3Rpdml0eVNlcnZpY2UuZ2V0UHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLmlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChvcGVuQWN0aXZpdHk6IE9wZW5BY3Rpdml0eSkgPT4gcmV0cmlldmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogb3BlbkFjdGl2aXR5fSkpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihyZXRyaWV2ZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIHJlc3BvbmRQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUocmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5yZXNwb25kUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLmlkLCBwYXlsb2FkLnRva2VuLCBwYXlsb2FkLmNvbW1lbnQsIHBheWxvYWQub3B0aW9uYWxfZmVlcywgcGF5bG9hZC5yZXNwb25zZXMsIG5ld0d1ZXN0cyhwYXlsb2FkLmd1ZXN0cykpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKG9wZW5BY3Rpdml0eTogT3BlbkFjdGl2aXR5KSA9PiByZXNwb25kUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IG9wZW5BY3Rpdml0eX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmVzcG9uZFB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuXG4gIGRlY2xpbmVQdWJsaWNPcGVuQWN0aXZpdHlXYWl0bGlzdE9mZmVyJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkXG4gICAgLnBpcGUoXG4gICAgICBvZlR5cGUoZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJBY3Rpb24pLFxuICAgICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9KSA9PlxuICAgICAgICB0aGlzLmFjdGl2aXR5U2VydmljZS5kZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlcihwYXlsb2FkLmlkLCBwYXlsb2FkLnRva2VuKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgbWFwKChzdWNjZXNzOiBib29sZWFuKSA9PiBzdWNjZXNzXG4gICAgICAgICAgICAgID8gZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJTdWNjZXNzQWN0aW9uKClcbiAgICAgICAgICAgICAgOiBkZWNsaW5lUHVibGljT3BlbkFjdGl2aXR5V2FpdGxpc3RPZmZlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IG5ldyBIdHRwRXJyb3JSZXNwb25zZSh7c3RhdHVzOiA0MDB9KX0pKSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVjbGluZVB1YmxpY09wZW5BY3Rpdml0eVdhaXRsaXN0T2ZmZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xufVxuXG4vLyBNZW1iZXIgam9pbi9sZWF2ZSBib3RoIHJlZnJlc2ggdGhlIGFjdGl2aXR5IChvciBvcGVuIGFjdGl2aXR5KSBzbyB0aGVcbi8vIG1lbWJlcl93YWl0aW5nX2xpc3RfKiBzZXJpYWxpemVyIGZpZWxkcyBzdGF5IGluIHN5bmMsIHBsdXMgdGhlIGludml0ZSB3aGVuXG4vLyB0aGUgbWVtYmVyIGNhbWUgdGhyb3VnaCBhbiBpbnZpdGF0aW9uLlxuZnVuY3Rpb24gbWVtYmVyV2FpdGxpc3RSZWZyZXNoQWN0aW9ucyhwYXlsb2FkOiB7IG1lbWJlcklkOiBzdHJpbmcsIGFjdGl2aXR5SWQ6IHN0cmluZywgYWN0aXZpdHlJbnZpdGVJZD86IHN0cmluZywgaXNPcGVuQWN0aXZpdHk/OiBib29sZWFuIH0pIHtcbiAgY29uc3QgYWN0aW9ucyA9IFtdO1xuXG4gIGlmIChwYXlsb2FkLmlzT3BlbkFjdGl2aXR5KSB7XG4gICAgYWN0aW9ucy5wdXNoKHJldHJpZXZlTWVtYmVyT3BlbkFjdGl2aXR5QWN0aW9uKHtwYXlsb2FkOiB7bWVtYmVySWQ6IHBheWxvYWQubWVtYmVySWQsIGFjdGl2aXR5SWQ6IHBheWxvYWQuYWN0aXZpdHlJZH19KSk7XG4gIH0gZWxzZSB7XG4gICAgYWN0aW9ucy5wdXNoKHJldHJpZXZlTWVtYmVyQWN0aXZpdHlBY3Rpb24oe3BheWxvYWQ6IHttZW1iZXJJZDogcGF5bG9hZC5tZW1iZXJJZCwgYWN0aXZpdHlJZDogcGF5bG9hZC5hY3Rpdml0eUlkfX0pKTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWQpIHtcbiAgICBhY3Rpb25zLnB1c2gocmV0cmlldmVNZW1iZXJBY3Rpdml0eUludml0ZUFjdGlvbih7cGF5bG9hZDoge21lbWJlcklkOiBwYXlsb2FkLm1lbWJlcklkLCBhY3Rpdml0eUludml0ZUlkOiBwYXlsb2FkLmFjdGl2aXR5SW52aXRlSWR9fSkpO1xuICB9XG5cbiAgcmV0dXJuIGFjdGlvbnM7XG59XG5cbi8vIE5ldyBndWVzdHMgKG5vIGlkIHlldCkgYXJlIHNlbnQgaW5saW5lIHdpdGggdGhlIHJlc3BvbmQgcmVxdWVzdCwgc28gdGhlXG4vLyBiYWNrZW5kIGNyZWF0ZXMgdGhlbSBiZWZvcmUgdGhlIGludm9pY2UgYW5kIGluY2x1ZGVzIHRoZWlyIGd1ZXN0IGZlZXMuXG5mdW5jdGlvbiBuZXdHdWVzdHMoZ3Vlc3RzOiBBcnJheTxHdWVzdElucHV0PiB8IHVuZGVmaW5lZCk6IEFycmF5PHsgbmFtZTogc3RyaW5nLCBjb21tZW50Pzogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIChndWVzdHMgPz8gW10pLmZpbHRlcihnID0+ICFnLmlkKS5tYXAoZyA9PiAoeyBuYW1lOiBnLm5hbWUsIGNvbW1lbnQ6IGcuY29tbWVudCA/PyB1bmRlZmluZWQgfSkpO1xufVxuXG4vLyBVcGRhdGVzIGFuZCBkZWxldGVzIG9mIGV4aXN0aW5nIGd1ZXN0cyBzdGlsbCB1c2UgdGhlIGRlZGljYXRlZCBndWVzdFxuLy8gZW5kcG9pbnRzOyBuZXcgZ3Vlc3RzIGFyZSBzZW50IGlubGluZSB3aXRoIHRoZSByZXNwb25kIHJlcXVlc3QgaW5zdGVhZC5cbmZ1bmN0aW9uIHJlY29uY2lsZU1lbWJlckd1ZXN0cyhcbiAgbWVtYmVySWQ6IHN0cmluZyxcbiAgaW52aXRlSWQ6IHN0cmluZyxcbiAgZGVzaXJlZEd1ZXN0czogQXJyYXk8R3Vlc3RJbnB1dD4sXG4gIGV4aXN0aW5nR3Vlc3RzOiBBcnJheTxHdWVzdD4sXG4gIGFjdGl2aXR5U2VydmljZTogQWN0aXZpdHlTZXJ2aWNlXG4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgY29uc3QgZXhpc3RpbmdCeUlkID0gbmV3IE1hcChleGlzdGluZ0d1ZXN0cy5tYXAoZyA9PiBbZy5pZCwgZ10pKTtcbiAgY29uc3QgZGVzaXJlZElkcyA9IG5ldyBTZXQoZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiBnLmlkKS5tYXAoZyA9PiBnLmlkISkpO1xuXG4gIGNvbnN0IHRvRGVsZXRlID0gZXhpc3RpbmdHdWVzdHMuZmlsdGVyKGcgPT4gIWRlc2lyZWRJZHMuaGFzKGcuaWQpKTtcbiAgY29uc3QgdG9VcGRhdGUgPSBkZXNpcmVkR3Vlc3RzLmZpbHRlcihnID0+IHtcbiAgICBpZiAoIWcuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nQnlJZC5nZXQoZy5pZCk7XG4gICAgcmV0dXJuIGV4aXN0aW5nICYmIChleGlzdGluZy5uYW1lICE9PSBnLm5hbWUgfHwgZXhpc3RpbmcuY29tbWVudCAhPT0gZy5jb21tZW50KTtcbiAgfSk7XG5cbiAgY29uc3Qgb3BzOiBBcnJheTxPYnNlcnZhYmxlPHVua25vd24+PiA9IFtcbiAgICAuLi50b0RlbGV0ZS5tYXAoZyA9PiBhY3Rpdml0eVNlcnZpY2UuZGVsZXRlTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZCwgaW52aXRlSWQsIGcuaWQpKSxcbiAgICAuLi50b1VwZGF0ZS5tYXAoZyA9PiBhY3Rpdml0eVNlcnZpY2UudXBkYXRlTWVtYmVyQWN0aXZpdHlHdWVzdChtZW1iZXJJZCwgaW52aXRlSWQsIGcuaWQhLCB7IG5hbWU6IGcubmFtZSwgY29tbWVudDogZy5jb21tZW50ID8/IHVuZGVmaW5lZCB9KSksXG4gIF07XG5cbiAgcmV0dXJuIG9wcy5sZW5ndGggPiAwID8gZm9ya0pvaW4ob3BzKSA6IG9mKG51bGwpO1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVQdWJsaWNUb2tlbkd1ZXN0cyhcbiAgaWQ6IHN0cmluZyxcbiAgdG9rZW46IHN0cmluZyxcbiAgZGVzaXJlZEd1ZXN0czogQXJyYXk8R3Vlc3RJbnB1dD4sXG4gIGV4aXN0aW5nR3Vlc3RzOiBBcnJheTxHdWVzdD4sXG4gIGFjdGl2aXR5U2VydmljZTogQWN0aXZpdHlTZXJ2aWNlXG4pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgY29uc3QgZXhpc3RpbmdCeUlkID0gbmV3IE1hcChleGlzdGluZ0d1ZXN0cy5tYXAoZyA9PiBbZy5pZCwgZ10pKTtcbiAgY29uc3QgZGVzaXJlZElkcyA9IG5ldyBTZXQoZGVzaXJlZEd1ZXN0cy5maWx0ZXIoZyA9PiBnLmlkKS5tYXAoZyA9PiBnLmlkISkpO1xuXG4gIGNvbnN0IHRvRGVsZXRlID0gZXhpc3RpbmdHdWVzdHMuZmlsdGVyKGcgPT4gIWRlc2lyZWRJZHMuaGFzKGcuaWQpKTtcbiAgY29uc3QgdG9VcGRhdGUgPSBkZXNpcmVkR3Vlc3RzLmZpbHRlcihnID0+IHtcbiAgICBpZiAoIWcuaWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBleGlzdGluZyA9IGV4aXN0aW5nQnlJZC5nZXQoZy5pZCk7XG4gICAgcmV0dXJuIGV4aXN0aW5nICYmIChleGlzdGluZy5uYW1lICE9PSBnLm5hbWUgfHwgZXhpc3RpbmcuY29tbWVudCAhPT0gZy5jb21tZW50KTtcbiAgfSk7XG5cbiAgY29uc3Qgb3BzOiBBcnJheTxPYnNlcnZhYmxlPHVua25vd24+PiA9IFtcbiAgICAuLi50b0RlbGV0ZS5tYXAoZyA9PiBhY3Rpdml0eVNlcnZpY2UuZGVsZXRlUHVibGljQWN0aXZpdHlHdWVzdEJ5VG9rZW4oaWQsIHRva2VuLCBnLmlkKSksXG4gICAgLi4udG9VcGRhdGUubWFwKGcgPT4gYWN0aXZpdHlTZXJ2aWNlLnVwZGF0ZVB1YmxpY0FjdGl2aXR5R3Vlc3RCeVRva2VuKGlkLCB0b2tlbiwgZy5pZCEsIHsgbmFtZTogZy5uYW1lLCBjb21tZW50OiBnLmNvbW1lbnQgPz8gdW5kZWZpbmVkIH0pKSxcbiAgXTtcblxuICByZXR1cm4gb3BzLmxlbmd0aCA+IDAgPyBmb3JrSm9pbihvcHMpIDogb2YobnVsbCk7XG59XG4iXX0=