@myclub_se/data-access 3.7.9 → 3.7.11

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 (180) hide show
  1. package/esm2022/lib/api-models/api-invoice/api-payment-attempt-create.mjs +1 -8
  2. package/esm2022/lib/authentication/authentication.interceptor.mjs +6 -8
  3. package/esm2022/lib/authentication/authentication.service.mjs +8 -11
  4. package/esm2022/lib/authentication/guards/authenticated.guard.mjs +4 -6
  5. package/esm2022/lib/authentication/guards/handle-grant-token.guard.mjs +4 -7
  6. package/esm2022/lib/data-access.module.mjs +6 -6
  7. package/esm2022/lib/maintenance/maintenance.interceptor.mjs +4 -5
  8. package/esm2022/lib/models/activity-extra-member.mjs +1 -8
  9. package/esm2022/lib/models/activity-invite.mjs +1 -23
  10. package/esm2022/lib/models/activity-location-group.mjs +1 -7
  11. package/esm2022/lib/models/activity-location-part.mjs +1 -3
  12. package/esm2022/lib/models/activity-location-tag.mjs +1 -6
  13. package/esm2022/lib/models/activity-location.mjs +1 -11
  14. package/esm2022/lib/models/activity-participant.mjs +1 -8
  15. package/esm2022/lib/models/activity-question-connection.mjs +1 -8
  16. package/esm2022/lib/models/activity-question-response.mjs +1 -3
  17. package/esm2022/lib/models/activity-question.mjs +1 -8
  18. package/esm2022/lib/models/activity-rule-relation.mjs +1 -9
  19. package/esm2022/lib/models/activity-rule.mjs +1 -8
  20. package/esm2022/lib/models/activity-settings.mjs +1 -18
  21. package/esm2022/lib/models/activity-type.mjs +1 -9
  22. package/esm2022/lib/models/activity-waiting-list-entry.mjs +1 -16
  23. package/esm2022/lib/models/activity.mjs +1 -82
  24. package/esm2022/lib/models/app-settings.mjs +1 -5
  25. package/esm2022/lib/models/auth/auth-member.mjs +3 -7
  26. package/esm2022/lib/models/auth/auth-section.mjs +1 -6
  27. package/esm2022/lib/models/auth/auth-team-section.mjs +1 -3
  28. package/esm2022/lib/models/auth/auth-team.mjs +1 -6
  29. package/esm2022/lib/models/auth/auth.mjs +1 -17
  30. package/esm2022/lib/models/authentication.mjs +1 -3
  31. package/esm2022/lib/models/bookable-item.mjs +1 -11
  32. package/esm2022/lib/models/bookable-part.mjs +1 -3
  33. package/esm2022/lib/models/bookable-tag.mjs +1 -6
  34. package/esm2022/lib/models/booking-calendar-application-time.mjs +1 -33
  35. package/esm2022/lib/models/booking-calendar-slot-session.mjs +1 -35
  36. package/esm2022/lib/models/booking-calendar-slot-validate-copy-result.mjs +1 -5
  37. package/esm2022/lib/models/booking-calendar-slot.mjs +1 -26
  38. package/esm2022/lib/models/booking-calendar.mjs +1 -33
  39. package/esm2022/lib/models/booking-settings.mjs +1 -8
  40. package/esm2022/lib/models/booking-slot-filter.mjs +1 -12
  41. package/esm2022/lib/models/calendar-event.mjs +1 -16
  42. package/esm2022/lib/models/calendar.mjs +1 -6
  43. package/esm2022/lib/models/card/card-deal.mjs +1 -6
  44. package/esm2022/lib/models/card/card-logo-urls.mjs +1 -9
  45. package/esm2022/lib/models/card/card-logo.mjs +1 -4
  46. package/esm2022/lib/models/card/card-member-ticket.mjs +1 -7
  47. package/esm2022/lib/models/card/card-theme.mjs +1 -6
  48. package/esm2022/lib/models/card/card-ticket-location.mjs +1 -5
  49. package/esm2022/lib/models/card/card-ticket.mjs +1 -17
  50. package/esm2022/lib/models/card/card.mjs +1 -9
  51. package/esm2022/lib/models/card/home-team.mjs +1 -4
  52. package/esm2022/lib/models/card/member-card.mjs +1 -11
  53. package/esm2022/lib/models/card/search-member-card.mjs +1 -5
  54. package/esm2022/lib/models/card/selected-field.mjs +1 -3
  55. package/esm2022/lib/models/club-image.mjs +1 -14
  56. package/esm2022/lib/models/club-section.mjs +1 -3
  57. package/esm2022/lib/models/club.mjs +1 -3
  58. package/esm2022/lib/models/collection.mjs +1 -5
  59. package/esm2022/lib/models/contact.mjs +1 -19
  60. package/esm2022/lib/models/databank-category.mjs +1 -7
  61. package/esm2022/lib/models/databank-item.mjs +1 -7
  62. package/esm2022/lib/models/directory.mjs +1 -10
  63. package/esm2022/lib/models/email.mjs +1 -4
  64. package/esm2022/lib/models/event.mjs +1 -28
  65. package/esm2022/lib/models/external-link.mjs +1 -3
  66. package/esm2022/lib/models/feature-flags.mjs +1 -14
  67. package/esm2022/lib/models/file-object.mjs +1 -10
  68. package/esm2022/lib/models/general-image.mjs +1 -4
  69. package/esm2022/lib/models/group-role.mjs +1 -7
  70. package/esm2022/lib/models/guest.mjs +1 -5
  71. package/esm2022/lib/models/image-urls.mjs +1 -6
  72. package/esm2022/lib/models/invoice/member-fee.mjs +1 -6
  73. package/esm2022/lib/models/invoice/member-invoice-row.mjs +1 -14
  74. package/esm2022/lib/models/invoice/member-invoice.mjs +1 -24
  75. package/esm2022/lib/models/invoice/payment-attempt.mjs +1 -10
  76. package/esm2022/lib/models/invoice/payment-order-row.mjs +1 -3
  77. package/esm2022/lib/models/invoice/payment-order.mjs +1 -18
  78. package/esm2022/lib/models/invoice/payment-types/credit-card.mjs +1 -12
  79. package/esm2022/lib/models/invoice/payment-types/giro.mjs +1 -7
  80. package/esm2022/lib/models/invoice/payment-types/swish.mjs +1 -14
  81. package/esm2022/lib/models/invoice/payment-types/zimpler.mjs +1 -8
  82. package/esm2022/lib/models/invoice/search-member-invoice.mjs +1 -10
  83. package/esm2022/lib/models/invoice/swish-qr-code.mjs +1 -2
  84. package/esm2022/lib/models/invoice/unpaid-member-invoice.mjs +1 -5
  85. package/esm2022/lib/models/leader-activity.mjs +1 -12
  86. package/esm2022/lib/models/member/member-attribute.mjs +1 -12
  87. package/esm2022/lib/models/member/member-contact.mjs +1 -6
  88. package/esm2022/lib/models/member/member-function.mjs +1 -6
  89. package/esm2022/lib/models/member/member-validation-settings.mjs +1 -9
  90. package/esm2022/lib/models/member/member.mjs +1 -27
  91. package/esm2022/lib/models/member/other-member-field.mjs +1 -4
  92. package/esm2022/lib/models/member/other-member.mjs +1 -9
  93. package/esm2022/lib/models/member/search-member.mjs +1 -17
  94. package/esm2022/lib/models/member-activity-invite.mjs +1 -12
  95. package/esm2022/lib/models/member-public-form-field-option.mjs +1 -5
  96. package/esm2022/lib/models/member-public-form-field.mjs +1 -12
  97. package/esm2022/lib/models/member-public-form.mjs +1 -26
  98. package/esm2022/lib/models/member-team-through.mjs +1 -10
  99. package/esm2022/lib/models/member-team.mjs +1 -10
  100. package/esm2022/lib/models/member-type.mjs +1 -4
  101. package/esm2022/lib/models/mypages-menu-item.mjs +1 -4
  102. package/esm2022/lib/models/news.mjs +1 -20
  103. package/esm2022/lib/models/open-activity.mjs +3 -79
  104. package/esm2022/lib/models/optional-fee.mjs +2 -7
  105. package/esm2022/lib/models/overbooked-bookable-item.mjs +1 -6
  106. package/esm2022/lib/models/overbooked-location.mjs +1 -6
  107. package/esm2022/lib/models/partner.mjs +1 -5
  108. package/esm2022/lib/models/public-authentication.mjs +1 -3
  109. package/esm2022/lib/models/registration-qr-code.mjs +1 -8
  110. package/esm2022/lib/models/retrieve-2fa.mjs +1 -3
  111. package/esm2022/lib/models/saved-search.mjs +1 -3
  112. package/esm2022/lib/models/search-attribute.mjs +1 -5
  113. package/esm2022/lib/models/search-club.mjs +1 -10
  114. package/esm2022/lib/models/search-team.mjs +1 -9
  115. package/esm2022/lib/models/section.mjs +1 -3
  116. package/esm2022/lib/models/swish-incident.mjs +1 -11
  117. package/esm2022/lib/models/token.mjs +1 -4
  118. package/esm2022/lib/models/user-notification.mjs +1 -9
  119. package/esm2022/lib/models/user.mjs +1 -13
  120. package/esm2022/lib/services/activity.service.mjs +4 -7
  121. package/esm2022/lib/services/api.service.mjs +4 -6
  122. package/esm2022/lib/services/auth.service.mjs +4 -5
  123. package/esm2022/lib/services/bookable.service.mjs +4 -5
  124. package/esm2022/lib/services/booking-calendar.service.mjs +22 -6
  125. package/esm2022/lib/services/club.service.mjs +4 -5
  126. package/esm2022/lib/services/constant.service.mjs +4 -5
  127. package/esm2022/lib/services/databank.service.mjs +4 -5
  128. package/esm2022/lib/services/email.service.mjs +4 -5
  129. package/esm2022/lib/services/external-link.service.mjs +4 -5
  130. package/esm2022/lib/services/feature-flags.service.mjs +4 -5
  131. package/esm2022/lib/services/file.service.mjs +4 -5
  132. package/esm2022/lib/services/invoice/invoice.service.mjs +4 -5
  133. package/esm2022/lib/services/invoice/payment-attempt.service.mjs +4 -5
  134. package/esm2022/lib/services/invoice/payment-order.service.mjs +4 -5
  135. package/esm2022/lib/services/leader-notification.service.mjs +4 -5
  136. package/esm2022/lib/services/maintenance-mode.service.mjs +8 -7
  137. package/esm2022/lib/services/member-card.service.mjs +4 -5
  138. package/esm2022/lib/services/member-fee.service.mjs +4 -5
  139. package/esm2022/lib/services/member-public-form.service.mjs +4 -5
  140. package/esm2022/lib/services/member.service.mjs +4 -5
  141. package/esm2022/lib/services/news.service.mjs +4 -5
  142. package/esm2022/lib/services/registration-qr-code.service.mjs +4 -5
  143. package/esm2022/lib/services/saved-search.service.mjs +4 -5
  144. package/esm2022/lib/services/section.service.mjs +4 -5
  145. package/esm2022/lib/services/storage.service.mjs +5 -6
  146. package/esm2022/lib/services/swish-incident.service.mjs +4 -5
  147. package/esm2022/lib/services/team.service.mjs +4 -5
  148. package/esm2022/lib/services/token.service.mjs +4 -5
  149. package/esm2022/lib/services/user-notification.service.mjs +4 -5
  150. package/esm2022/lib/services/user.service.mjs +4 -5
  151. package/esm2022/lib/store/actions/booking.actions.mjs +7 -1
  152. package/esm2022/lib/store/effects/activity.effects.mjs +358 -355
  153. package/esm2022/lib/store/effects/auth.effects.mjs +121 -111
  154. package/esm2022/lib/store/effects/booking.effects.mjs +139 -134
  155. package/esm2022/lib/store/effects/calendar.effects.mjs +61 -59
  156. package/esm2022/lib/store/effects/club-info.effects.mjs +17 -15
  157. package/esm2022/lib/store/effects/constant.effects.mjs +78 -76
  158. package/esm2022/lib/store/effects/databank.effects.mjs +23 -21
  159. package/esm2022/lib/store/effects/email.effects.mjs +16 -14
  160. package/esm2022/lib/store/effects/external-link.effects.mjs +11 -9
  161. package/esm2022/lib/store/effects/file.effects.mjs +92 -90
  162. package/esm2022/lib/store/effects/invoice.effects.mjs +176 -174
  163. package/esm2022/lib/store/effects/member-card.effects.mjs +73 -71
  164. package/esm2022/lib/store/effects/member-fee.effects.mjs +9 -7
  165. package/esm2022/lib/store/effects/member.effects.mjs +41 -39
  166. package/esm2022/lib/store/effects/mixins/extra-members-mixin.mjs +4 -2
  167. package/esm2022/lib/store/effects/news.effects.mjs +47 -45
  168. package/esm2022/lib/store/effects/public-form.effects.mjs +24 -22
  169. package/esm2022/lib/store/effects/registration-qr-code.effects.mjs +14 -12
  170. package/esm2022/lib/store/effects/saved-search.effects.mjs +9 -7
  171. package/esm2022/lib/store/effects/swish-incidents.effects.mjs +11 -9
  172. package/esm2022/lib/store/effects/team.effects.mjs +83 -76
  173. package/esm2022/lib/store/effects/token.effects.mjs +93 -91
  174. package/esm2022/lib/store/effects/user.effects.mjs +35 -35
  175. package/fesm2022/myclub_se-data-access.mjs +1771 -2845
  176. package/fesm2022/myclub_se-data-access.mjs.map +1 -1
  177. package/lib/services/booking-calendar.service.d.ts +3 -0
  178. package/lib/store/actions/booking.actions.d.ts +24 -0
  179. package/lib/store/effects/booking.effects.d.ts +5 -0
  180. package/package.json +1 -1
@@ -7,40 +7,40 @@ import { catchError, map, switchMap } from 'rxjs/operators';
7
7
  import { HttpErrorResponse } from '@angular/common/http';
8
8
  import * as i0 from "@angular/core";
9
9
  export class UserEffects {
10
- actions$ = inject(Actions);
11
- userService = inject(UserService);
12
- userNotificationService = inject(UserNotificationService);
13
10
  constructor() {
14
- }
15
- activate$ = createEffect(() => this.actions$.pipe(ofType(activateUserAction), exhaustMap(({ payload }) => this.userService.activateUser(payload.uidb64, payload.token).pipe(map((value) => value ? activateUserSuccessAction() : activateUserFailureAction()), catchError(() => of(activateUserFailureAction()))))));
16
- activate2fa$ = createEffect(() => this.actions$.pipe(ofType(activate2FAUserAction), exhaustMap(({ payload }) => this.userService.activate2fa(payload).pipe(map(() => activate2FAUserSuccessAction()), catchError((err) => of(activate2FAUserFailureAction({ payload: err })))))));
17
- create$ = createEffect(() => this.actions$.pipe(ofType(createUserAction), exhaustMap(({ payload }) => this.userService.createUser(payload).pipe(map((value) => {
18
- if (value) {
19
- return createUserSuccessAction();
20
- }
21
- return createUserFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
22
- }), catchError(error => of(createUserFailureAction({ payload: error })))))));
23
- deactivate2fa$ = createEffect(() => this.actions$.pipe(ofType(deactivate2FAUserAction), exhaustMap(() => this.userService.deactivate2fa().pipe(map(() => deactivate2FAUserSuccessAction()), catchError((err) => of(deactivate2FAUserFailureAction({ payload: err })))))));
24
- deleteCurrent$ = createEffect(() => this.actions$.pipe(ofType(deleteCurrentUserAction), exhaustMap(() => this.userService.removeCurrentUser().pipe(mergeMap((success) => {
25
- if (success) {
11
+ this.actions$ = inject(Actions);
12
+ this.userService = inject(UserService);
13
+ this.userNotificationService = inject(UserNotificationService);
14
+ this.activate$ = createEffect(() => this.actions$.pipe(ofType(activateUserAction), exhaustMap(({ payload }) => this.userService.activateUser(payload.uidb64, payload.token).pipe(map((value) => value ? activateUserSuccessAction() : activateUserFailureAction()), catchError(() => of(activateUserFailureAction()))))));
15
+ this.activate2fa$ = createEffect(() => this.actions$.pipe(ofType(activate2FAUserAction), exhaustMap(({ payload }) => this.userService.activate2fa(payload).pipe(map(() => activate2FAUserSuccessAction()), catchError((err) => of(activate2FAUserFailureAction({ payload: err })))))));
16
+ this.create$ = createEffect(() => this.actions$.pipe(ofType(createUserAction), exhaustMap(({ payload }) => this.userService.createUser(payload).pipe(map((value) => {
17
+ if (value) {
18
+ return createUserSuccessAction();
19
+ }
20
+ return createUserFailureAction({ payload: new HttpErrorResponse({ status: 400 }) });
21
+ }), catchError(error => of(createUserFailureAction({ payload: error })))))));
22
+ this.deactivate2fa$ = createEffect(() => this.actions$.pipe(ofType(deactivate2FAUserAction), exhaustMap(() => this.userService.deactivate2fa().pipe(map(() => deactivate2FAUserSuccessAction()), catchError((err) => of(deactivate2FAUserFailureAction({ payload: err })))))));
23
+ this.deleteCurrent$ = createEffect(() => this.actions$.pipe(ofType(deleteCurrentUserAction), exhaustMap(() => this.userService.removeCurrentUser().pipe(mergeMap((success) => {
24
+ if (success) {
25
+ return [
26
+ deleteCurrentUserSuccessAction(),
27
+ clearAuthenticationAction()
28
+ ];
29
+ }
26
30
  return [
27
- deleteCurrentUserSuccessAction(),
28
- clearAuthenticationAction()
31
+ deleteCurrentUserFailureAction({ payload: new HttpErrorResponse({ status: 400 }) }),
29
32
  ];
30
- }
31
- return [
32
- deleteCurrentUserFailureAction({ payload: new HttpErrorResponse({ status: 400 }) }),
33
- ];
34
- }), catchError((error) => of(deleteCurrentUserFailureAction({ payload: error })))))));
35
- getCurrent$ = createEffect(() => this.actions$.pipe(ofType(getCurrentUserAction), exhaustMap(() => this.userService.getCurrentUser().pipe(map((user) => getCurrentUserSuccessAction({ payload: user })), catchError((error) => of(getCurrentUserFailureAction({ payload: error })))))));
36
- listNotifications$ = createEffect(() => this.actions$.pipe(ofType(listUserNotificationsAction), concatMap(({ payload }) => this.fetchAllNotifications(payload).pipe(map((allNotifications) => listUserNotificationsSuccessAction({ payload: allNotifications })), catchError((error) => of(listUserNotificationsFailureAction({ payload: error })))))));
37
- resetPassword$ = createEffect(() => this.actions$.pipe(ofType(resetPasswordAction), exhaustMap(({ payload }) => this.userService.resetPassword(payload).pipe(map((value) => value ? resetPasswordSuccessAction() : resetPasswordFailureAction())))));
38
- retrieve2faCode$ = createEffect(() => this.actions$.pipe(ofType(retrieve2FACodeUserAction), exhaustMap(() => this.userService.retrieve2faCode().pipe(map((value) => retrieve2FACodeUserSuccessAction({ payload: value })), catchError((err) => of(retrieve2FACodeUserFailureAction({ payload: err })))))));
39
- updateCurrent$ = createEffect(() => this.actions$.pipe(ofType(updateCurrentUserAction), exhaustMap(({ payload }) => this.userService.updateCurrentUser(payload).pipe(map((user) => updateCurrentUserSuccessAction({ payload: user })), catchError((error) => of(updateCurrentUserFailureAction({ payload: error })))))));
40
- verify2fa$ = createEffect(() => this.actions$.pipe(ofType(verify2FAUserAction), exhaustMap(({ payload }) => this.userService.verify2faCode(payload).pipe(mergeMap(() => [
41
- verify2FAUserSuccessAction(),
42
- getCurrentUserAction()
43
- ]), catchError((err) => of(verify2FAUserFailureAction({ payload: err })))))));
33
+ }), catchError((error) => of(deleteCurrentUserFailureAction({ payload: error })))))));
34
+ this.getCurrent$ = createEffect(() => this.actions$.pipe(ofType(getCurrentUserAction), exhaustMap(() => this.userService.getCurrentUser().pipe(map((user) => getCurrentUserSuccessAction({ payload: user })), catchError((error) => of(getCurrentUserFailureAction({ payload: error })))))));
35
+ this.listNotifications$ = createEffect(() => this.actions$.pipe(ofType(listUserNotificationsAction), concatMap(({ payload }) => this.fetchAllNotifications(payload).pipe(map((allNotifications) => listUserNotificationsSuccessAction({ payload: allNotifications })), catchError((error) => of(listUserNotificationsFailureAction({ payload: error })))))));
36
+ this.resetPassword$ = createEffect(() => this.actions$.pipe(ofType(resetPasswordAction), exhaustMap(({ payload }) => this.userService.resetPassword(payload).pipe(map((value) => value ? resetPasswordSuccessAction() : resetPasswordFailureAction())))));
37
+ this.retrieve2faCode$ = createEffect(() => this.actions$.pipe(ofType(retrieve2FACodeUserAction), exhaustMap(() => this.userService.retrieve2faCode().pipe(map((value) => retrieve2FACodeUserSuccessAction({ payload: value })), catchError((err) => of(retrieve2FACodeUserFailureAction({ payload: err })))))));
38
+ this.updateCurrent$ = createEffect(() => this.actions$.pipe(ofType(updateCurrentUserAction), exhaustMap(({ payload }) => this.userService.updateCurrentUser(payload).pipe(map((user) => updateCurrentUserSuccessAction({ payload: user })), catchError((error) => of(updateCurrentUserFailureAction({ payload: error })))))));
39
+ this.verify2fa$ = createEffect(() => this.actions$.pipe(ofType(verify2FAUserAction), exhaustMap(({ payload }) => this.userService.verify2faCode(payload).pipe(mergeMap(() => [
40
+ verify2FAUserSuccessAction(),
41
+ getCurrentUserAction()
42
+ ]), catchError((err) => of(verify2FAUserFailureAction({ payload: err })))))));
43
+ }
44
44
  fetchAllNotifications(clubId, offset = 0, collectedNotifications = []) {
45
45
  return this.userNotificationService.getUserNotifications(clubId, offset).pipe(switchMap((response) => {
46
46
  const notifications = response.toArray();
@@ -57,10 +57,10 @@ export class UserEffects {
57
57
  return throwError(() => error);
58
58
  }));
59
59
  }
60
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
61
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserEffects });
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
61
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEffects }); }
62
62
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserEffects, decorators: [{
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: UserEffects, decorators: [{
64
64
  type: Injectable
65
65
  }], ctorParameters: () => [] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL3VzZXIuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsRUFDaEMsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQiwwQkFBMEIsR0FDM0IsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxF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UUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7dUdBeElVLFdBQVc7MkdBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9ucywgY3JlYXRlRWZmZWN0LCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IE5ld0FjY291bnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbGxlY3Rpb24sIFJldHJpZXZlMmZhLCBVc2VyLCBVc2VyTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IFVzZXJOb3RpZmljYXRpb25TZXJ2aWNlLCBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7XG4gIGFjdGl2YXRlMkZBVXNlckFjdGlvbixcbiAgYWN0aXZhdGUyRkFVc2VyRmFpbHVyZUFjdGlvbixcbiAgYWN0aXZhdGUyRkFVc2VyU3VjY2Vzc0FjdGlvbixcbiAgYWN0aXZhdGVVc2VyQWN0aW9uLFxuICBhY3RpdmF0ZVVzZXJGYWlsdXJlQWN0aW9uLFxuICBhY3RpdmF0ZVVzZXJTdWNjZXNzQWN0aW9uLFxuICBjbGVhckF1dGhlbnRpY2F0aW9uQWN0aW9uLFxuICBjcmVhdGVVc2VyQWN0aW9uLFxuICBjcmVhdGVVc2VyRmFpbHVyZUFjdGlvbixcbiAgY3JlYXRlVXNlclN1Y2Nlc3NBY3Rpb24sXG4gIGRlYWN0aXZhdGUyRkFVc2VyQWN0aW9uLFxuICBkZWFjdGl2YXRlMkZBVXNlckZhaWx1cmVBY3Rpb24sXG4gIGRlYWN0aXZhdGUyRkFVc2VyU3VjY2Vzc0FjdGlvbixcbiAgZGVsZXRlQ3VycmVudFVzZXJBY3Rpb24sXG4gIGRlbGV0ZUN1cnJlbnRVc2VyRmFpbHVyZUFjdGlvbixcbiAgZGVsZXRlQ3VycmVudFVzZXJTdWNjZXNzQWN0aW9uLFxuICBnZXRDdXJyZW50VXNlckFjdGlvbixcbiAgZ2V0Q3VycmVudFVzZXJGYWlsdXJlQWN0aW9uLFxuICBnZXRDdXJyZW50VXNlclN1Y2Nlc3NBY3Rpb24sXG4gIGxpc3RVc2VyTm90aWZpY2F0aW9uc0FjdGlvbixcbiAgbGlzdFVzZXJOb3RpZmljYXRpb25zRmFpbHVyZUFjdGlvbixcbiAgbGlzdFVzZXJOb3RpZmljYXRpb25zU3VjY2Vzc0FjdGlvbixcbiAgcmVzZXRQYXNzd29yZEFjdGlvbixcbiAgcmVzZXRQYXNzd29yZEZhaWx1cmVBY3Rpb24sXG4gIHJlc2V0UGFzc3dvcmRTdWNjZXNzQWN0aW9uLFxuICByZXRyaWV2ZTJGQUNvZGVVc2VyQWN0aW9uLFxuICByZXRyaWV2ZTJGQUNvZGVVc2VyRmFpbHVyZUFjdGlvbixcbiAgcmV0cmlldmUyRkFDb2RlVXNlclN1Y2Nlc3NBY3Rpb24sXG4gIHVwZGF0ZUN1cnJlbnRVc2VyQWN0aW9uLFxuICB1cGRhdGVDdXJyZW50VXNlckZhaWx1cmVBY3Rpb24sXG4gIHVwZGF0ZUN1cnJlbnRVc2VyU3VjY2Vzc0FjdGlvbixcbiAgdmVyaWZ5MkZBVXNlckFjdGlvbixcbiAgdmVyaWZ5MkZBVXNlckZhaWx1cmVBY3Rpb24sXG4gIHZlcmlmeTJGQVVzZXJTdWNjZXNzQWN0aW9uLFxufSBmcm9tICcuLi9hY3Rpb25zJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZXhoYXVzdE1hcCwgbWVyZ2VNYXAsIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQWN0aXZhdGVVc2VySW50ZXJmYWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyRWZmZWN0cyB7XG4gIHByaXZhdGUgYWN0aW9ucyQgPSBpbmplY3QoQWN0aW9ucyk7XG4gIHByaXZhdGUgdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpO1xuICBwcml2YXRlIHVzZXJOb3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KFVzZXJOb3RpZmljYXRpb25TZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIGFjdGl2YXRlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgb2ZUeXBlKGFjdGl2YXRlVXNlckFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7XG4gICAgICBwYXlsb2FkOiBBY3RpdmF0ZVVzZXJJbnRlcmZhY2VcbiAgICB9KSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmFjdGl2YXRlVXNlcihwYXlsb2FkLnVpZGI2NCwgcGF5bG9hZC50b2tlbikucGlwZShcbiAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHZhbHVlID8gYWN0aXZhdGVVc2VyU3VjY2Vzc0FjdGlvbigpIDogYWN0aXZhdGVVc2VyRmFpbHVyZUFjdGlvbigpKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoYWN0aXZhdGVVc2VyRmFpbHVyZUFjdGlvbigpKSksXG4gICAgKSlcbiAgKSk7XG5cbiAgYWN0aXZhdGUyZmEkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUoYWN0aXZhdGUyRkFVc2VyQWN0aW9uKSxcbiAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogc3RyaW5nIH0pID0+IHRoaXMudXNlclNlcnZpY2UuYWN0aXZhdGUyZmEocGF5bG9hZCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiBhY3RpdmF0ZTJGQVVzZXJTdWNjZXNzQWN0aW9uKCkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoYWN0aXZhdGUyRkFVc2VyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyfSkpKSxcbiAgICApKVxuICApKTtcblxuICBjcmVhdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUoY3JlYXRlVXNlckFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IE5ld0FjY291bnRJbnRlcmZhY2UgfSkgPT4gdGhpcy51c2VyU2VydmljZS5jcmVhdGVVc2VyKHBheWxvYWQpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVVc2VyU3VjY2Vzc0FjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVVc2VyRmFpbHVyZUFjdGlvbihcbiAgICAgICAgICB7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IG9mKGNyZWF0ZVVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICApKVxuICApKTtcblxuICBkZWFjdGl2YXRlMmZhJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgb2ZUeXBlKGRlYWN0aXZhdGUyRkFVc2VyQWN0aW9uKSxcbiAgICBleGhhdXN0TWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2UuZGVhY3RpdmF0ZTJmYSgpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gZGVhY3RpdmF0ZTJGQVVzZXJTdWNjZXNzQWN0aW9uKCkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVhY3RpdmF0ZTJGQVVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJ9KSkpLFxuICAgICkpXG4gICkpO1xuXG4gIGRlbGV0ZUN1cnJlbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUoZGVsZXRlQ3VycmVudFVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5yZW1vdmVDdXJyZW50VXNlcigpLnBpcGUoXG4gICAgICAgIG1lcmdlTWFwKChzdWNjZXNzOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIGRlbGV0ZUN1cnJlbnRVc2VyU3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICAgICAgICBjbGVhckF1dGhlbnRpY2F0aW9uQWN0aW9uKClcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGRlbGV0ZUN1cnJlbnRVc2VyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogbmV3IEh0dHBFcnJvclJlc3BvbnNlKHtzdGF0dXM6IDQwMH0pfSksXG4gICAgICAgICAgXTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZGVsZXRlQ3VycmVudFVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICAgIClcbiAgICApXG4gICkpO1xuXG4gIGdldEN1cnJlbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUoZ2V0Q3VycmVudFVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnBpcGUoXG4gICAgICBtYXAoKHVzZXI6IFVzZXIpID0+IGdldEN1cnJlbnRVc2VyU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogdXNlcn0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YoZ2V0Q3VycmVudFVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJvcn0pKSlcbiAgICApKVxuICApKTtcblxuICBsaXN0Tm90aWZpY2F0aW9ucyQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShsaXN0VXNlck5vdGlmaWNhdGlvbnNBY3Rpb24pLFxuICAgIGNvbmNhdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLmZldGNoQWxsTm90aWZpY2F0aW9ucyhwYXlsb2FkKS5waXBlKFxuICAgICAgbWFwKChhbGxOb3RpZmljYXRpb25zOiBVc2VyTm90aWZpY2F0aW9uW10pID0+IGxpc3RVc2VyTm90aWZpY2F0aW9uc1N1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IGFsbE5vdGlmaWNhdGlvbnN9KSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKGxpc3RVc2VyTm90aWZpY2F0aW9uc0ZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICkpXG4gICkpO1xuXG4gIHJlc2V0UGFzc3dvcmQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUocmVzZXRQYXNzd29yZEFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IHN0cmluZyB9KSA9PiB0aGlzLnVzZXJTZXJ2aWNlLnJlc2V0UGFzc3dvcmQocGF5bG9hZCkucGlwZShcbiAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHZhbHVlID8gcmVzZXRQYXNzd29yZFN1Y2Nlc3NBY3Rpb24oKSA6IHJlc2V0UGFzc3dvcmRGYWlsdXJlQWN0aW9uKCkpXG4gICAgKSlcbiAgKSk7XG5cbiAgcmV0cmlldmUyZmFDb2RlJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgb2ZUeXBlKHJldHJpZXZlMkZBQ29kZVVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5yZXRyaWV2ZTJmYUNvZGUoKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZTogUmV0cmlldmUyZmEpID0+IHJldHJpZXZlMkZBQ29kZVVzZXJTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB2YWx1ZX0pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHJldHJpZXZlMkZBQ29kZVVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJ9KSkpLFxuICAgICkpXG4gICkpO1xuXG4gIHVwZGF0ZUN1cnJlbnQkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUodXBkYXRlQ3VycmVudFVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBVc2VyIH0pID0+IHRoaXMudXNlclNlcnZpY2UudXBkYXRlQ3VycmVudFVzZXIocGF5bG9hZCkucGlwZShcbiAgICAgIG1hcCgodXNlcjogVXNlcikgPT4gdXBkYXRlQ3VycmVudFVzZXJTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB1c2VyfSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih1cGRhdGVDdXJyZW50VXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICkpXG4gICkpO1xuXG4gIHZlcmlmeTJmYSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZSh2ZXJpZnkyRkFVc2VyQWN0aW9uKSxcbiAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogc3RyaW5nIH0pID0+IHRoaXMudXNlclNlcnZpY2UudmVyaWZ5MmZhQ29kZShwYXlsb2FkKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gW1xuICAgICAgICB2ZXJpZnkyRkFVc2VyU3VjY2Vzc0FjdGlvbigpLFxuICAgICAgICBnZXRDdXJyZW50VXNlckFjdGlvbigpXG4gICAgICBdKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHZlcmlmeTJGQVVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJ9KSkpLFxuICAgICkpXG4gICkpO1xuXG4gIHByaXZhdGUgZmV0Y2hBbGxOb3RpZmljYXRpb25zKGNsdWJJZDogc3RyaW5nLCBvZmZzZXQ6IG51bWJlciA9IDAsIGNvbGxlY3RlZE5vdGlmaWNhdGlvbnM6IFVzZXJOb3RpZmljYXRpb25bXSA9IFtdKTogT2JzZXJ2YWJsZTxVc2VyTm90aWZpY2F0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy51c2VyTm90aWZpY2F0aW9uU2VydmljZS5nZXRVc2VyTm90aWZpY2F0aW9ucyhjbHViSWQsIG9mZnNldCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzcG9uc2U6IENvbGxlY3Rpb248VXNlck5vdGlmaWNhdGlvbj4pID0+IHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9ucyA9IHJlc3BvbnNlLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgYWxsTm90aWZpY2F0aW9ucyA9IGNvbGxlY3RlZE5vdGlmaWNhdGlvbnMuY29uY2F0KG5vdGlmaWNhdGlvbnMpO1xuICAgICAgICBpZiAocmVzcG9uc2UubmV4dCkge1xuICAgICAgICAgIC8vIENvbnRpbnVlIGZldGNoaW5nIHRoZSBuZXh0IHBhZ2VcbiAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaEFsbE5vdGlmaWNhdGlvbnMoY2x1YklkLCBvZmZzZXQgKyBub3RpZmljYXRpb25zLmxlbmd0aCwgYWxsTm90aWZpY2F0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gbW9yZSBwYWdlcyB0byBmZXRjaFxuICAgICAgICAgIHJldHVybiBvZihhbGxOb3RpZmljYXRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5lZmZlY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YS1hY2Nlc3Mvc3JjL2xpYi9zdG9yZS9lZmZlY3RzL3VzZXIuZWZmZWN0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLGdDQUFnQyxFQUNoQyxnQ0FBZ0MsRUFDaEMsdUJBQXVCLEVBQ3ZCLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQiwwQkFBMEIsR0FDM0IsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFjLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxF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QUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzsrR0F4SVUsV0FBVzttSEFBWCxXQUFXOzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBjcmVhdGVFZmZlY3QsIG9mVHlwZSB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMnO1xuaW1wb3J0IHsgTmV3QWNjb3VudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiwgUmV0cmlldmUyZmEsIFVzZXIsIFVzZXJOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgVXNlck5vdGlmaWNhdGlvblNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgYWN0aXZhdGUyRkFVc2VyQWN0aW9uLFxuICBhY3RpdmF0ZTJGQVVzZXJGYWlsdXJlQWN0aW9uLFxuICBhY3RpdmF0ZTJGQVVzZXJTdWNjZXNzQWN0aW9uLFxuICBhY3RpdmF0ZVVzZXJBY3Rpb24sXG4gIGFjdGl2YXRlVXNlckZhaWx1cmVBY3Rpb24sXG4gIGFjdGl2YXRlVXNlclN1Y2Nlc3NBY3Rpb24sXG4gIGNsZWFyQXV0aGVudGljYXRpb25BY3Rpb24sXG4gIGNyZWF0ZVVzZXJBY3Rpb24sXG4gIGNyZWF0ZVVzZXJGYWlsdXJlQWN0aW9uLFxuICBjcmVhdGVVc2VyU3VjY2Vzc0FjdGlvbixcbiAgZGVhY3RpdmF0ZTJGQVVzZXJBY3Rpb24sXG4gIGRlYWN0aXZhdGUyRkFVc2VyRmFpbHVyZUFjdGlvbixcbiAgZGVhY3RpdmF0ZTJGQVVzZXJTdWNjZXNzQWN0aW9uLFxuICBkZWxldGVDdXJyZW50VXNlckFjdGlvbixcbiAgZGVsZXRlQ3VycmVudFVzZXJGYWlsdXJlQWN0aW9uLFxuICBkZWxldGVDdXJyZW50VXNlclN1Y2Nlc3NBY3Rpb24sXG4gIGdldEN1cnJlbnRVc2VyQWN0aW9uLFxuICBnZXRDdXJyZW50VXNlckZhaWx1cmVBY3Rpb24sXG4gIGdldEN1cnJlbnRVc2VyU3VjY2Vzc0FjdGlvbixcbiAgbGlzdFVzZXJOb3RpZmljYXRpb25zQWN0aW9uLFxuICBsaXN0VXNlck5vdGlmaWNhdGlvbnNGYWlsdXJlQWN0aW9uLFxuICBsaXN0VXNlck5vdGlmaWNhdGlvbnNTdWNjZXNzQWN0aW9uLFxuICByZXNldFBhc3N3b3JkQWN0aW9uLFxuICByZXNldFBhc3N3b3JkRmFpbHVyZUFjdGlvbixcbiAgcmVzZXRQYXNzd29yZFN1Y2Nlc3NBY3Rpb24sXG4gIHJldHJpZXZlMkZBQ29kZVVzZXJBY3Rpb24sXG4gIHJldHJpZXZlMkZBQ29kZVVzZXJGYWlsdXJlQWN0aW9uLFxuICByZXRyaWV2ZTJGQUNvZGVVc2VyU3VjY2Vzc0FjdGlvbixcbiAgdXBkYXRlQ3VycmVudFVzZXJBY3Rpb24sXG4gIHVwZGF0ZUN1cnJlbnRVc2VyRmFpbHVyZUFjdGlvbixcbiAgdXBkYXRlQ3VycmVudFVzZXJTdWNjZXNzQWN0aW9uLFxuICB2ZXJpZnkyRkFVc2VyQWN0aW9uLFxuICB2ZXJpZnkyRkFVc2VyRmFpbHVyZUFjdGlvbixcbiAgdmVyaWZ5MkZBVXNlclN1Y2Nlc3NBY3Rpb24sXG59IGZyb20gJy4uL2FjdGlvbnMnO1xuaW1wb3J0IHsgY29uY2F0TWFwLCBleGhhdXN0TWFwLCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBY3RpdmF0ZVVzZXJJbnRlcmZhY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJFZmZlY3RzIHtcbiAgcHJpdmF0ZSBhY3Rpb25zJCA9IGluamVjdChBY3Rpb25zKTtcbiAgcHJpdmF0ZSB1c2VyU2VydmljZSA9IGluamVjdChVc2VyU2VydmljZSk7XG4gIHByaXZhdGUgdXNlck5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoVXNlck5vdGlmaWNhdGlvblNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgYWN0aXZhdGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUoYWN0aXZhdGVVc2VyQWN0aW9uKSxcbiAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHtcbiAgICAgIHBheWxvYWQ6IEFjdGl2YXRlVXNlckludGVyZmFjZVxuICAgIH0pID0+IHRoaXMudXNlclNlcnZpY2UuYWN0aXZhdGVVc2VyKHBheWxvYWQudWlkYjY0LCBwYXlsb2FkLnRva2VuKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4gdmFsdWUgPyBhY3RpdmF0ZVVzZXJTdWNjZXNzQWN0aW9uKCkgOiBhY3RpdmF0ZVVzZXJGYWlsdXJlQWN0aW9uKCkpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihhY3RpdmF0ZVVzZXJGYWlsdXJlQWN0aW9uKCkpKSxcbiAgICApKVxuICApKTtcblxuICBhY3RpdmF0ZTJmYSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShhY3RpdmF0ZTJGQVVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBzdHJpbmcgfSkgPT4gdGhpcy51c2VyU2VydmljZS5hY3RpdmF0ZTJmYShwYXlsb2FkKS5waXBlKFxuICAgICAgbWFwKCgpID0+IGFjdGl2YXRlMkZBVXNlclN1Y2Nlc3NBY3Rpb24oKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihhY3RpdmF0ZTJGQVVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBlcnJ9KSkpLFxuICAgICkpXG4gICkpO1xuXG4gIGNyZWF0ZSQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShjcmVhdGVVc2VyQWN0aW9uKSxcbiAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogTmV3QWNjb3VudEludGVyZmFjZSB9KSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZVVzZXIocGF5bG9hZCkucGlwZShcbiAgICAgIG1hcCgodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVVzZXJTdWNjZXNzQWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVVzZXJGYWlsdXJlQWN0aW9uKFxuICAgICAgICAgIHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9XG4gICAgICAgICk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4gb2YoY3JlYXRlVXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICkpXG4gICkpO1xuXG4gIGRlYWN0aXZhdGUyZmEkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUoZGVhY3RpdmF0ZTJGQVVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5kZWFjdGl2YXRlMmZhKCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiBkZWFjdGl2YXRlMkZBVXNlclN1Y2Nlc3NBY3Rpb24oKSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWFjdGl2YXRlMkZBVXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycn0pKSksXG4gICAgKSlcbiAgKSk7XG5cbiAgZGVsZXRlQ3VycmVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShkZWxldGVDdXJyZW50VXNlckFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLnJlbW92ZUN1cnJlbnRVc2VyKCkucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKHN1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgZGVsZXRlQ3VycmVudFVzZXJTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgICAgICAgIGNsZWFyQXV0aGVudGljYXRpb25BY3Rpb24oKVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZGVsZXRlQ3VycmVudFVzZXJGYWlsdXJlQWN0aW9uKHtwYXlsb2FkOiBuZXcgSHR0cEVycm9yUmVzcG9uc2Uoe3N0YXR1czogNDAwfSl9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihkZWxldGVDdXJyZW50VXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICAgKVxuICAgIClcbiAgKSk7XG5cbiAgZ2V0Q3VycmVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShnZXRDdXJyZW50VXNlckFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkucGlwZShcbiAgICAgIG1hcCgodXNlcjogVXNlcikgPT4gZ2V0Q3VycmVudFVzZXJTdWNjZXNzQWN0aW9uKHtwYXlsb2FkOiB1c2VyfSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZihnZXRDdXJyZW50VXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycm9yfSkpKVxuICAgICkpXG4gICkpO1xuXG4gIGxpc3ROb3RpZmljYXRpb25zJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgb2ZUeXBlKGxpc3RVc2VyTm90aWZpY2F0aW9uc0FjdGlvbiksXG4gICAgY29uY2F0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogc3RyaW5nIH0pID0+IHRoaXMuZmV0Y2hBbGxOb3RpZmljYXRpb25zKHBheWxvYWQpLnBpcGUoXG4gICAgICBtYXAoKGFsbE5vdGlmaWNhdGlvbnM6IFVzZXJOb3RpZmljYXRpb25bXSkgPT4gbGlzdFVzZXJOb3RpZmljYXRpb25zU3VjY2Vzc0FjdGlvbih7cGF5bG9hZDogYWxsTm90aWZpY2F0aW9uc30pKSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YobGlzdFVzZXJOb3RpZmljYXRpb25zRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgKSlcbiAgKSk7XG5cbiAgcmVzZXRQYXNzd29yZCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZShyZXNldFBhc3N3b3JkQWN0aW9uKSxcbiAgICBleGhhdXN0TWFwKCh7cGF5bG9hZH06IHsgcGF5bG9hZDogc3RyaW5nIH0pID0+IHRoaXMudXNlclNlcnZpY2UucmVzZXRQYXNzd29yZChwYXlsb2FkKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZTogYm9vbGVhbikgPT4gdmFsdWUgPyByZXNldFBhc3N3b3JkU3VjY2Vzc0FjdGlvbigpIDogcmVzZXRQYXNzd29yZEZhaWx1cmVBY3Rpb24oKSlcbiAgICApKVxuICApKTtcblxuICByZXRyaWV2ZTJmYUNvZGUkID0gY3JlYXRlRWZmZWN0KCgpID0+IHRoaXMuYWN0aW9ucyQucGlwZShcbiAgICBvZlR5cGUocmV0cmlldmUyRkFDb2RlVXNlckFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLnJldHJpZXZlMmZhQ29kZSgpLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlOiBSZXRyaWV2ZTJmYSkgPT4gcmV0cmlldmUyRkFDb2RlVXNlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHZhbHVlfSkpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YocmV0cmlldmUyRkFDb2RlVXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycn0pKSksXG4gICAgKSlcbiAgKSk7XG5cbiAgdXBkYXRlQ3VycmVudCQgPSBjcmVhdGVFZmZlY3QoKCkgPT4gdGhpcy5hY3Rpb25zJC5waXBlKFxuICAgIG9mVHlwZSh1cGRhdGVDdXJyZW50VXNlckFjdGlvbiksXG4gICAgZXhoYXVzdE1hcCgoe3BheWxvYWR9OiB7IHBheWxvYWQ6IFVzZXIgfSkgPT4gdGhpcy51c2VyU2VydmljZS51cGRhdGVDdXJyZW50VXNlcihwYXlsb2FkKS5waXBlKFxuICAgICAgbWFwKCh1c2VyOiBVc2VyKSA9PiB1cGRhdGVDdXJyZW50VXNlclN1Y2Nlc3NBY3Rpb24oe3BheWxvYWQ6IHVzZXJ9KSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHVwZGF0ZUN1cnJlbnRVc2VyRmFpbHVyZUFjdGlvbih7cGF5bG9hZDogZXJyb3J9KSkpXG4gICAgKSlcbiAgKSk7XG5cbiAgdmVyaWZ5MmZhJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PiB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gICAgb2ZUeXBlKHZlcmlmeTJGQVVzZXJBY3Rpb24pLFxuICAgIGV4aGF1c3RNYXAoKHtwYXlsb2FkfTogeyBwYXlsb2FkOiBzdHJpbmcgfSkgPT4gdGhpcy51c2VyU2VydmljZS52ZXJpZnkyZmFDb2RlKHBheWxvYWQpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoKSA9PiBbXG4gICAgICAgIHZlcmlmeTJGQVVzZXJTdWNjZXNzQWN0aW9uKCksXG4gICAgICAgIGdldEN1cnJlbnRVc2VyQWN0aW9uKClcbiAgICAgIF0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gb2YodmVyaWZ5MkZBVXNlckZhaWx1cmVBY3Rpb24oe3BheWxvYWQ6IGVycn0pKSksXG4gICAgKSlcbiAgKSk7XG5cbiAgcHJpdmF0ZSBmZXRjaEFsbE5vdGlmaWNhdGlvbnMoY2x1YklkOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyID0gMCwgY29sbGVjdGVkTm90aWZpY2F0aW9uczogVXNlck5vdGlmaWNhdGlvbltdID0gW10pOiBPYnNlcnZhYmxlPFVzZXJOb3RpZmljYXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJOb3RpZmljYXRpb25TZXJ2aWNlLmdldFVzZXJOb3RpZmljYXRpb25zKGNsdWJJZCwgb2Zmc2V0KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNwb25zZTogQ29sbGVjdGlvbjxVc2VyTm90aWZpY2F0aW9uPikgPT4ge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25zID0gcmVzcG9uc2UudG9BcnJheSgpO1xuICAgICAgICBjb25zdCBhbGxOb3RpZmljYXRpb25zID0gY29sbGVjdGVkTm90aWZpY2F0aW9ucy5jb25jYXQobm90aWZpY2F0aW9ucyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5uZXh0KSB7XG4gICAgICAgICAgLy8gQ29udGludWUgZmV0Y2hpbmcgdGhlIG5leHQgcGFnZVxuICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoQWxsTm90aWZpY2F0aW9ucyhjbHViSWQsIG9mZnNldCArIG5vdGlmaWNhdGlvbnMubGVuZ3RoLCBhbGxOb3RpZmljYXRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBObyBtb3JlIHBhZ2VzIHRvIGZldGNoXG4gICAgICAgICAgcmV0dXJuIG9mKGFsbE5vdGlmaWNhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==