@tuki-io/tuki-widgets 0.0.211 → 0.0.213

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 (169) hide show
  1. package/README.md +24 -24
  2. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  3. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  4. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  5. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  6. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  7. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  8. package/esm2020/lib/widgets.component.mjs +9 -9
  9. package/esm2020/lib/widgets.module.mjs +1 -1
  10. package/esm2020/lib/widgets.service.mjs +1 -1
  11. package/esm2020/public-api.mjs +1 -1
  12. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  13. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  14. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  15. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  16. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  17. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  18. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  19. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  20. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  21. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  22. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  23. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  24. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
  25. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  26. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  27. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
  28. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
  29. package/esm2020/user-device-manage/public-api.mjs +1 -1
  30. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  31. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  32. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  33. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  34. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  35. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  36. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  37. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  38. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  39. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  40. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  41. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  42. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  43. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  44. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  45. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  46. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  47. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  48. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  49. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  50. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  51. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
  52. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  53. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  54. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  55. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  56. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  57. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  58. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  59. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  60. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  61. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  62. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  63. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  64. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  65. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  66. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  67. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  68. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  69. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +1 -1
  70. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  71. package/esm2020/user-manage/public-api.mjs +1 -1
  72. package/esm2020/user-manage/src/app.constants.mjs +1 -1
  73. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  74. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  75. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  76. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  77. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  78. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  79. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  80. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  81. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  82. package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
  83. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  84. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  85. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  86. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  87. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  88. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  89. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  90. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  91. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  92. package/esm2020/user-manage/src/material.module.mjs +1 -1
  93. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  94. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  95. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  96. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  97. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  98. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  99. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  100. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  101. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  102. package/esm2020/user-manage/src/services/user.service.mjs +1 -1
  103. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  104. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  105. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  106. package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
  107. package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
  108. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  109. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  110. package/esm2020/users-list/public-api.mjs +1 -1
  111. package/esm2020/users-list/src/app.constants.mjs +3 -1
  112. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  113. package/esm2020/users-list/src/classes/device.mjs +1 -1
  114. package/esm2020/users-list/src/classes/line.mjs +1 -1
  115. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  116. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  117. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  118. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  119. package/esm2020/users-list/src/classes/user-list.mjs +2 -1
  120. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  121. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  122. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  123. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  124. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  125. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  126. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  127. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  128. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  129. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  130. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  131. package/esm2020/users-list/src/services/users-search.service.mjs +28 -2
  132. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  133. package/esm2020/users-list/src/users-list.component.mjs +45 -6
  134. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  135. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  136. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  137. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  138. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  139. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  140. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  141. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  142. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  143. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  144. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  145. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  146. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  147. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +87 -17
  148. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  149. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  150. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  151. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  152. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  153. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  154. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  155. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  156. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  157. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  158. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  159. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  160. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  161. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +85 -17
  162. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  163. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  164. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  165. package/package.json +1 -1
  166. package/users-list/src/app.constants.d.ts +2 -0
  167. package/users-list/src/classes/user-list.d.ts +1 -0
  168. package/users-list/src/services/users-search.service.d.ts +4 -0
  169. package/users-list/src/users-list.component.d.ts +2 -0
@@ -49,12 +49,20 @@ export class UsersListComponent {
49
49
  const normalized = (status || '').toUpperCase();
50
50
  return normalized === 'COMPLETED_WITH_ERRORS';
51
51
  }
52
+ refreshUsersAfterOperation(delayMs = 0) {
53
+ if (delayMs > 0) {
54
+ window.setTimeout(() => this.getMigratedUsers(), delayMs);
55
+ return;
56
+ }
57
+ this.getMigratedUsers();
58
+ }
52
59
  handleCompletedWithErrorsByUserId(userId) {
53
60
  const index = this.getUserIndexById(userId);
54
61
  this.removeUserInMigrationProgress();
55
62
  if (index > -1) {
56
63
  this.setStatusToUser(index, 'Completed with errors');
57
64
  window.setTimeout(() => this.setStatusToUser(index, 'Inactive'), 5000);
65
+ this.refreshUsersAfterOperation(5000);
58
66
  }
59
67
  }
60
68
  isMigrationStatusFailed(status) {
@@ -94,14 +102,25 @@ export class UsersListComponent {
94
102
  this.apiWebexService.token = this.token;
95
103
  this.apiService.apiUrl = this.host + '/dcp';
96
104
  this.apiWebexService.apiUrl = this.host + '/webex';
105
+ this.usersSearchService.getUsersUpgradeStatus(this.usersSearchService.customerId)
106
+ .pipe(takeUntil(this.destroy$))
107
+ .subscribe();
97
108
  this.getMigratedUsers();
98
- const subscription = this.usersSearchService.foundUsers$.subscribe((users) => {
99
- this.initializeDataSource(users);
109
+ const subscription = this.usersSearchService.foundUsers$
110
+ .pipe(takeUntil(this.destroy$))
111
+ .subscribe((users) => {
112
+ if (this.usersSearchService.usersUpgradeStatus?.length) {
113
+ this.initializeDataSource(users);
114
+ }
115
+ else {
116
+ this.subscribeToUpgradeUsersStatus(users);
117
+ }
100
118
  });
101
119
  this.subscriptions.push(subscription);
102
120
  console.log('users list paris 7773');
103
121
  }
104
122
  ngOnDestroy() {
123
+ this.usersSearchService.usersUpgradeStatus = null;
105
124
  if (this.subscriptions?.length) {
106
125
  this.subscriptions.forEach((subscription) => subscription.unsubscribe());
107
126
  }
@@ -161,6 +180,7 @@ export class UsersListComponent {
161
180
  }, () => {
162
181
  this.removeUserInMigrationProgress();
163
182
  this.setStatusToUser(this.getUserIndexById(user.userid), 'Migration Error');
183
+ this.refreshUsersAfterOperation();
164
184
  });
165
185
  this.subscriptions.push(subscription);
166
186
  }
@@ -186,6 +206,7 @@ export class UsersListComponent {
186
206
  }, () => {
187
207
  this.removeUserInMigrationProgress();
188
208
  this.setStatusToUser(index, 'Migration Error');
209
+ this.refreshUsersAfterOperation();
189
210
  });
190
211
  this.subscriptions.push(subscription);
191
212
  }
@@ -220,6 +241,7 @@ export class UsersListComponent {
220
241
  this.totalUsersCount = this.usersSearchService?.total || safeUsers.length;
221
242
  this.setUserMigrationProgress();
222
243
  this.usersSearchService.setMigratedPropToUsers(this.users);
244
+ this.usersSearchService.setUpgradeStatusToUsers(this.users, this.usersSearchService.usersUpgradeStatus);
223
245
  this.dataSource = new MatTableDataSource(this.users);
224
246
  this.applyActiveFilter();
225
247
  }
@@ -352,6 +374,7 @@ export class UsersListComponent {
352
374
  }, () => {
353
375
  this.removeUserInMigrationProgress();
354
376
  this.setStatusToUser(this.moveUserIndex, 'Migration Error');
377
+ this.refreshUsersAfterOperation();
355
378
  });
356
379
  this.subscriptions.push(subscription);
357
380
  }
@@ -632,11 +655,13 @@ export class UsersListComponent {
632
655
  this.setUserPendingStatus(user, 'Active');
633
656
  this.setOriginalUserStatus(user.email, 'Inactive');
634
657
  // this.notifications.success(`${user.userid} successfully activated`);
658
+ this.refreshUsersAfterOperation();
635
659
  });
636
660
  },
637
661
  error: () => {
638
662
  this.setUserPendingStatus(user, 'Inactive');
639
663
  this.notifications.error('Activation failed. Please try again.');
664
+ this.refreshUsersAfterOperation();
640
665
  }
641
666
  });
642
667
  }
@@ -652,10 +677,11 @@ export class UsersListComponent {
652
677
  this.setUserPendingStatus(user, 'Inactive');
653
678
  this.setOriginalUserStatus(user.email, 'Active');
654
679
  // this.notifications.success(`${user.userid} successfully deactivated`);
655
- this.getMigratedUsers();
680
+ this.refreshUsersAfterOperation();
656
681
  },
657
682
  error: () => {
658
683
  this.setUserPendingStatus(user, 'Active');
684
+ this.refreshUsersAfterOperation();
659
685
  }
660
686
  });
661
687
  }
@@ -682,17 +708,20 @@ export class UsersListComponent {
682
708
  if (this.isMigrationStatusFailed(status)) {
683
709
  this.removeUserInMigrationProgress();
684
710
  this.setStatusToUser(index, 'Migration Error');
711
+ this.refreshUsersAfterOperation();
685
712
  return;
686
713
  }
687
714
  if (this.isMigrationStatusCompleted(status)) {
688
715
  this.removeUserInMigrationProgress();
689
716
  this.setStatusToUser(index, 'Active');
717
+ this.refreshUsersAfterOperation();
690
718
  onCompleted();
691
719
  }
692
720
  },
693
721
  error: () => {
694
722
  this.removeUserInMigrationProgress();
695
723
  this.setStatusToUser(index, 'Migration Error');
724
+ this.refreshUsersAfterOperation();
696
725
  },
697
726
  });
698
727
  this.subscriptions.push(subscription);
@@ -718,6 +747,7 @@ export class UsersListComponent {
718
747
  if (index > -1) {
719
748
  this.setStatusToUser(index, 'Migration Error');
720
749
  }
750
+ this.refreshUsersAfterOperation();
721
751
  return;
722
752
  }
723
753
  if (this.isMigrationStatusCompleted(status)) {
@@ -725,6 +755,7 @@ export class UsersListComponent {
725
755
  if (index > -1) {
726
756
  this.setStatusToUser(index, 'Active');
727
757
  }
758
+ this.refreshUsersAfterOperation();
728
759
  onCompleted();
729
760
  }
730
761
  },
@@ -734,6 +765,7 @@ export class UsersListComponent {
734
765
  if (index > -1) {
735
766
  this.setStatusToUser(index, 'Migration Error');
736
767
  }
768
+ this.refreshUsersAfterOperation();
737
769
  },
738
770
  });
739
771
  this.subscriptions.push(subscription);
@@ -747,12 +779,19 @@ export class UsersListComponent {
747
779
  originalUser.status = status;
748
780
  }
749
781
  }
782
+ subscribeToUpgradeUsersStatus(users) {
783
+ this.usersSearchService.quickUpgradeStatusUsers$
784
+ .pipe(takeUntil(this.destroy$))
785
+ .subscribe(() => {
786
+ this.initializeDataSource(users);
787
+ });
788
+ }
750
789
  }
751
790
  UsersListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersListComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }, { token: i3.ApiWebexService }, { token: i4.NotificationService }, { token: i5.UsersSearchService }, { token: i6.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
752
- UsersListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UsersListComponent, selector: "app-users-list", inputs: { token: "token", customerId: "customerId", siteId: "siteId", host: "host" }, outputs: { openUser: "openUser", userMoved: "userMoved", switchToWizard: "switchToWizard", createUserRequested: "createUserRequested" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending\"></app-loader>\r\n<div *ngIf=\"!showMoveUserWizard\" id=\"users-list\">\r\n <tk-users-table-toolbar\r\n [totalUsersCount]=\"totalUsersCount\"\r\n [searchValue]=\"activeSearchToken\"\r\n [selectedUserType]=\"activeUserType\"\r\n (searchChange)=\"searchUsers($event)\"\r\n (searchByType)=\"searchByType($event)\"\r\n (addUser)=\"onCreateUserRequested()\"\r\n ></tk-users-table-toolbar>\r\n <table\r\n class=\"webex-table\"\r\n mat-table\r\n *ngIf=\"users?.length\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n >\r\n <!-- <ng-container matColumnDef=\"user-icon\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\"></th>\r\n <td class=\"user-site\" mat-cell *matCellDef=\"let user\"\r\n [ngClass]=\"{'disabled-user-row': moveUserPending && moveInProgressUserId && moveInProgressUserId === user?.userid}\"\r\n (click)=\"onUserClick(user)\">\r\n <span class=\"icon-webex-box\"><span class=\"icon-webex icon-webex-user\"></span></span>\r\n </td>\r\n </ng-container> -->\r\n\r\n <ng-container matColumnDef=\"name\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 60px\"\r\n >\r\n Display name\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <div class=\"display-name-wrapper\">\r\n <span\r\n class=\"user-name-text\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n >\r\n {{ user.firstName }} {{ user.lastName }}\r\n </span>\r\n <span class=\"icon-webex-box\"\r\n ><span class=\"icon-webex icon-webex-user\"></span\r\n ></span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"email\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">Email</th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.email }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"status\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Status\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n [matTooltip]=\"\r\n user.status !== 'Active' && user.webexUUID\r\n ? 'Pending cutover to MT. Please contact your administrator for details.'\r\n : ''\r\n \"\r\n matTooltipPosition=\"above\"\r\n >\r\n <span\r\n class=\"icon-user-status\"\r\n [ngClass]=\"{ 'icon-user-status-active': user.status === 'Active' }\"\r\n ></span\r\n >{{ user.status }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 24px; padding-top: 4px\"\r\n >\r\n <img src=\"assets/icons/settings-regular.svg\" width=\"16\" alt=\"\" />\r\n </th>\r\n <td\r\n class=\"user-site actions-cell\"\r\n mat-cell\r\n *matCellDef=\"let user; let i = index\"\r\n style=\"position: relative\"\r\n >\r\n <mat-progress-spinner\r\n class=\"field-spinner\"\r\n [diameter]=\"30\"\r\n strokeWidth=\"3\"\r\n mode=\"indeterminate\"\r\n *ngIf=\"\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n \"\r\n ></mat-progress-spinner>\r\n <button\r\n *ngIf=\"\r\n !(\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n ) &&\r\n !(\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === user?.userid\r\n )\r\n \"\r\n class=\"button-action-dot\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n >\r\n <div class=\"icon-actions-dots\">\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n </div>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item [disabled]=\"true\">Resend Invitation</button>\r\n <button mat-menu-item [disabled]=\"true\">Reset Password</button>\r\n <button\r\n *ngIf=\"!user.webexUUID && user.cucmId == ON_PREM_ID\"\r\n mat-menu-item\r\n [disabled]=\"true\"\r\n matTooltip=\"Coming soon\"\r\n matTooltipPosition=\"right\"\r\n >\r\n Enable AI Transcribe\r\n </button>\r\n <button\r\n [disabled]=\"user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'QuickMove', 'MT')\"\r\n >\r\n Quick Upgrade User to MT\r\n </button>\r\n <button\r\n [disabled]=\"user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'MT', 'MT')\"\r\n >\r\n Upgrade User to MT\r\n </button>\r\n <button\r\n *ngIf=\"user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'DI', 'DI')\"\r\n >\r\n Revert User to UCM/DI\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isValidWebexUuid(user) || user.status !== 'Inactive'\"\r\n (click)=\"onFirmwareUpgradeClicked(user)\"\r\n >\r\n Activate User\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!user.webexUUID || user.status !== 'Active'\"\r\n (click)=\"onRevertClicked(user)\"\r\n >\r\n Revert\r\n </button>\r\n <button mat-menu-item [disabled]=\"true\">Delete User</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"role\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Admin roles\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.roleName || \"-\" }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"source\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Provisioning Type\r\n </th>\r\n <td\r\n class=\"user-provisioning-type\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <ng-container *ngIf=\"user.webexUUID\">\r\n <span class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/webex.svg\"\r\n [matTooltip]=\"'Webex Calling'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user.webexUUID\">\r\n <span *ngIf=\"user.cucmId == ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/local_24.svg\"\r\n width=\"20\"\r\n alt=\"\"\r\n [matTooltip]=\"'UCM'\"\r\n matTooltipPosition=\"right\"\r\n /></span>\r\n <span *ngIf=\"user.cucmId != ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/di_cloud_24.svg\"\r\n [matTooltip]=\"'Webex Calling DI'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"last-active-time\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Last active time\r\n <!-- <mat-icon class=\"info-icon\">info</mat-icon> -->\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ getTodayShortDate() }}\r\n </td>\r\n /\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n [ngClass]=\"{\r\n 'disabled-user-row':\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === row?.userid,\r\n 'inactive-user-row': row.status !== 'Active',\r\n }\"\r\n ></tr>\r\n </table>\r\n\r\n <app-pagination\r\n [pagination]=\"usersSearchService.getPagination()\"\r\n [showPageSizeOptions]=\"true\"\r\n (pageNumberChangeEmitter)=\"pageNumberChangeEvent($event)\"\r\n (pageEmitter)=\"pageEvent($event)\"\r\n >\r\n </app-pagination>\r\n</div>\r\n\r\n<app-move-user-wizard\r\n *ngIf=\"showMoveUserWizard\"\r\n [user]=\"moveUser\"\r\n (done)=\"closeMoveUserWizard(true)\"\r\n [customerId]=\"customerId\"\r\n (runMoveUser)=\"runMoveUserToMT()\"\r\n (closeMoveUserWizard)=\"closeMoveUserWizard(false)\"\r\n></app-move-user-wizard>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";#users-list{letter-spacing:.5px}.header-with-info{display:flex;align-items:center;gap:.5rem}.header-with-info .info-icon{font-size:16px;color:#c3c3c3;cursor:pointer}table.mat-table{border-spacing:0;width:100%}::ng-deep .mat-paginator{background:none}.icon-user-status{width:.5rem;height:.5rem;border-radius:50%;background-color:#707070;margin:0 5px 0 0}.icon-user-status.icon-user-status-active{background-color:#1d805f;display:inline-block}.mat-select{height:100%;line-height:35px}.mat-form-field-wrapper{padding-bottom:0!important}.mat-form-field{padding:0;max-width:300px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:.7rem;line-height:1rem;background:#545454;border-radius:2rem;line-height:40px;text-align:center;flex-shrink:0}.icon-webex{filter:brightness(0) invert(1);background-repeat:no-repeat;background-position:center;display:inline-block;height:20px;width:20px;background-size:contain}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22M23.23 16.757a5.746 5.746 0 1 0-7.041-9.048 5 5 0 0 0 .071-.705 4.75 4.75 0 1 0-7.705 3.689 8.43 8.43 0 0 0-6.305 7.84c0 1.052.543 2.521 3.13 3.55 1.643.595 3.371.92 5.118.965a7.8 7.8 0 0 0-.248 1.926c0 1.1.57 2.636 3.285 3.716a18.1 18.1 0 0 0 6.463 1.06c4.853 0 9.75-1.476 9.75-4.776a8.86 8.86 0 0 0-6.517-8.217M20 7.755a4.25 4.25 0 0 1 .006 8.499h-.013a4.25 4.25 0 0 1 .007-8.5M8.26 7.004a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0m2.76 14.574c-4.177-.093-7.27-1.368-7.27-3.045 0-3.737 3.478-6.778 7.752-6.778a8.7 8.7 0 0 1 2.757.45 5.75 5.75 0 0 0 2.508 4.552 9.43 9.43 0 0 0-5.747 4.82m8.978 6.672c-4.703 0-8.249-1.408-8.249-3.276 0-3.982 3.7-7.22 8.25-7.22s8.248 3.238 8.248 7.22c0 1.868-3.546 3.276-8.25 3.276%22%2F%3E%3C%2Fsvg%3E\")}.icon-webex-info{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%2211%22 stroke%3D%22currentColor%22 stroke-width%3D%221.5%22%2F%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%227.5%22 r%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D %3Crect x%3D%2211%22 y%3D%2210%22 width%3D%222%22 height%3D%227%22 rx%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-webex-cogs{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%223.5%22 stroke%3D%22currentColor%22 stroke-width%3D%221.2%22%2F%3E%0D %0D %3Cpath d%3D%22M12 2C12.8 2 13.5 2.5 13.8 3.2L14.2 4.2C14.4 4.8 15 5.2 15.7 5.1L16.8 4.9C17.8 4.7 18.8 5.2 19.3 6.1L20.5 8.2C21 9.1 20.9 10.2 20.1 11L19.4 11.6C18.9 12 18.9 12.7 19.4 13.1L20.1 13.7C20.9 14.5 21 15.6 20.5 16.5L19.3 18.6C18.8 19.5 17.8 20 16.8 19.8L15.7 19.6C15 19.5 14.4 19.9 14.2 20.5L13.8 21.5C13.5 22.2 12.8 22.7 12 22.7C11.2 22.7 10.5 22.2 10.2 21.5L9.8 20.5C9.6 19.9 9 19.5 8.3 19.6L7.2 19.8C6.2 20 5.2 19.5 4.7 18.6L3.5 16.5C3 15.6 3.1 14.5 3.9 13.7L4.6 13.1C5.1 12.7 5.1 12 4.6 11.6L3.9 11C3.1 10.2 3 9.1 3.5 8.2L4.7 6.1C5.2 5.2 6.2 4.7 7.2 4.9L8.3 5.1C9 5.2 9.6 4.8 9.8 4.2L10.2 3.2C10.5 2.5 11.2 2 12 2Z%22 %0D stroke%3D%22currentColor%22 %0D stroke-width%3D%221.2%22 %0D stroke-linejoin%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;font-style:normal}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}:host .mat-progress-spinner circle,:host .mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-size:14px}.user-info-box h3{display:block;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#ededed;color:#636363;font-size:12px}.webex-table th:hover{background-color:#dedede}.webex-table th ::ng-deep .mat-icon{font-size:16px;display:flex;align-items:center}.webex-table tr{background:#fff;color:#000000f2;font-size:14px}.webex-table tr:hover:not(.disabled-user-row){background:#ededed;cursor:pointer}.webex-table tr.inactive-user-row{opacity:.35}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{padding:0 24px 0 12px;border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.webex-table .display-name-wrapper{display:flex;align-items:center;justify-content:left;flex-flow:row-reverse;gap:1rem}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important;line-height:35px!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-wrapper,.mat-form-field-flex{height:30px!important}.mat-form-field-appearance-outline .mat-form-field-outline,.mat-form-field-outline .mat-form-field-outline-thick{height:35px!important}.mat-select{line-height:20px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:14px 12px 10px;border-top:0;max-width:300px}.mat-tab-group{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.mat-tab-label{font-weight:500!important;font-size:14px!important;height:auto!important;min-width:auto!important;padding:0!important}.mat-ink-bar{background-color:#000000e6!important;height:3px!important}.mat-form-field-wrapper{padding-bottom:0}.mat-form-field{max-width:300px}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}:host ::ng-deep .mat-form-field-wrapper{height:30px}:host ::ng-deep .mat-form-field-flex{height:30px}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:host ::ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}:host ::ng-deep .mat-select{line-height:20px}:host ::ng-deep .mat-form-field-infix{border-top:0px!important}:host ::ng-deep .mat-paginator{background:transparent!important}:host ::ng-deep .mat-paginator-container{min-height:30px!important}:host ::ng-deep .mat-paginator-range-label{margin:0 10px 0 24px!important;font-size:15px!important}:host ::ng-deep .pagination{font-size:13px;color:#0000008a}:host ::ng-deep .per-page-block{display:flex;line-height:42px!important}:host ::ng-deep .item_per_page{line-height:42px!important}:host ::ng-deep .select-page-size{line-height:42px!important}:host ::ng-deep mat-progress-spinner.page-spinner{position:fixed;margin:auto;inset:0}:host ::ng-deep mat-progress-spinner.field-spinner{position:absolute;margin:-15px -29px}:host ::ng-deep mat-progress-spinner.tab-spinner{position:relative;margin:0 auto auto}.icon-dot{display:block;color:#4f4f4f;font-size:16px;line-height:5px}.button-action-dot:hover{background:#dfdfdf}.button-action-dot{padding:0 5px 5px;border-radius:.25rem}.actions-cell .field-spinner{position:absolute;right:32px;top:50%;transform:translateY(-50%);margin:0}.user-provisioning-type{text-align:start}.user-provisioning-type .icon-wrapper{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.PaginationComponent, selector: "app-pagination", inputs: ["pagination", "showPageSizeOptions", "showRefreshButton", "lengthPending"], outputs: ["pageEmitter", "pageNumberChangeEmitter"] }, { kind: "component", type: i14.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i15.MoveUserWizardComponent, selector: "app-move-user-wizard", inputs: ["user", "customerId"], outputs: ["closeMoveUserWizard", "done", "runMoveUser"] }, { kind: "component", type: i16.TableToolbarComponent, selector: "tk-users-table-toolbar", inputs: ["totalUsersCount", "searchValue", "selectedUserType"], outputs: ["searchChange", "searchByType", "addUser"] }] });
791
+ UsersListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UsersListComponent, selector: "app-users-list", inputs: { token: "token", customerId: "customerId", siteId: "siteId", host: "host" }, outputs: { openUser: "openUser", userMoved: "userMoved", switchToWizard: "switchToWizard", createUserRequested: "createUserRequested" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending\"></app-loader>\r\n<div *ngIf=\"!showMoveUserWizard\" id=\"users-list\">\r\n <tk-users-table-toolbar\r\n [totalUsersCount]=\"totalUsersCount\"\r\n [searchValue]=\"activeSearchToken\"\r\n [selectedUserType]=\"activeUserType\"\r\n (searchChange)=\"searchUsers($event)\"\r\n (searchByType)=\"searchByType($event)\"\r\n (addUser)=\"onCreateUserRequested()\"\r\n ></tk-users-table-toolbar>\r\n <table\r\n class=\"webex-table\"\r\n mat-table\r\n *ngIf=\"users?.length\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n >\r\n <!-- <ng-container matColumnDef=\"user-icon\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\"></th>\r\n <td class=\"user-site\" mat-cell *matCellDef=\"let user\"\r\n [ngClass]=\"{'disabled-user-row': moveUserPending && moveInProgressUserId && moveInProgressUserId === user?.userid}\"\r\n (click)=\"onUserClick(user)\">\r\n <span class=\"icon-webex-box\"><span class=\"icon-webex icon-webex-user\"></span></span>\r\n </td>\r\n </ng-container> -->\r\n\r\n <ng-container matColumnDef=\"name\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 60px\"\r\n >\r\n Display name\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <div class=\"display-name-wrapper\">\r\n <span\r\n class=\"user-name-text\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n >\r\n {{ user.firstName }} {{ user.lastName }}\r\n </span>\r\n <span class=\"icon-webex-box\"\r\n ><span class=\"icon-webex icon-webex-user\"></span\r\n ></span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"email\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">Email</th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.email }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"status\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Status\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n [matTooltip]=\"\r\n user.status !== 'Active' && user.webexUUID\r\n ? 'Pending cutover to MT. Please contact your administrator for details.'\r\n : ''\r\n \"\r\n matTooltipPosition=\"above\"\r\n >\r\n <span\r\n class=\"icon-user-status\"\r\n [ngClass]=\"{ 'icon-user-status-active': user.status === 'Active' }\"\r\n ></span\r\n >{{ user.status }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 24px; padding-top: 4px\"\r\n >\r\n <img src=\"assets/icons/settings-regular.svg\" width=\"16\" alt=\"\" />\r\n </th>\r\n <td\r\n class=\"user-site actions-cell\"\r\n mat-cell\r\n *matCellDef=\"let user; let i = index\"\r\n style=\"position: relative\"\r\n >\r\n <mat-progress-spinner\r\n class=\"field-spinner\"\r\n [diameter]=\"30\"\r\n strokeWidth=\"3\"\r\n mode=\"indeterminate\"\r\n *ngIf=\"\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n \"\r\n ></mat-progress-spinner>\r\n <button\r\n *ngIf=\"\r\n !(\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n ) &&\r\n !(\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === user?.userid\r\n )\r\n \"\r\n class=\"button-action-dot\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n >\r\n <div class=\"icon-actions-dots\">\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n </div>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item [disabled]=\"true\">Resend Invitation</button>\r\n <button mat-menu-item [disabled]=\"true\">Reset Password</button>\r\n <button\r\n *ngIf=\"!user.webexUUID && user.cucmId == ON_PREM_ID\"\r\n mat-menu-item\r\n [disabled]=\"true\"\r\n matTooltip=\"Coming soon\"\r\n matTooltipPosition=\"right\"\r\n >\r\n Enable AI Transcribe\r\n </button>\r\n <button\r\n [disabled]=\"!user.isReadyToUpgrade || user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'QuickMove', 'MT')\"\r\n >\r\n Quick Upgrade User to MT\r\n </button>\r\n <button\r\n [disabled]=\"user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'MT', 'MT')\"\r\n >\r\n Upgrade User to MT\r\n </button>\r\n <button\r\n *ngIf=\"user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'DI', 'DI')\"\r\n >\r\n Revert User to UCM/DI\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isValidWebexUuid(user) || user.status !== 'Inactive'\"\r\n (click)=\"onFirmwareUpgradeClicked(user)\"\r\n >\r\n Activate User\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!user.webexUUID || user.status !== 'Active'\"\r\n (click)=\"onRevertClicked(user)\"\r\n >\r\n Revert\r\n </button>\r\n <button mat-menu-item [disabled]=\"true\">Delete User</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"role\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Admin roles\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.roleName || \"-\" }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"source\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Provisioning Type\r\n </th>\r\n <td\r\n class=\"user-provisioning-type\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <ng-container *ngIf=\"user.webexUUID\">\r\n <span class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/webex.svg\"\r\n [matTooltip]=\"'Webex Calling'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user.webexUUID\">\r\n <span *ngIf=\"user.cucmId == ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/local_24.svg\"\r\n width=\"20\"\r\n alt=\"\"\r\n [matTooltip]=\"'UCM'\"\r\n matTooltipPosition=\"right\"\r\n /></span>\r\n <span *ngIf=\"user.cucmId != ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/di_cloud_24.svg\"\r\n [matTooltip]=\"'Webex Calling DI'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"last-active-time\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Last active time\r\n <!-- <mat-icon class=\"info-icon\">info</mat-icon> -->\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ getTodayShortDate() }}\r\n </td>\r\n /\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n [ngClass]=\"{\r\n 'disabled-user-row':\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === row?.userid,\r\n 'inactive-user-row': row.status !== 'Active',\r\n }\"\r\n ></tr>\r\n </table>\r\n\r\n <app-pagination\r\n [pagination]=\"usersSearchService.getPagination()\"\r\n [showPageSizeOptions]=\"true\"\r\n (pageNumberChangeEmitter)=\"pageNumberChangeEvent($event)\"\r\n (pageEmitter)=\"pageEvent($event)\"\r\n >\r\n </app-pagination>\r\n</div>\r\n\r\n<app-move-user-wizard\r\n *ngIf=\"showMoveUserWizard\"\r\n [user]=\"moveUser\"\r\n (done)=\"closeMoveUserWizard(true)\"\r\n [customerId]=\"customerId\"\r\n (runMoveUser)=\"runMoveUserToMT()\"\r\n (closeMoveUserWizard)=\"closeMoveUserWizard(false)\"\r\n></app-move-user-wizard>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";#users-list{letter-spacing:.5px}.header-with-info{display:flex;align-items:center;gap:.5rem}.header-with-info .info-icon{font-size:16px;color:#c3c3c3;cursor:pointer}table.mat-table{border-spacing:0;width:100%}::ng-deep .mat-paginator{background:none}.icon-user-status{width:.5rem;height:.5rem;border-radius:50%;background-color:#707070;margin:0 5px 0 0}.icon-user-status.icon-user-status-active{background-color:#1d805f;display:inline-block}.mat-select{height:100%;line-height:35px}.mat-form-field-wrapper{padding-bottom:0!important}.mat-form-field{padding:0;max-width:300px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:.7rem;line-height:1rem;background:#545454;border-radius:2rem;line-height:40px;text-align:center;flex-shrink:0}.icon-webex{filter:brightness(0) invert(1);background-repeat:no-repeat;background-position:center;display:inline-block;height:20px;width:20px;background-size:contain}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22M23.23 16.757a5.746 5.746 0 1 0-7.041-9.048 5 5 0 0 0 .071-.705 4.75 4.75 0 1 0-7.705 3.689 8.43 8.43 0 0 0-6.305 7.84c0 1.052.543 2.521 3.13 3.55 1.643.595 3.371.92 5.118.965a7.8 7.8 0 0 0-.248 1.926c0 1.1.57 2.636 3.285 3.716a18.1 18.1 0 0 0 6.463 1.06c4.853 0 9.75-1.476 9.75-4.776a8.86 8.86 0 0 0-6.517-8.217M20 7.755a4.25 4.25 0 0 1 .006 8.499h-.013a4.25 4.25 0 0 1 .007-8.5M8.26 7.004a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0m2.76 14.574c-4.177-.093-7.27-1.368-7.27-3.045 0-3.737 3.478-6.778 7.752-6.778a8.7 8.7 0 0 1 2.757.45 5.75 5.75 0 0 0 2.508 4.552 9.43 9.43 0 0 0-5.747 4.82m8.978 6.672c-4.703 0-8.249-1.408-8.249-3.276 0-3.982 3.7-7.22 8.25-7.22s8.248 3.238 8.248 7.22c0 1.868-3.546 3.276-8.25 3.276%22%2F%3E%3C%2Fsvg%3E\")}.icon-webex-info{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%2211%22 stroke%3D%22currentColor%22 stroke-width%3D%221.5%22%2F%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%227.5%22 r%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D %3Crect x%3D%2211%22 y%3D%2210%22 width%3D%222%22 height%3D%227%22 rx%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-webex-cogs{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%223.5%22 stroke%3D%22currentColor%22 stroke-width%3D%221.2%22%2F%3E%0D %0D %3Cpath d%3D%22M12 2C12.8 2 13.5 2.5 13.8 3.2L14.2 4.2C14.4 4.8 15 5.2 15.7 5.1L16.8 4.9C17.8 4.7 18.8 5.2 19.3 6.1L20.5 8.2C21 9.1 20.9 10.2 20.1 11L19.4 11.6C18.9 12 18.9 12.7 19.4 13.1L20.1 13.7C20.9 14.5 21 15.6 20.5 16.5L19.3 18.6C18.8 19.5 17.8 20 16.8 19.8L15.7 19.6C15 19.5 14.4 19.9 14.2 20.5L13.8 21.5C13.5 22.2 12.8 22.7 12 22.7C11.2 22.7 10.5 22.2 10.2 21.5L9.8 20.5C9.6 19.9 9 19.5 8.3 19.6L7.2 19.8C6.2 20 5.2 19.5 4.7 18.6L3.5 16.5C3 15.6 3.1 14.5 3.9 13.7L4.6 13.1C5.1 12.7 5.1 12 4.6 11.6L3.9 11C3.1 10.2 3 9.1 3.5 8.2L4.7 6.1C5.2 5.2 6.2 4.7 7.2 4.9L8.3 5.1C9 5.2 9.6 4.8 9.8 4.2L10.2 3.2C10.5 2.5 11.2 2 12 2Z%22 %0D stroke%3D%22currentColor%22 %0D stroke-width%3D%221.2%22 %0D stroke-linejoin%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;font-style:normal}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}:host .mat-progress-spinner circle,:host .mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-size:14px}.user-info-box h3{display:block;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#ededed;color:#636363;font-size:12px}.webex-table th:hover{background-color:#dedede}.webex-table th ::ng-deep .mat-icon{font-size:16px;display:flex;align-items:center}.webex-table tr{background:#fff;color:#000000f2;font-size:14px}.webex-table tr:hover:not(.disabled-user-row){background:#ededed;cursor:pointer}.webex-table tr.inactive-user-row{opacity:.35}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{padding:0 24px 0 12px;border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.webex-table .display-name-wrapper{display:flex;align-items:center;justify-content:left;flex-flow:row-reverse;gap:1rem}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important;line-height:35px!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-wrapper,.mat-form-field-flex{height:30px!important}.mat-form-field-appearance-outline .mat-form-field-outline,.mat-form-field-outline .mat-form-field-outline-thick{height:35px!important}.mat-select{line-height:20px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:14px 12px 10px;border-top:0;max-width:300px}.mat-tab-group{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.mat-tab-label{font-weight:500!important;font-size:14px!important;height:auto!important;min-width:auto!important;padding:0!important}.mat-ink-bar{background-color:#000000e6!important;height:3px!important}.mat-form-field-wrapper{padding-bottom:0}.mat-form-field{max-width:300px}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}:host ::ng-deep .mat-form-field-wrapper{height:30px}:host ::ng-deep .mat-form-field-flex{height:30px}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:host ::ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}:host ::ng-deep .mat-select{line-height:20px}:host ::ng-deep .mat-form-field-infix{border-top:0px!important}:host ::ng-deep .mat-paginator{background:transparent!important}:host ::ng-deep .mat-paginator-container{min-height:30px!important}:host ::ng-deep .mat-paginator-range-label{margin:0 10px 0 24px!important;font-size:15px!important}:host ::ng-deep .pagination{font-size:13px;color:#0000008a}:host ::ng-deep .per-page-block{display:flex;line-height:42px!important}:host ::ng-deep .item_per_page{line-height:42px!important}:host ::ng-deep .select-page-size{line-height:42px!important}:host ::ng-deep mat-progress-spinner.page-spinner{position:fixed;margin:auto;inset:0}:host ::ng-deep mat-progress-spinner.field-spinner{position:absolute;margin:-15px -29px}:host ::ng-deep mat-progress-spinner.tab-spinner{position:relative;margin:0 auto auto}.icon-dot{display:block;color:#4f4f4f;font-size:16px;line-height:5px}.button-action-dot:hover{background:#dfdfdf}.button-action-dot{padding:0 5px 5px;border-radius:.25rem}.actions-cell .field-spinner{position:absolute;right:32px;top:50%;transform:translateY(-50%);margin:0}.user-provisioning-type{text-align:start}.user-provisioning-type .icon-wrapper{display:flex;align-items:center}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.PaginationComponent, selector: "app-pagination", inputs: ["pagination", "showPageSizeOptions", "showRefreshButton", "lengthPending"], outputs: ["pageEmitter", "pageNumberChangeEmitter"] }, { kind: "component", type: i14.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i15.MoveUserWizardComponent, selector: "app-move-user-wizard", inputs: ["user", "customerId"], outputs: ["closeMoveUserWizard", "done", "runMoveUser"] }, { kind: "component", type: i16.TableToolbarComponent, selector: "tk-users-table-toolbar", inputs: ["totalUsersCount", "searchValue", "selectedUserType"], outputs: ["searchChange", "searchByType", "addUser"] }] });
753
792
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersListComponent, decorators: [{
754
793
  type: Component,
755
- args: [{ selector: 'app-users-list', template: "<app-loader *ngIf=\"dataPending\"></app-loader>\r\n<div *ngIf=\"!showMoveUserWizard\" id=\"users-list\">\r\n <tk-users-table-toolbar\r\n [totalUsersCount]=\"totalUsersCount\"\r\n [searchValue]=\"activeSearchToken\"\r\n [selectedUserType]=\"activeUserType\"\r\n (searchChange)=\"searchUsers($event)\"\r\n (searchByType)=\"searchByType($event)\"\r\n (addUser)=\"onCreateUserRequested()\"\r\n ></tk-users-table-toolbar>\r\n <table\r\n class=\"webex-table\"\r\n mat-table\r\n *ngIf=\"users?.length\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n >\r\n <!-- <ng-container matColumnDef=\"user-icon\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\"></th>\r\n <td class=\"user-site\" mat-cell *matCellDef=\"let user\"\r\n [ngClass]=\"{'disabled-user-row': moveUserPending && moveInProgressUserId && moveInProgressUserId === user?.userid}\"\r\n (click)=\"onUserClick(user)\">\r\n <span class=\"icon-webex-box\"><span class=\"icon-webex icon-webex-user\"></span></span>\r\n </td>\r\n </ng-container> -->\r\n\r\n <ng-container matColumnDef=\"name\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 60px\"\r\n >\r\n Display name\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <div class=\"display-name-wrapper\">\r\n <span\r\n class=\"user-name-text\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n >\r\n {{ user.firstName }} {{ user.lastName }}\r\n </span>\r\n <span class=\"icon-webex-box\"\r\n ><span class=\"icon-webex icon-webex-user\"></span\r\n ></span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"email\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">Email</th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.email }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"status\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Status\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n [matTooltip]=\"\r\n user.status !== 'Active' && user.webexUUID\r\n ? 'Pending cutover to MT. Please contact your administrator for details.'\r\n : ''\r\n \"\r\n matTooltipPosition=\"above\"\r\n >\r\n <span\r\n class=\"icon-user-status\"\r\n [ngClass]=\"{ 'icon-user-status-active': user.status === 'Active' }\"\r\n ></span\r\n >{{ user.status }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 24px; padding-top: 4px\"\r\n >\r\n <img src=\"assets/icons/settings-regular.svg\" width=\"16\" alt=\"\" />\r\n </th>\r\n <td\r\n class=\"user-site actions-cell\"\r\n mat-cell\r\n *matCellDef=\"let user; let i = index\"\r\n style=\"position: relative\"\r\n >\r\n <mat-progress-spinner\r\n class=\"field-spinner\"\r\n [diameter]=\"30\"\r\n strokeWidth=\"3\"\r\n mode=\"indeterminate\"\r\n *ngIf=\"\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n \"\r\n ></mat-progress-spinner>\r\n <button\r\n *ngIf=\"\r\n !(\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n ) &&\r\n !(\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === user?.userid\r\n )\r\n \"\r\n class=\"button-action-dot\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n >\r\n <div class=\"icon-actions-dots\">\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n </div>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item [disabled]=\"true\">Resend Invitation</button>\r\n <button mat-menu-item [disabled]=\"true\">Reset Password</button>\r\n <button\r\n *ngIf=\"!user.webexUUID && user.cucmId == ON_PREM_ID\"\r\n mat-menu-item\r\n [disabled]=\"true\"\r\n matTooltip=\"Coming soon\"\r\n matTooltipPosition=\"right\"\r\n >\r\n Enable AI Transcribe\r\n </button>\r\n <button\r\n [disabled]=\"user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'QuickMove', 'MT')\"\r\n >\r\n Quick Upgrade User to MT\r\n </button>\r\n <button\r\n [disabled]=\"user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'MT', 'MT')\"\r\n >\r\n Upgrade User to MT\r\n </button>\r\n <button\r\n *ngIf=\"user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'DI', 'DI')\"\r\n >\r\n Revert User to UCM/DI\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isValidWebexUuid(user) || user.status !== 'Inactive'\"\r\n (click)=\"onFirmwareUpgradeClicked(user)\"\r\n >\r\n Activate User\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!user.webexUUID || user.status !== 'Active'\"\r\n (click)=\"onRevertClicked(user)\"\r\n >\r\n Revert\r\n </button>\r\n <button mat-menu-item [disabled]=\"true\">Delete User</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"role\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Admin roles\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.roleName || \"-\" }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"source\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Provisioning Type\r\n </th>\r\n <td\r\n class=\"user-provisioning-type\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <ng-container *ngIf=\"user.webexUUID\">\r\n <span class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/webex.svg\"\r\n [matTooltip]=\"'Webex Calling'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user.webexUUID\">\r\n <span *ngIf=\"user.cucmId == ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/local_24.svg\"\r\n width=\"20\"\r\n alt=\"\"\r\n [matTooltip]=\"'UCM'\"\r\n matTooltipPosition=\"right\"\r\n /></span>\r\n <span *ngIf=\"user.cucmId != ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/di_cloud_24.svg\"\r\n [matTooltip]=\"'Webex Calling DI'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"last-active-time\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Last active time\r\n <!-- <mat-icon class=\"info-icon\">info</mat-icon> -->\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ getTodayShortDate() }}\r\n </td>\r\n /\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n [ngClass]=\"{\r\n 'disabled-user-row':\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === row?.userid,\r\n 'inactive-user-row': row.status !== 'Active',\r\n }\"\r\n ></tr>\r\n </table>\r\n\r\n <app-pagination\r\n [pagination]=\"usersSearchService.getPagination()\"\r\n [showPageSizeOptions]=\"true\"\r\n (pageNumberChangeEmitter)=\"pageNumberChangeEvent($event)\"\r\n (pageEmitter)=\"pageEvent($event)\"\r\n >\r\n </app-pagination>\r\n</div>\r\n\r\n<app-move-user-wizard\r\n *ngIf=\"showMoveUserWizard\"\r\n [user]=\"moveUser\"\r\n (done)=\"closeMoveUserWizard(true)\"\r\n [customerId]=\"customerId\"\r\n (runMoveUser)=\"runMoveUserToMT()\"\r\n (closeMoveUserWizard)=\"closeMoveUserWizard(false)\"\r\n></app-move-user-wizard>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";#users-list{letter-spacing:.5px}.header-with-info{display:flex;align-items:center;gap:.5rem}.header-with-info .info-icon{font-size:16px;color:#c3c3c3;cursor:pointer}table.mat-table{border-spacing:0;width:100%}::ng-deep .mat-paginator{background:none}.icon-user-status{width:.5rem;height:.5rem;border-radius:50%;background-color:#707070;margin:0 5px 0 0}.icon-user-status.icon-user-status-active{background-color:#1d805f;display:inline-block}.mat-select{height:100%;line-height:35px}.mat-form-field-wrapper{padding-bottom:0!important}.mat-form-field{padding:0;max-width:300px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:.7rem;line-height:1rem;background:#545454;border-radius:2rem;line-height:40px;text-align:center;flex-shrink:0}.icon-webex{filter:brightness(0) invert(1);background-repeat:no-repeat;background-position:center;display:inline-block;height:20px;width:20px;background-size:contain}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22M23.23 16.757a5.746 5.746 0 1 0-7.041-9.048 5 5 0 0 0 .071-.705 4.75 4.75 0 1 0-7.705 3.689 8.43 8.43 0 0 0-6.305 7.84c0 1.052.543 2.521 3.13 3.55 1.643.595 3.371.92 5.118.965a7.8 7.8 0 0 0-.248 1.926c0 1.1.57 2.636 3.285 3.716a18.1 18.1 0 0 0 6.463 1.06c4.853 0 9.75-1.476 9.75-4.776a8.86 8.86 0 0 0-6.517-8.217M20 7.755a4.25 4.25 0 0 1 .006 8.499h-.013a4.25 4.25 0 0 1 .007-8.5M8.26 7.004a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0m2.76 14.574c-4.177-.093-7.27-1.368-7.27-3.045 0-3.737 3.478-6.778 7.752-6.778a8.7 8.7 0 0 1 2.757.45 5.75 5.75 0 0 0 2.508 4.552 9.43 9.43 0 0 0-5.747 4.82m8.978 6.672c-4.703 0-8.249-1.408-8.249-3.276 0-3.982 3.7-7.22 8.25-7.22s8.248 3.238 8.248 7.22c0 1.868-3.546 3.276-8.25 3.276%22%2F%3E%3C%2Fsvg%3E\")}.icon-webex-info{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%2211%22 stroke%3D%22currentColor%22 stroke-width%3D%221.5%22%2F%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%227.5%22 r%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D %3Crect x%3D%2211%22 y%3D%2210%22 width%3D%222%22 height%3D%227%22 rx%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-webex-cogs{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%223.5%22 stroke%3D%22currentColor%22 stroke-width%3D%221.2%22%2F%3E%0D %0D %3Cpath d%3D%22M12 2C12.8 2 13.5 2.5 13.8 3.2L14.2 4.2C14.4 4.8 15 5.2 15.7 5.1L16.8 4.9C17.8 4.7 18.8 5.2 19.3 6.1L20.5 8.2C21 9.1 20.9 10.2 20.1 11L19.4 11.6C18.9 12 18.9 12.7 19.4 13.1L20.1 13.7C20.9 14.5 21 15.6 20.5 16.5L19.3 18.6C18.8 19.5 17.8 20 16.8 19.8L15.7 19.6C15 19.5 14.4 19.9 14.2 20.5L13.8 21.5C13.5 22.2 12.8 22.7 12 22.7C11.2 22.7 10.5 22.2 10.2 21.5L9.8 20.5C9.6 19.9 9 19.5 8.3 19.6L7.2 19.8C6.2 20 5.2 19.5 4.7 18.6L3.5 16.5C3 15.6 3.1 14.5 3.9 13.7L4.6 13.1C5.1 12.7 5.1 12 4.6 11.6L3.9 11C3.1 10.2 3 9.1 3.5 8.2L4.7 6.1C5.2 5.2 6.2 4.7 7.2 4.9L8.3 5.1C9 5.2 9.6 4.8 9.8 4.2L10.2 3.2C10.5 2.5 11.2 2 12 2Z%22 %0D stroke%3D%22currentColor%22 %0D stroke-width%3D%221.2%22 %0D stroke-linejoin%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;font-style:normal}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}:host .mat-progress-spinner circle,:host .mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-size:14px}.user-info-box h3{display:block;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#ededed;color:#636363;font-size:12px}.webex-table th:hover{background-color:#dedede}.webex-table th ::ng-deep .mat-icon{font-size:16px;display:flex;align-items:center}.webex-table tr{background:#fff;color:#000000f2;font-size:14px}.webex-table tr:hover:not(.disabled-user-row){background:#ededed;cursor:pointer}.webex-table tr.inactive-user-row{opacity:.35}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{padding:0 24px 0 12px;border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.webex-table .display-name-wrapper{display:flex;align-items:center;justify-content:left;flex-flow:row-reverse;gap:1rem}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important;line-height:35px!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-wrapper,.mat-form-field-flex{height:30px!important}.mat-form-field-appearance-outline .mat-form-field-outline,.mat-form-field-outline .mat-form-field-outline-thick{height:35px!important}.mat-select{line-height:20px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:14px 12px 10px;border-top:0;max-width:300px}.mat-tab-group{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.mat-tab-label{font-weight:500!important;font-size:14px!important;height:auto!important;min-width:auto!important;padding:0!important}.mat-ink-bar{background-color:#000000e6!important;height:3px!important}.mat-form-field-wrapper{padding-bottom:0}.mat-form-field{max-width:300px}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}:host ::ng-deep .mat-form-field-wrapper{height:30px}:host ::ng-deep .mat-form-field-flex{height:30px}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:host ::ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}:host ::ng-deep .mat-select{line-height:20px}:host ::ng-deep .mat-form-field-infix{border-top:0px!important}:host ::ng-deep .mat-paginator{background:transparent!important}:host ::ng-deep .mat-paginator-container{min-height:30px!important}:host ::ng-deep .mat-paginator-range-label{margin:0 10px 0 24px!important;font-size:15px!important}:host ::ng-deep .pagination{font-size:13px;color:#0000008a}:host ::ng-deep .per-page-block{display:flex;line-height:42px!important}:host ::ng-deep .item_per_page{line-height:42px!important}:host ::ng-deep .select-page-size{line-height:42px!important}:host ::ng-deep mat-progress-spinner.page-spinner{position:fixed;margin:auto;inset:0}:host ::ng-deep mat-progress-spinner.field-spinner{position:absolute;margin:-15px -29px}:host ::ng-deep mat-progress-spinner.tab-spinner{position:relative;margin:0 auto auto}.icon-dot{display:block;color:#4f4f4f;font-size:16px;line-height:5px}.button-action-dot:hover{background:#dfdfdf}.button-action-dot{padding:0 5px 5px;border-radius:.25rem}.actions-cell .field-spinner{position:absolute;right:32px;top:50%;transform:translateY(-50%);margin:0}.user-provisioning-type{text-align:start}.user-provisioning-type .icon-wrapper{display:flex;align-items:center}\n"] }]
794
+ args: [{ selector: 'app-users-list', template: "<app-loader *ngIf=\"dataPending\"></app-loader>\r\n<div *ngIf=\"!showMoveUserWizard\" id=\"users-list\">\r\n <tk-users-table-toolbar\r\n [totalUsersCount]=\"totalUsersCount\"\r\n [searchValue]=\"activeSearchToken\"\r\n [selectedUserType]=\"activeUserType\"\r\n (searchChange)=\"searchUsers($event)\"\r\n (searchByType)=\"searchByType($event)\"\r\n (addUser)=\"onCreateUserRequested()\"\r\n ></tk-users-table-toolbar>\r\n <table\r\n class=\"webex-table\"\r\n mat-table\r\n *ngIf=\"users?.length\"\r\n #table\r\n [dataSource]=\"dataSource\"\r\n >\r\n <!-- <ng-container matColumnDef=\"user-icon\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\"></th>\r\n <td class=\"user-site\" mat-cell *matCellDef=\"let user\"\r\n [ngClass]=\"{'disabled-user-row': moveUserPending && moveInProgressUserId && moveInProgressUserId === user?.userid}\"\r\n (click)=\"onUserClick(user)\">\r\n <span class=\"icon-webex-box\"><span class=\"icon-webex icon-webex-user\"></span></span>\r\n </td>\r\n </ng-container> -->\r\n\r\n <ng-container matColumnDef=\"name\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 60px\"\r\n >\r\n Display name\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <div class=\"display-name-wrapper\">\r\n <span\r\n class=\"user-name-text\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n >\r\n {{ user.firstName }} {{ user.lastName }}\r\n </span>\r\n <span class=\"icon-webex-box\"\r\n ><span class=\"icon-webex icon-webex-user\"></span\r\n ></span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"email\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">Email</th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.email }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"status\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Status\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n [matTooltip]=\"\r\n user.status !== 'Active' && user.webexUUID\r\n ? 'Pending cutover to MT. Please contact your administrator for details.'\r\n : ''\r\n \"\r\n matTooltipPosition=\"above\"\r\n >\r\n <span\r\n class=\"icon-user-status\"\r\n [ngClass]=\"{ 'icon-user-status-active': user.status === 'Active' }\"\r\n ></span\r\n >{{ user.status }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"actions\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"webex-table-th\"\r\n style=\"padding-left: 24px; padding-top: 4px\"\r\n >\r\n <img src=\"assets/icons/settings-regular.svg\" width=\"16\" alt=\"\" />\r\n </th>\r\n <td\r\n class=\"user-site actions-cell\"\r\n mat-cell\r\n *matCellDef=\"let user; let i = index\"\r\n style=\"position: relative\"\r\n >\r\n <mat-progress-spinner\r\n class=\"field-spinner\"\r\n [diameter]=\"30\"\r\n strokeWidth=\"3\"\r\n mode=\"indeterminate\"\r\n *ngIf=\"\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n \"\r\n ></mat-progress-spinner>\r\n <button\r\n *ngIf=\"\r\n !(\r\n user.status === 'In Progress' ||\r\n user.status === 'Pending Activation' ||\r\n user.status === 'Pending Deactivation'\r\n ) &&\r\n !(\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === user?.userid\r\n )\r\n \"\r\n class=\"button-action-dot\"\r\n mat-icon-button\r\n [matMenuTriggerFor]=\"menu\"\r\n >\r\n <div class=\"icon-actions-dots\">\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n <span class=\"icon-dot\">.</span>\r\n </div>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item [disabled]=\"true\">Resend Invitation</button>\r\n <button mat-menu-item [disabled]=\"true\">Reset Password</button>\r\n <button\r\n *ngIf=\"!user.webexUUID && user.cucmId == ON_PREM_ID\"\r\n mat-menu-item\r\n [disabled]=\"true\"\r\n matTooltip=\"Coming soon\"\r\n matTooltipPosition=\"right\"\r\n >\r\n Enable AI Transcribe\r\n </button>\r\n <button\r\n [disabled]=\"!user.isReadyToUpgrade || user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'QuickMove', 'MT')\"\r\n >\r\n Quick Upgrade User to MT\r\n </button>\r\n <button\r\n [disabled]=\"user.webexUUID || user.status !== 'Active'\"\r\n *ngIf=\"!user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'MT', 'MT')\"\r\n >\r\n Upgrade User to MT\r\n </button>\r\n <button\r\n *ngIf=\"user.isMigrated\"\r\n mat-menu-item\r\n (click)=\"onMoveUser(user, i, 'DI', 'DI')\"\r\n >\r\n Revert User to UCM/DI\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!isValidWebexUuid(user) || user.status !== 'Inactive'\"\r\n (click)=\"onFirmwareUpgradeClicked(user)\"\r\n >\r\n Activate User\r\n </button>\r\n <button\r\n mat-menu-item\r\n [disabled]=\"!user.webexUUID || user.status !== 'Active'\"\r\n (click)=\"onRevertClicked(user)\"\r\n >\r\n Revert\r\n </button>\r\n <button mat-menu-item [disabled]=\"true\">Delete User</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"role\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Admin roles\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ user.roleName || \"-\" }}\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"source\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n Provisioning Type\r\n </th>\r\n <td\r\n class=\"user-provisioning-type\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n <ng-container *ngIf=\"user.webexUUID\">\r\n <span class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/webex.svg\"\r\n [matTooltip]=\"'Webex Calling'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n <ng-container *ngIf=\"!user.webexUUID\">\r\n <span *ngIf=\"user.cucmId == ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/local_24.svg\"\r\n width=\"20\"\r\n alt=\"\"\r\n [matTooltip]=\"'UCM'\"\r\n matTooltipPosition=\"right\"\r\n /></span>\r\n <span *ngIf=\"user.cucmId != ON_PREM_ID\" class=\"icon-wrapper\"\r\n ><img\r\n src=\"assets/icons/di_cloud_24.svg\"\r\n [matTooltip]=\"'Webex Calling DI'\"\r\n matTooltipPosition=\"right\"\r\n width=\"20\"\r\n alt=\"\"\r\n /></span>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"last-active-time\">\r\n <th mat-header-cell *matHeaderCellDef class=\"webex-table-th\">\r\n <span class=\"header-with-info\">\r\n Last active time\r\n <!-- <mat-icon class=\"info-icon\">info</mat-icon> -->\r\n <img src=\"assets/icons/info-circle-regular.svg\" width=\"16\" alt=\"\" />\r\n </span>\r\n </th>\r\n <td\r\n class=\"user-site\"\r\n mat-cell\r\n *matCellDef=\"let user\"\r\n [ngClass]=\"{ 'inactive-user-row': user.status !== 'Active' }\"\r\n (click)=\"onUserClick(user)\"\r\n >\r\n {{ getTodayShortDate() }}\r\n </td>\r\n /\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: displayedColumns\"\r\n [ngClass]=\"{\r\n 'disabled-user-row':\r\n moveUserPending &&\r\n moveInProgressUserId &&\r\n moveInProgressUserId === row?.userid,\r\n 'inactive-user-row': row.status !== 'Active',\r\n }\"\r\n ></tr>\r\n </table>\r\n\r\n <app-pagination\r\n [pagination]=\"usersSearchService.getPagination()\"\r\n [showPageSizeOptions]=\"true\"\r\n (pageNumberChangeEmitter)=\"pageNumberChangeEvent($event)\"\r\n (pageEmitter)=\"pageEvent($event)\"\r\n >\r\n </app-pagination>\r\n</div>\r\n\r\n<app-move-user-wizard\r\n *ngIf=\"showMoveUserWizard\"\r\n [user]=\"moveUser\"\r\n (done)=\"closeMoveUserWizard(true)\"\r\n [customerId]=\"customerId\"\r\n (runMoveUser)=\"runMoveUserToMT()\"\r\n (closeMoveUserWizard)=\"closeMoveUserWizard(false)\"\r\n></app-move-user-wizard>\r\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400&display=swap\";#users-list{letter-spacing:.5px}.header-with-info{display:flex;align-items:center;gap:.5rem}.header-with-info .info-icon{font-size:16px;color:#c3c3c3;cursor:pointer}table.mat-table{border-spacing:0;width:100%}::ng-deep .mat-paginator{background:none}.icon-user-status{width:.5rem;height:.5rem;border-radius:50%;background-color:#707070;margin:0 5px 0 0}.icon-user-status.icon-user-status-active{background-color:#1d805f;display:inline-block}.mat-select{height:100%;line-height:35px}.mat-form-field-wrapper{padding-bottom:0!important}.mat-form-field{padding:0;max-width:300px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;font-size:.7rem;line-height:1rem;background:#545454;border-radius:2rem;line-height:40px;text-align:center;flex-shrink:0}.icon-webex{filter:brightness(0) invert(1);background-repeat:no-repeat;background-position:center;display:inline-block;height:20px;width:20px;background-size:contain}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 width%3D%2232%22 height%3D%2232%22 viewBox%3D%220 0 32 32%22%3E%3Cpath d%3D%22M23.23 16.757a5.746 5.746 0 1 0-7.041-9.048 5 5 0 0 0 .071-.705 4.75 4.75 0 1 0-7.705 3.689 8.43 8.43 0 0 0-6.305 7.84c0 1.052.543 2.521 3.13 3.55 1.643.595 3.371.92 5.118.965a7.8 7.8 0 0 0-.248 1.926c0 1.1.57 2.636 3.285 3.716a18.1 18.1 0 0 0 6.463 1.06c4.853 0 9.75-1.476 9.75-4.776a8.86 8.86 0 0 0-6.517-8.217M20 7.755a4.25 4.25 0 0 1 .006 8.499h-.013a4.25 4.25 0 0 1 .007-8.5M8.26 7.004a3.25 3.25 0 1 1 6.5 0 3.25 3.25 0 0 1-6.5 0m2.76 14.574c-4.177-.093-7.27-1.368-7.27-3.045 0-3.737 3.478-6.778 7.752-6.778a8.7 8.7 0 0 1 2.757.45 5.75 5.75 0 0 0 2.508 4.552 9.43 9.43 0 0 0-5.747 4.82m8.978 6.672c-4.703 0-8.249-1.408-8.249-3.276 0-3.982 3.7-7.22 8.25-7.22s8.248 3.238 8.248 7.22c0 1.868-3.546 3.276-8.25 3.276%22%2F%3E%3C%2Fsvg%3E\")}.icon-webex-info{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%2211%22 stroke%3D%22currentColor%22 stroke-width%3D%221.5%22%2F%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%227.5%22 r%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D %3Crect x%3D%2211%22 y%3D%2210%22 width%3D%222%22 height%3D%227%22 rx%3D%221%22 fill%3D%22currentColor%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-webex-cogs{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem;background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2224%22 height%3D%2224%22 viewBox%3D%220 0 24 24%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D %3Ccircle cx%3D%2212%22 cy%3D%2212%22 r%3D%223.5%22 stroke%3D%22currentColor%22 stroke-width%3D%221.2%22%2F%3E%0D %0D %3Cpath d%3D%22M12 2C12.8 2 13.5 2.5 13.8 3.2L14.2 4.2C14.4 4.8 15 5.2 15.7 5.1L16.8 4.9C17.8 4.7 18.8 5.2 19.3 6.1L20.5 8.2C21 9.1 20.9 10.2 20.1 11L19.4 11.6C18.9 12 18.9 12.7 19.4 13.1L20.1 13.7C20.9 14.5 21 15.6 20.5 16.5L19.3 18.6C18.8 19.5 17.8 20 16.8 19.8L15.7 19.6C15 19.5 14.4 19.9 14.2 20.5L13.8 21.5C13.5 22.2 12.8 22.7 12 22.7C11.2 22.7 10.5 22.2 10.2 21.5L9.8 20.5C9.6 19.9 9 19.5 8.3 19.6L7.2 19.8C6.2 20 5.2 19.5 4.7 18.6L3.5 16.5C3 15.6 3.1 14.5 3.9 13.7L4.6 13.1C5.1 12.7 5.1 12 4.6 11.6L3.9 11C3.1 10.2 3 9.1 3.5 8.2L4.7 6.1C5.2 5.2 6.2 4.7 7.2 4.9L8.3 5.1C9 5.2 9.6 4.8 9.8 4.2L10.2 3.2C10.5 2.5 11.2 2 12 2Z%22 %0D stroke%3D%22currentColor%22 %0D stroke-width%3D%221.2%22 %0D stroke-linejoin%3D%22round%22%2F%3E%0D%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;font-weight:400;font-style:normal}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}:host .mat-progress-spinner circle,:host .mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-size:14px}.user-info-box h3{display:block;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#ededed;color:#636363;font-size:12px}.webex-table th:hover{background-color:#dedede}.webex-table th ::ng-deep .mat-icon{font-size:16px;display:flex;align-items:center}.webex-table tr{background:#fff;color:#000000f2;font-size:14px}.webex-table tr:hover:not(.disabled-user-row){background:#ededed;cursor:pointer}.webex-table tr.inactive-user-row{opacity:.35}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{padding:0 24px 0 12px;border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.webex-table .display-name-wrapper{display:flex;align-items:center;justify-content:left;flex-flow:row-reverse;gap:1rem}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important;line-height:35px!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}.mat-form-field-wrapper,.mat-form-field-flex{height:30px!important}.mat-form-field-appearance-outline .mat-form-field-outline,.mat-form-field-outline .mat-form-field-outline-thick{height:35px!important}.mat-select{line-height:20px!important}.mat-form-field-appearance-outline .mat-form-field-infix{padding:14px 12px 10px;border-top:0;max-width:300px}.mat-tab-group{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif}.mat-tab-label{font-weight:500!important;font-size:14px!important;height:auto!important;min-width:auto!important;padding:0!important}.mat-ink-bar{background-color:#000000e6!important;height:3px!important}.mat-form-field-wrapper{padding-bottom:0}.mat-form-field{max-width:300px}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}:host ::ng-deep .mat-form-field-wrapper{height:30px}:host ::ng-deep .mat-form-field-flex{height:30px}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:host ::ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}:host ::ng-deep .mat-select{line-height:20px}:host ::ng-deep .mat-form-field-infix{border-top:0px!important}:host ::ng-deep .mat-paginator{background:transparent!important}:host ::ng-deep .mat-paginator-container{min-height:30px!important}:host ::ng-deep .mat-paginator-range-label{margin:0 10px 0 24px!important;font-size:15px!important}:host ::ng-deep .pagination{font-size:13px;color:#0000008a}:host ::ng-deep .per-page-block{display:flex;line-height:42px!important}:host ::ng-deep .item_per_page{line-height:42px!important}:host ::ng-deep .select-page-size{line-height:42px!important}:host ::ng-deep mat-progress-spinner.page-spinner{position:fixed;margin:auto;inset:0}:host ::ng-deep mat-progress-spinner.field-spinner{position:absolute;margin:-15px -29px}:host ::ng-deep mat-progress-spinner.tab-spinner{position:relative;margin:0 auto auto}.icon-dot{display:block;color:#4f4f4f;font-size:16px;line-height:5px}.button-action-dot:hover{background:#dfdfdf}.button-action-dot{padding:0 5px 5px;border-radius:.25rem}.actions-cell .field-spinner{position:absolute;right:32px;top:50%;transform:translateY(-50%);margin:0}.user-provisioning-type{text-align:start}.user-provisioning-type .icon-wrapper{display:flex;align-items:center}\n"] }]
756
795
  }], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }, { type: i3.ApiWebexService }, { type: i4.NotificationService }, { type: i5.UsersSearchService }, { type: i6.MatDialog }]; }, propDecorators: { token: [{
757
796
  type: Input
758
797
  }], customerId: [{
@@ -770,4 +809,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
770
809
  }], host: [{
771
810
  type: Input
772
811
  }] } });
773
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvdXNlcnMtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvdXNlcnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsR0FBRyxFQUFxQyxVQUFVLEVBQUUsY0FBYyxFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBRXRILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0csTUFBTSxjQUFjLEdBQUc7SUFDckIsTUFBTTtJQUNOLE9BQU87SUFDUCxRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztDQUNWLENBQUM7QUFDRixNQUFNLGFBQWEsR0FBRztJQUNwQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsaUJBQWlCLEVBQUUsaUJBQWlCO0NBQ3JDLENBQUM7QUE4Q0YsTUFBTSxPQUFPLGtCQUFrQjtJQWdDN0IsaUJBQWlCO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMs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QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksWUFBWSxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQzs7Z0hBaDRCVSxrQkFBa0I7b0dBQWxCLGtCQUFrQixxUkNoRi9CLDR5VUFnVEE7NEZEaE9hLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxnQkFBZ0I7b1BBS2pCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBRUUsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBFTVBUWSwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YWtlV2hpbGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVzZXJzU2VhcmNoU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlcnMtc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaXN0VXNlciB9IGZyb20gJy4vY2xhc3Nlcy91c2VyLWxpc3QnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IEFwaVdlYmV4U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBpLXdlYmV4LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUEksIENVU1RPTUVSX0RFU1RJTkFUSU9OLCBNQVhfSU5URUdFUiwgT05fUFJFTV9JRCwgVVNFUl9UWVBFU19NQVAsIFVTRVJfVFlQRVNfVFlQRSB9IGZyb20gJy4vYXBwLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFVzZXJMaXN0Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vdXNlci1saXN0LWNvbmZpcm0tZGlhbG9nL3VzZXItbGlzdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuY29uc3QgRElTUExBWUVEX0NPTFMgPSBbXHJcbiAgJ25hbWUnLFxyXG4gICdlbWFpbCcsXHJcbiAgJ3N0YXR1cycsXHJcbiAgJ2xhc3QtYWN0aXZlLXRpbWUnLFxyXG4gICdyb2xlJyxcclxuICAnc291cmNlJyxcclxuICAnYWN0aW9ucycsXHJcbl07XHJcbmNvbnN0IExPQ0FMX1NUT1JBR0UgPSB7XHJcbiAgVVNFUl9JTl9NSUdSQVRJT046ICd1c2VySWRJbk1pZ3JhdGlvbicsXHJcbiAgTUlHUkFUSU9OX0ZPUk1fSUQ6ICdtaWdyYXRpb25Gb3JtSWQnLFxyXG59O1xyXG5cclxudHlwZSBGaXJtd2FyZURldmljZU1hcCA9IFJlY29yZDxudW1iZXIsIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj47XHJcblxyXG5pbnRlcmZhY2UgTWlncmF0ZWRFbnRpdHlMaWtlIHtcclxuICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XHJcbiAgY3VjbUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcclxuICBkZXZpY2VzPzogdW5rbm93bltdO1xyXG4gIHNvdXJjZVNpdGU/OiB7XHJcbiAgICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XHJcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICB9IHwgbnVsbDtcclxuICB3ZWJleE1pZ3JhdGlvbkRldmljZXM/OiB1bmtub3duW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBNaWdyYXRlZERldmljZUxpa2Uge1xyXG4gIGRldmljZT86IE1pZ3JhdGVkRGV2aWNlTGlrZTtcclxuICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XHJcbiAgbmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgbWFjPzogc3RyaW5nIHwgbnVsbDtcclxuICBkZXZpY2VJZD86IHN0cmluZyB8IG51bGw7XHJcbiAgY2lzVXVpZD86IHN0cmluZyB8IG51bGw7XHJcbiAgY3VjbUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcclxuICBpc1JlZ2lzdGVyZWQ/OiBib29sZWFuIHwgbnVsbDtcclxuICBkZXZpY2VUb1VwZ3JhZGU/OiBib29sZWFuIHwgbnVsbDtcclxuICBpc0VsaWdpYmxlPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgbGluZUFzc29jaWF0aW9ucz86IEFycmF5PHtcclxuICAgIGRpcmVjdG9yeU51bWJlcj86IHtcclxuICAgICAgZGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgdGVtcGxhdGVEaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgfSB8IG51bGw7XHJcbiAgICBlMTY0TWFzaz86IHN0cmluZyB8IG51bGw7XHJcbiAgfT47XHJcbiAgbGluZXM/OiBBcnJheTx7XHJcbiAgICBkaXJlY3RvcnlOdW1iZXI/OiB7XHJcbiAgICAgIGRpcmVjdG9yeU51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIH0gfCBudWxsO1xyXG4gIH0+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11c2Vycy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlcnNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1c3RvbWVySWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l0ZUlkITogbnVtYmVyO1xyXG5cclxuICBAT3V0cHV0KCkgb3BlblVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVzZXJNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc3dpdGNoVG9XaXphcmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZVVzZXJSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcblxyXG4gIGRhdGFQZW5kaW5nITogYm9vbGVhbjtcclxuICBtb3ZlSW5Qcm9ncmVzc1VzZXJJZCE6IHN0cmluZztcclxuICB1c2VycyE6IExpc3RVc2VyW107XHJcbiAgcHJpdmF0ZSBiYXNlVXNlcnM6IExpc3RVc2VyW10gPSBbXTtcclxuICBkYXRhU291cmNlITogTWF0VGFibGVEYXRhU291cmNlPExpc3RVc2VyPjtcclxuICBkaXNwbGF5ZWRDb2x1bW5zID0gRElTUExBWUVEX0NPTFM7XHJcbiAgbW92ZVVzZXI6IGFueTtcclxuICBtb3ZlVXNlckluZGV4OiBhbnk7XHJcbiAgc2hvd01vdmVVc2VyV2l6YXJkID0gZmFsc2U7XHJcbiAgbW92ZVVzZXJQZW5kaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBhY3RpdmVTZWFyY2hUb2tlbiA9ICcnO1xyXG4gIGFjdGl2ZVVzZXJUeXBlOiBVU0VSX1RZUEVTX1RZUEUgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgT05fUFJFTV9JRCA9IE9OX1BSRU1fSUQ7XHJcblxyXG4gIHRvdGFsVXNlcnNDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgZ2V0VG9kYXlTaG9ydERhdGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBtb250aCA9IG5vdy5nZXRNb250aCgpICsgMTtcclxuICAgIGNvbnN0IGRheSA9IG5vdy5nZXREYXRlKCk7XHJcbiAgICBjb25zdCB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCkgJSAxMDA7XHJcbiAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkKHN0YXR1czogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IChzdGF0dXMgfHwgJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gbm9ybWFsaXplZCA9PT0gJ0NPTVBMRVRFRCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkV2l0aEVycm9ycyhzdGF0dXM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSAoc3RhdHVzIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICdDT01QTEVURURfV0lUSF9FUlJPUlMnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb21wbGV0ZWRXaXRoRXJyb3JzQnlVc2VySWQodXNlcklkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRVc2VySW5kZXhCeUlkKHVzZXJJZCk7XHJcbiAgICB0aGlzLnJlbW92ZVVzZXJJbk1pZ3JhdGlvblByb2dyZXNzKCk7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0NvbXBsZXRlZCB3aXRoIGVycm9ycycpO1xyXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0luYWN0aXZlJyksIDUwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc01pZ3JhdGlvblN0YXR1c0ZhaWxlZChzdGF0dXM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSAoc3RhdHVzIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICdGQUlMRUQnIHx8IG5vcm1hbGl6ZWQgPT09ICdFUlJPUic7XHJcbiAgfVxyXG5cclxuICBnZXQgZm9ybSgpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/LmZvcm07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFQSVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFwaVdlYmV4U2VydmljZTogQXBpV2ViZXhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHVibGljIHVzZXJzU2VhcmNoU2VydmljZTogVXNlcnNTZWFyY2hTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnNldERlZmF1bHRWYWx1ZXMoKTtcclxuICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLmN1c3RvbWVySWQgPSB0aGlzLmN1c3RvbWVySWQ7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5zaXRlSWQgPSB0aGlzLnNpdGVJZDtcclxuICAgIHRoaXMuYXBpU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XHJcbiAgICB0aGlzLmFwaVdlYmV4U2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuYXBpVXJsID0gdGhpcy5ob3N0ICsgJy9kY3AnO1xyXG4gICAgdGhpcy5hcGlXZWJleFNlcnZpY2UuYXBpVXJsID0gdGhpcy5ob3N0ICsgJy93ZWJleCc7XHJcblxyXG4gICAgdGhpcy5nZXRNaWdyYXRlZFVzZXJzKCk7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5mb3VuZFVzZXJzJC5zdWJzY3JpYmUoXHJcbiAgICAgICh1c2VyczogTGlzdFVzZXJbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURhdGFTb3VyY2UodXNlcnMpO1xyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3VzZXJzIGxpc3QgcGFyaXMgNzc3MycpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwYWdlTnVtYmVyQ2hhbmdlRXZlbnQocGVyUGFnZU51bWJlcjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5wYWdlU2l6ZSA9IHBlclBhZ2VOdW1iZXI7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5wYWdlSW5kZXggPSAwO1xyXG4gICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICB9XHJcblxyXG4gIGNsb3NlTW92ZVVzZXJXaXphcmQoYWZ0ZXJVc2VyTW92ZT86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMubW92ZVVzZXIgPSBudWxsO1xyXG4gICAgdGhpcy5tb3ZlVXNlckluZGV4ID0gbnVsbDtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0UuVVNFUl9JTl9NSUdSQVRJT04pO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfU1RPUkFHRS5NSUdSQVRJT05fRk9STV9JRCk7XHJcbiAgICB0aGlzLnNob3dNb3ZlVXNlcldpemFyZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zd2l0Y2hUb1dpemFyZC5lbWl0KGZhbHNlKTtcclxuICAgIGlmIChhZnRlclVzZXJNb3ZlKSB7XHJcbiAgICAgIHRoaXMuZ2V0TWlncmF0ZWRVc2VycygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFnZUV2ZW50KGV2ZW50OiBQYWdlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5wYWdlSW5kZXggPSBldmVudC5wYWdlSW5kZXg7XHJcbiAgICB0aGlzLnJ1blNlYXJjaCgpO1xyXG4gIH1cclxuXHJcbiAgb25Vc2VyQ2xpY2sodXNlcjogTGlzdFVzZXIpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpc1dlYmV4JywgU3RyaW5nKCEhdXNlci53ZWJleFVVSUQpKTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3ZWJleFVVSUQnLCAnbnVsbCcpO1xyXG4gICAgaWYgKHVzZXIud2ViZXhVVUlEKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3ZWJleFVVSUQnLCBTdHJpbmcodXNlci53ZWJleFVVSUQpKTtcclxuICAgIH1cclxuICAgIHRoaXMub3BlblVzZXIuZW1pdCh1c2VyKTtcclxuICB9XHJcblxyXG4gIG1vdmVVc2VyVG9NVCh1c2VyOiBMaXN0VXNlcik6IHZvaWQge1xyXG4gICAgaWYgKHVzZXIgJiYgdXNlci5zaXRlSWQgJiYgdXNlci51c2VyaWQpIHtcclxuICAgICAgdGhpcy5tb3ZlVXNlclBlbmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLm1vdmVJblByb2dyZXNzVXNlcklkID0gdXNlci51c2VyaWQ7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0VXNlckluZGV4QnlJZCh1c2VyLnVzZXJpZCk7XHJcbiAgICAgIGlmIChjdXJyZW50SW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdHVzVG9Vc2VyKGN1cnJlbnRJbmRleCwgJ0luIFByb2dyZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfU1RPUkFHRS5VU0VSX0lOX01JR1JBVElPTiwgdXNlci51c2VyaWQpO1xyXG5cclxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAgIC5tb3ZlVXNlclRvTVQodGhpcy5jdXN0b21lcklkLCB1c2VyKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoZm9ybUlkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlVXNlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVVzZXJJbmRleCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChmb3JtSWQpIHtcclxuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFLk1JR1JBVElPTl9GT1JNX0lELCBTdHJpbmcoZm9ybUlkKSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb2xsTWlncmF0aW9uRm9ybVN0YXR1c0J5VXNlcklkKGZvcm1JZCwgdXNlci51c2VyaWQsICgpID0+IHRoaXMuZ2V0TWlncmF0ZWRVc2VycygpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcih0aGlzLmdldFVzZXJJbmRleEJ5SWQodXNlci51c2VyaWQpLCAnTWlncmF0aW9uIEVycm9yJyk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlVXNlclRvREkodXNlcjogTGlzdFVzZXIsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh1c2VyICYmIHVzZXIuc2l0ZUlkICYmIHVzZXIud2ViZXhVVUlEKSB7XHJcbiAgICAgIHRoaXMubW92ZVVzZXJQZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9IHVzZXIudXNlcmlkO1xyXG4gICAgICB0aGlzLnVzZXJzW2luZGV4XS5zdGF0dXMgPSAnSW4gUHJvZ3Jlc3MnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFLlVTRVJfSU5fTUlHUkFUSU9OLCB1c2VyLnVzZXJpZCk7XHJcblxyXG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlXHJcbiAgICAgICAgLm1vdmVVc2VyVG9ESSh0aGlzLmN1c3RvbWVySWQsIHVzZXIpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0FjdGl2ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJzW2luZGV4XS53ZWJleFVVSUQgPSAnJztcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLm1pZ3JhdGVkVXNlcnMgJiZcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5taWdyYXRlZFVzZXJzLmxlbmd0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5taWdyYXRlZFVzZXJzID1cclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLm1pZ3JhdGVkVXNlcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAobWlncmF0ZWRVc2VyOiBhbnkpID0+IG1pZ3JhdGVkVXNlci51c2VyaWQgIT09IHVzZXIuZW1haWwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWlncmF0ZWRVc2VycygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTogdm9pZCB7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMT0NBTF9TVE9SQUdFLlVTRVJfSU5fTUlHUkFUSU9OKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0UuTUlHUkFUSU9OX0ZPUk1fSUQpO1xyXG4gICAgdGhpcy5tb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9ICcnO1xyXG4gICAgdGhpcy5tb3ZlVXNlclBlbmRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U3RhdHVzVG9Vc2VyKGluZGV4OiBudW1iZXIsIHN0YXR1czogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VycyAmJiB0aGlzLnVzZXJzW2luZGV4XSkge1xyXG4gICAgICB0aGlzLnVzZXJzW2luZGV4XS5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICAgIC8vIGlmIChzdGF0dXMgPT09ICdNaWdyYXRlZCcpIHtcclxuICAgICAgLy8gICB0aGlzLnVzZXJzW2luZGV4XS5yb2xlTmFtZSA9ICcnO1xyXG4gICAgICAvLyAgIHRoaXMudXNlcnNbaW5kZXhdLmlzTWlncmF0ZWQgPSB0cnVlO1xyXG4gICAgICAvLyAgIHRoaXMudXNlcnNbaW5kZXhdLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLnVzZXJzW2luZGV4XS5yb2xlTmFtZSA9ICdEZWRpY2F0ZWQgSW5zdGFuY2UgQ2FsbGluZyB1c2VyJztcclxuICAgICAgLy8gICB0aGlzLnVzZXJzW2luZGV4XS5pc01pZ3JhdGVkID0gZmFsc2U7XHJcbiAgICAgIC8vICAgdGhpcy51c2Vyc1tpbmRleF0uc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAvLyB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMudXNlcnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0YVNvdXJjZSh1c2VyczogTGlzdFVzZXJbXSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2FmZVVzZXJzID0gQXJyYXkuaXNBcnJheSh1c2VycykgPyB1c2VycyA6IFtdO1xyXG4gICAgLy8gdGhpcy5zZXRSYW5kb21Vc2VyUm9sZSh1c2Vycyk7XHJcbiAgICB0aGlzLmJhc2VVc2VycyA9IHNhZmVVc2VycztcclxuICAgIHRoaXMudXNlcnMgPSBzYWZlVXNlcnM7XHJcbiAgICAvLyBzZXQgdG90YWwgcm93cyBjb3VudCBmb3IgdG9vbGJhci9wYWdpbmF0aW9uIGZyb20gc2VydmVyLXNpZGUgcGFnaW5hdGlvbiB3aGVuIGF2YWlsYWJsZVxyXG4gICAgdGhpcy50b3RhbFVzZXJzQ291bnQgPSB0aGlzLnVzZXJzU2VhcmNoU2VydmljZT8udG90YWwgfHwgc2FmZVVzZXJzLmxlbmd0aDtcclxuICAgIHRoaXMuc2V0VXNlck1pZ3JhdGlvblByb2dyZXNzKCk7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5zZXRNaWdyYXRlZFByb3BUb1VzZXJzKHRoaXMudXNlcnMpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnVzZXJzKTtcclxuICAgIHRoaXMuYXBwbHlBY3RpdmVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXNlclJvbGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2Vycz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudXNlcnMuZm9yRWFjaCgodXNlcikgPT4ge1xyXG4gICAgICAgIGlmICghdXNlci5pc01pZ3JhdGVkKSB7XHJcbiAgICAgICAgICB1c2VyLnJvbGVOYW1lID0gJ0RlZGljYXRlZCBJbnN0YW5jZSBDYWxsaW5nIHVzZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJhbmRvbVVzZXJSb2xlKHVzZXJzOiBMaXN0VXNlcltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXggPSBNYXRoLnJvdW5kKFxyXG4gICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5wYWdlU2l6ZSAtIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplIC8gNCxcclxuICAgICk7XHJcbiAgICBjb25zdCBtaW4gPSBNYXRoLnJvdW5kKHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplIC8gMik7XHJcbiAgICBjb25zdCByYW5kb21BbW91bnQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbik7XHJcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy5nZXRBcnJheU9mUmFuZG9tVXNlckluZGV4ZXMocmFuZG9tQW1vdW50KTtcclxuICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcclxuICAgICAgaWYgKHVzZXJzW2luZGV4XSkge1xyXG4gICAgICAgIHVzZXJzW2luZGV4XS5yb2xlTmFtZSA9ICdEZWRpY2F0ZWQgSW5zdGFuY2UgQ2FsbGluZyB1c2VyJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFycmF5T2ZSYW5kb21Vc2VySW5kZXhlcyhyYW5kb21BbW91bnQ6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSBbXTtcclxuICAgIHdoaWxlIChyYW5kb21BbW91bnQgPiAwKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5yb3VuZChcclxuICAgICAgICBNYXRoLnJhbmRvbSgpICogKHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplIC0gMSksXHJcbiAgICAgICk7XHJcbiAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XHJcbiAgICAgIHJhbmRvbUFtb3VudC0tO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGluZGV4ZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1blNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2UucXVpY2tSZWd1bGFyVXNlcnNTZWFyY2goKS5zdWJzY3JpYmUoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKCdUaGUgZGF0YSBjYW4gbm90IGJlIHJlY2VpdmVkJyk7XHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVc2VyTWlncmF0aW9uUHJvZ3Jlc3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VySWRJbk1pZ3JhdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICBMT0NBTF9TVE9SQUdFLlVTRVJfSU5fTUlHUkFUSU9OLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IG1pZ3JhdGlvbkZvcm1JZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICBMT0NBTF9TVE9SQUdFLk1JR1JBVElPTl9GT1JNX0lELFxyXG4gICAgKTtcclxuICAgIGlmICh1c2VySWRJbk1pZ3JhdGlvbikge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlcnMuZmluZEluZGV4KFxyXG4gICAgICAgICh1c2VyKSA9PiB1c2VyLnVzZXJpZCA9PT0gdXNlcklkSW5NaWdyYXRpb24sXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubW92ZUluUHJvZ3Jlc3NVc2VySWQgPSBpbmRleCA+IC0xID8gdGhpcy51c2Vyc1tpbmRleF0udXNlcmlkIDogJyc7XHJcbiAgICAgIHRoaXMubW92ZVVzZXJQZW5kaW5nID0gaW5kZXggPiAtMTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0luIFByb2dyZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1pZ3JhdGlvbkZvcm1JZCkge1xyXG4gICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXMoTnVtYmVyKG1pZ3JhdGlvbkZvcm1JZCksIGluZGV4LCAoKSA9PiB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWlncmF0ZWRVc2VycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0ge1xyXG4gICAgICBjdXN0b21lcmlkOiB0aGlzLmN1c3RvbWVySWQsXHJcbiAgICAgIHNpdGVpZDogdGhpcy5zaXRlSWQsXHJcbiAgICAgICdjbG91ZC1vbmx5JzogJ3RydWUnLFxyXG4gICAgfTtcclxuICAgIC8vIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnF1aWNrV2ViZXhVc2Vyc1NlYXJjaChzZWFyY2hQYXJhbXMsIHRydWUsIE1BWF9JTlRFR0VSKVxyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldE1pZ3JhdGVkVXNlcnModGhpcy5jdXN0b21lcklkKVxyXG4gICAgICAvLyB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5nZXRNaWdyYXRlZFdlYmV4VXNlcnModGhpcy5jdXN0b21lcklkKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHVzZXJJZEluTWlncmF0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICAgIExPQ0FMX1NUT1JBR0UuVVNFUl9JTl9NSUdSQVRJT04sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB1c2VySWRJbk1pZ3JhdGlvbiAmJlxyXG4gICAgICAgICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5taWdyYXRlZFVzZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgICAobWlncmF0ZWRVc2VyOiBhbnkpID0+IG1pZ3JhdGVkVXNlci51c2VyaWQgPT09IHVzZXJJZEluTWlncmF0aW9uLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfU1RPUkFHRS5VU0VSX0lOX01JR1JBVElPTik7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0UuTUlHUkFUSU9OX0ZPUk1fSUQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcignVGhlIGRhdGEgY2FuIG5vdCBiZSByZWNlaXZlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk1vdmVVc2VyKHVzZXI6IExpc3RVc2VyLCBpbmRleDogbnVtYmVyLCB0eXBlOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVXNlckxpc3RDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogYFVwZ3JhZGUgdXNlciAke3VzZXIudXNlcmlkfSB0byBNdWx0aSBUZW5hbnQ/YCxcclxuICAgICAgICBtZXNzYWdlOiBgPHA+VXBncmFkaW5nIHRoaXMgdXNlciB3aWxsIHByZXBhcmUgdGhlIGFjY291bnQgZm9yIG1pZ3JhdGlvbiB0byBNdWx0aSBUZW5hbnQuPC9wPlxyXG4gICAgICAgICAgPHA+RHVyaW5nIHRoaXMgcHJvY2VzcywgdGhlIHVzZXIgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNvcGllZCB0byB0aGUgTXVsdGkgVGVuYW50IGVudmlyb25tZW50LlxyXG4gICAgICAgICAgVGhlIHVzZXIgd2lsbCByZW1haW4gYWN0aXZlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB1bnRpbCB0aGUgQWN0aXZhdGUgc3RlcCBpcyBjb21wbGV0ZWQuPC9wPlxyXG4gICAgICAgICAgPHA+RG8geW91IHdhbnQgdG8gY29udGludWU/PC9wPmAsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdZZXMsIHVwZ3JhZGUnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICBjYXNlICdRdWlja01vdmUnOlxyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VyVG9NVCh1c2VyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdNVCc6XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVVzZXIgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VySW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgdGhpcy5zaG93TW92ZVVzZXJXaXphcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRvV2l6YXJkLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnREknOlxyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VyVG9ESSh1c2VyLCBpbmRleCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBydW5Nb3ZlVXNlclRvTVQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb3ZlVXNlciAmJiB0aGlzLm1vdmVVc2VyLnNpdGVJZCAmJiB0aGlzLm1vdmVVc2VyLnVzZXJpZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLm1vdmVVc2VyUGVuZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMubW92ZUluUHJvZ3Jlc3NVc2VySWQgPSB0aGlzLm1vdmVVc2VyLnVzZXJpZDtcclxuICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIodGhpcy5tb3ZlVXNlckluZGV4LCAnSW4gUHJvZ3Jlc3MnKTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgTE9DQUxfU1RPUkFHRS5VU0VSX0lOX01JR1JBVElPTixcclxuICAgICAgICB0aGlzLm1vdmVVc2VyLnVzZXJpZCxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlXHJcbiAgICAgIC5tb3ZlVXNlclRvTVQodGhpcy5jdXN0b21lcklkLCB0aGlzLm1vdmVVc2VyKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChmb3JtSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKGZvcm1JZCkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFLk1JR1JBVElPTl9GT1JNX0lELCBTdHJpbmcoZm9ybUlkKSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXMoZm9ybUlkLCB0aGlzLm1vdmVVc2VySW5kZXgsICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJNb3ZlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJNb3ZlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzVG9Vc2VyKHRoaXMubW92ZVVzZXJJbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaFVzZXJzKHRva2VuOiBzdHJpbmcsIHR5cGU/OiBVU0VSX1RZUEVTX1RZUEUpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUb2tlbiA9ICh0b2tlbiB8fCAnJykudHJpbSgpO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlIHx8IG51bGw7XHJcblxyXG4gICAgLy8gaWYgdG9rZW4gaXMgZW1wdHkg4oCUIHJlc3RvcmUgY3VycmVudCBwYWdlIGRhdGFzb3VyY2VcclxuICAgIGlmICghbm9ybWFsaXplZFRva2VuICYmICFub3JtYWxpemVkVHlwZSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZVNlYXJjaFRva2VuID0gJyc7XHJcbiAgICAgIHRoaXMuYWN0aXZlVXNlclR5cGUgPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy5iYXNlVXNlcnM7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy51c2Vycyk7XHJcbiAgICAgIHRoaXMudG90YWxVc2Vyc0NvdW50ID0gdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2U/LnRvdGFsIHx8IHRoaXMudXNlcnMubGVuZ3RoO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vcm1hbGl6ZWRUeXBlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVXNlclR5cGUgPSBub3JtYWxpemVkVHlwZTtcclxuICAgICAgdGhpcy5hY3RpdmVTZWFyY2hUb2tlbiA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVTZWFyY2hUb2tlbiA9IG5vcm1hbGl6ZWRUb2tlbjtcclxuICAgICAgdGhpcy5hY3RpdmVVc2VyVHlwZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmV0Y2ggYWxsIHVzZXJzIChzZXJ2ZXItc2lkZSkgYW5kIGZpbHRlciBsb2NhbGx5IGFjcm9zcyB0aGUgd2hvbGUgZGF0YXNldFxyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5nZXRBbGxSZWd1bGFyVXNlcnMoKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChhbGxVc2VyczogTGlzdFVzZXJbXSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbHRlcmVkOiBMaXN0VXNlcltdO1xyXG4gICAgICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkID0gdGhpcy5maWx0ZXJCeVRva2VuKGFsbFVzZXJzLCBub3JtYWxpemVkVG9rZW4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVyZWQgPSB0aGlzLmZpbHRlckJ5VHlwZShhbGxVc2Vycywgbm9ybWFsaXplZFR5cGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy51c2VycyA9IGZpbHRlcmVkO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnVzZXJzKTtcclxuICAgICAgICAgIHRoaXMudG90YWxVc2Vyc0NvdW50ID0gZmlsdGVyZWQubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKCdUaGUgZGF0YSBjYW4gbm90IGJlIHJlY2VpdmVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCeVR5cGUodXNlclR5cGU6IFVTRVJfVFlQRVNfVFlQRSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB1c2VyVHlwZSB8fCBudWxsO1xyXG4gICAgaWYgKCFub3JtYWxpemVkVHlwZSkge1xyXG4gICAgICB0aGlzLnNlYXJjaFVzZXJzKCcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hVc2VycygnJywgbm9ybWFsaXplZFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUFjdGl2ZUZpbHRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZVNlYXJjaFRva2VuKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVXNlcnModGhpcy5hY3RpdmVTZWFyY2hUb2tlbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjdGl2ZVVzZXJUeXBlKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVXNlcnMoJycsIHRoaXMuYWN0aXZlVXNlclR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DcmVhdGVVc2VyUmVxdWVzdGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVVc2VyUmVxdWVzdGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyQnlUb2tlbih1c2VyczogTGlzdFVzZXJbXSwgdG9rZW46IHN0cmluZyk6IExpc3RVc2VyW10ge1xyXG4gICAgY29uc3QgdG9rID0gKHRva2VuIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgZmlsdGVyZWQgPSAodXNlcnMgfHwgW10pLmZpbHRlcigodXNlcjogTGlzdFVzZXIpID0+IHtcclxuICAgICAgY29uc3QgZmlyc3ROYW1lID0gKHVzZXI/LmZpcnN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgY29uc3QgbGFzdE5hbWUgPSAodXNlcj8ubGFzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfWAudHJpbSgpO1xyXG4gICAgICBjb25zdCBlbWFpbCA9ICh1c2VyPy5lbWFpbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBmaXJzdE5hbWUuaW5jbHVkZXModG9rKSB8fFxyXG4gICAgICAgIGxhc3ROYW1lLmluY2x1ZGVzKHRvaykgfHxcclxuICAgICAgICBmdWxsTmFtZS5pbmNsdWRlcyh0b2spIHx8XHJcbiAgICAgICAgZW1haWwuaW5jbHVkZXModG9rKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJCeVR5cGUodXNlcnM6IExpc3RVc2VyW10sIHVzZXJUeXBlOiBVU0VSX1RZUEVTX1RZUEUpOiBMaXN0VXNlcltdIHtcclxuICAgIGxldCBmaWx0ZXJlZFVzZXJzOiBMaXN0VXNlcltdO1xyXG4gICAgaWYgKHVzZXJUeXBlID09PSBVU0VSX1RZUEVTX01BUC5DVUNNKSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+ICF1c2VyLndlYmV4VVVJRCAmJiB1c2VyLmN1Y21JZCAhPSBPTl9QUkVNX0lEKTtcclxuICAgIH0gZWxzZSBpZiAodXNlclR5cGUgPT09IFVTRVJfVFlQRVNfTUFQLldFQkVYKSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+IHVzZXIud2ViZXhVVUlEICE9PSBudWxsICYmIHVzZXIud2ViZXhVVUlEICE9PSB1bmRlZmluZWQpO1xyXG4gICAgfSBlbHNlIGlmICh1c2VyVHlwZSA9PT0gVVNFUl9UWVBFU19NQVAuT05QUkVNKSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+ICF1c2VyLndlYmV4VVVJRCAmJiB1c2VyLmN1Y21JZCA9PSBPTl9QUkVNX0lEKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWRVc2VycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1ZhbGlkV2ViZXhVdWlkKHVzZXI6IExpc3RVc2VyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHVzZXI/LndlYmV4VVVJRDtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRmlybXdhcmVEZXZpY2VNYXAoXHJcbiAgICBlbnRpdHk6IE1pZ3JhdGVkRW50aXR5TGlrZSB8IG51bGwsXHJcbiAgICB1c2VyOiBMaXN0VXNlcixcclxuICAgIGN1Y21JZEJ5U2l0ZUlkOiBNYXA8bnVtYmVyLCBudW1iZXI+XHJcbiAgKTogRmlybXdhcmVEZXZpY2VNYXAge1xyXG4gICAgY29uc3QgZGV2aWNlTWFwOiBGaXJtd2FyZURldmljZU1hcCA9IHt9O1xyXG4gICAgY29uc3QgbWFwcGVkRGV2aWNlcyA9IHRoaXMuZ2V0QWN0aXZhdGlvbkRldmljZXMoZW50aXR5LCB1c2VyKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhtYXBwZWREZXZpY2VzKVxyXG5cclxuICAgIGNvbnN0IGRldmljZXM6IGFueSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNpdGVJZCA9IE51bWJlcihlbnRpdHk/LnNvdXJjZVNpdGU/LmlkID8/IHVzZXI/LnNpdGVJZCA/PyAwKTtcclxuICAgIGNvbnN0IGN1Y21JZCA9IGN1Y21JZEJ5U2l0ZUlkLmdldChzaXRlSWQpIHx8IDA7XHJcblxyXG4gICAgbWFwcGVkRGV2aWNlcy5mb3JFYWNoKChyYXdEZXZpY2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBkZXZpY2UgPSByYXdEZXZpY2U7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGRldmljZS5pc1JlZ2lzdGVyZWQgfHwgZGV2aWNlLmRldmljZVRvVXBncmFkZSB8fCBkZXZpY2UuaXNFbGlnaWJsZTtcclxuXHJcbiAgICAgIGRldmljZXMucHVzaCh7XHJcbiAgICAgICAgdXNlcklkOiB1c2VyLnVzZXJpZCxcclxuICAgICAgICBkZXZpY2VOYW1lOiBkZXZpY2UubmFtZS5pbmNsdWRlcygnU0VQJykgPyBkZXZpY2UubmFtZSA6ICdTRVAnICsgZGV2aWNlLm5hbWUgfHwgJycsXHJcbiAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLnByb2R1Y3QgfHwgZGV2aWNlLm1vZGVsIHx8ICcnLFxyXG4gICAgICAgIHN0YXR1czogaXNFbGlnaWJsZSA/ICdFTElHSUJMRV9UT19VUEdSQURFJyA6ICdVTlJFR0lTVEVSRUQnLFxyXG4gICAgICAgIGVycm9yRGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIGN1Y21JZCxcclxuICAgICAgICBmZWF0dXJlOiAnUEVSU09OJyxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgIGRpc2FibGVkUmVhc29uOiBmYWxzZSA/ICdGSVJNV0FSRV9VUEdSQURFLkRFVklDRV9OT1RfTUlHUkFURUQnIDogJycsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFPYmplY3Qua2V5cyhkZXZpY2VNYXApLmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKCdGaXJtd2FyZSBhY3RpdmF0aW9uOiBubyB1c2FibGUgZGV2aWNlcyBmb3VuZCB0byBidWlsZCBkZXZpY2VNYXAuJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkZXZpY2VNYXBbZGV2aWNlLmN1Y21JZF0pIHtcclxuICAgICAgICBkZXZpY2VNYXBbZGV2aWNlLmN1Y21JZF0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWRldmljZU1hcFtkZXZpY2UuY3VjbUlkXVtkZXZpY2UuZmVhdHVyZV0pIHtcclxuICAgICAgICBkZXZpY2VNYXBbZGV2aWNlLmN1Y21JZF1bZGV2aWNlLmZlYXR1cmVdID0gW107XHJcbiAgICAgIH1cclxuICAgICAgZGV2aWNlTWFwW2RldmljZS5jdWNtSWRdW2RldmljZS5mZWF0dXJlXS5wdXNoKGRldmljZS5kZXZpY2VOYW1lKVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJkZXYgbWFwID09PiBcIiwgZGV2aWNlTWFwKTtcclxuXHJcblxyXG4gICAgcmV0dXJuIGRldmljZU1hcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hDdWNtSWRCeVNpdGVJZCgpOiBPYnNlcnZhYmxlPE1hcDxudW1iZXIsIG51bWJlcj4+IHtcclxuICAgIGNvbnN0IHNpdGVzVXJsID0gQVBJLlNJVEVTLnJlcGxhY2UoJzpjdXN0b21lcklkJywgU3RyaW5nKHRoaXMuY3VzdG9tZXJJZCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaFBhZ2luYXRpb24oc2l0ZXNVcmwsIDEwMDAwLCAwLCB7fSwgZmFsc2UpLnBpcGUoXHJcbiAgICAgIG1hcCgoc2l0ZXNSZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNpdGVzID0gc2l0ZXNSZXM/LnBhZ2VEYXRhIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1Y21JZEJ5U2l0ZUlkID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcclxuICAgICAgICBzaXRlcy5mb3JFYWNoKChzaXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNpdGVJZCA9IE51bWJlcihzaXRlPy5pZCk7XHJcbiAgICAgICAgICBjb25zdCBjdWNtSWQgPSBOdW1iZXIoc2l0ZT8uY3VjbT8uaWQpO1xyXG4gICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShzaXRlSWQpICYmIE51bWJlci5pc0Zpbml0ZShjdWNtSWQpKSB7XHJcbiAgICAgICAgICAgIGN1Y21JZEJ5U2l0ZUlkLnNldChzaXRlSWQsIGN1Y21JZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGN1Y21JZEJ5U2l0ZUlkO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWN0aXZhdGlvbkRldmljZXMoZW50aXR5OiBNaWdyYXRlZEVudGl0eUxpa2UgfCBudWxsLCB1c2VyOiBMaXN0VXNlcik6IHVua25vd25bXSB7XHJcbiAgICBjb25zdCBtaWdyYXRlZEVudGl0eURldmljZXM6IHVua25vd25bXSA9IEFycmF5LmlzQXJyYXkoZW50aXR5Py5kZXZpY2VzKVxyXG4gICAgICA/IChlbnRpdHk/LmRldmljZXMgPz8gW10pXHJcbiAgICAgIDogW107XHJcblxyXG4gICAgY29uc3QgZW50aXR5RGV2aWNlczogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheShlbnRpdHk/LndlYmV4TWlncmF0aW9uRGV2aWNlcylcclxuICAgICAgPyAoZW50aXR5Py53ZWJleE1pZ3JhdGlvbkRldmljZXMgPz8gW10pXHJcbiAgICAgIDogW107XHJcblxyXG4gICAgY29uc3QgYWxsRW50aXR5RGV2aWNlcyA9IFsuLi5taWdyYXRlZEVudGl0eURldmljZXMsIC4uLmVudGl0eURldmljZXNdO1xyXG4gICAgaWYgKGFsbEVudGl0eURldmljZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBhbGxFbnRpdHlEZXZpY2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZhbGxiYWNrIGZvciBwYXJ0aWFsIHJlc3BvbnNlcyB3aGVyZSBvbmx5IGxpc3QtdXNlciBkZXZpY2VzIGFyZSBhdmFpbGFibGUuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi4oQXJyYXkuaXNBcnJheSh1c2VyPy5kZXZpY2VzKSA/IHVzZXIuZGV2aWNlcyA6IFtdKSxcclxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkodXNlcj8uZGV2aWNlUHJvZmlsZXMpID8gdXNlci5kZXZpY2VQcm9maWxlcyA6IFtdKSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVud3JhcE1pZ3JhdGVkRGV2aWNlKHJhd0RldmljZTogdW5rbm93bik6IE1pZ3JhdGVkRGV2aWNlTGlrZSB7XHJcbiAgICBjb25zdCBjYW5kaWRhdGUgPSByYXdEZXZpY2UgYXMgTWlncmF0ZWREZXZpY2VMaWtlO1xyXG4gICAgaWYgKGNhbmRpZGF0ZT8uZGV2aWNlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uY2FuZGlkYXRlLmRldmljZSxcclxuICAgICAgICAuLi5jYW5kaWRhdGUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc01pZ3JhdGVkRGV2aWNlRWxpZ2libGUoZGV2aWNlOiBNaWdyYXRlZERldmljZUxpa2UpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGhhc0VsaWdpYmlsaXR5U2lnbmFsID0gZGV2aWNlPy5pc1JlZ2lzdGVyZWQgIT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCBkZXZpY2U/LmRldmljZVRvVXBncmFkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IGRldmljZT8uaXNFbGlnaWJsZSAhPT0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICghaGFzRWxpZ2liaWxpdHlTaWduYWwpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICEhKGRldmljZT8uaXNSZWdpc3RlcmVkIHx8IGRldmljZT8uZGV2aWNlVG9VcGdyYWRlIHx8IGRldmljZT8uaXNFbGlnaWJsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RDdWNtSWQoXHJcbiAgICBlbnRpdHk6IE1pZ3JhdGVkRW50aXR5TGlrZSB8IG51bGwsXHJcbiAgICBkZXZpY2U6IE1pZ3JhdGVkRGV2aWNlTGlrZSxcclxuICAgIHVzZXI6IExpc3RVc2VyXHJcbiAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBkZXZpY2VDdWNtSWQgPSBOdW1iZXIoZGV2aWNlPy5jdWNtSWQpO1xyXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZXZpY2VDdWNtSWQpICYmIGRldmljZUN1Y21JZCA+IDApIHtcclxuICAgICAgcmV0dXJuIGRldmljZUN1Y21JZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1c2VyQ3VjbUlkID0gTnVtYmVyKHVzZXI/LmN1Y21JZCk7XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHVzZXJDdWNtSWQpKSB7XHJcbiAgICAgIHJldHVybiB1c2VyQ3VjbUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eUN1Y21JZCA9IE51bWJlcihlbnRpdHk/LmN1Y21JZCk7XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGVudGl0eUN1Y21JZCkpIHtcclxuICAgICAgcmV0dXJuIGVudGl0eUN1Y21JZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZU1pZ3JhdGVkRGV2aWNlS2V5KGRldmljZTogTWlncmF0ZWREZXZpY2VMaWtlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBTdHJpbmcoXHJcbiAgICAgIGRldmljZT8ubmFtZSB8fFxyXG4gICAgICBkZXZpY2U/Lm1hYyB8fFxyXG4gICAgICBkZXZpY2U/LmRldmljZUlkIHx8XHJcbiAgICAgIGRldmljZT8uY2lzVXVpZCB8fFxyXG4gICAgICBkZXZpY2U/LmlkIHx8XHJcbiAgICAgICcnXHJcbiAgICApLnRyaW0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdE1pZ3JhdGVkRGV2aWNlTGluZXMoZGV2aWNlOiBNaWdyYXRlZERldmljZUxpa2UpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgICBjb25zdCBsaW5lQXNzb2NpYXRpb25zID0gQXJyYXkuaXNBcnJheShkZXZpY2U/LmxpbmVBc3NvY2lhdGlvbnMpID8gZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgOiBbXTtcclxuICAgIGxpbmVBc3NvY2lhdGlvbnMuZm9yRWFjaCgobGluZUFzc29jaWF0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdG9yeU51bWJlciA9IGxpbmVBc3NvY2lhdGlvbj8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZUFzc29jaWF0aW9uPy5kaXJlY3RvcnlOdW1iZXI/LnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgICBjb25zdCBlMTY0TWFzayA9IGxpbmVBc3NvY2lhdGlvbj8uZTE2NE1hc2s7XHJcblxyXG4gICAgICBbZGlyZWN0b3J5TnVtYmVyLCB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlciwgZTE2NE1hc2tdLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIGlmIChub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICB2YWx1ZXMuYWRkKG5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBsaW5lcyA9IEFycmF5LmlzQXJyYXkoZGV2aWNlPy5saW5lcykgPyBkZXZpY2UubGluZXMgOiBbXTtcclxuICAgIGxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcclxuICAgICAgY29uc3QgZGlyZWN0b3J5TnVtYmVyID0gbGluZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZT8uZGlyZWN0b3J5TnVtYmVyPy50ZW1wbGF0ZURpcmVjdG9yeU51bWJlcjtcclxuICAgICAgW2RpcmVjdG9yeU51bWJlciwgdGVtcGxhdGVEaXJlY3RvcnlOdW1iZXJdLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIGlmIChub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICB2YWx1ZXMuYWRkKG5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgb25GaXJtd2FyZVVwZ3JhZGVDbGlja2VkKHVzZXI6IExpc3RVc2VyKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFdlYmV4VXVpZCh1c2VyKSB8fCB1c2VyLnN0YXR1cyAhPT0gJ0luYWN0aXZlJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFVzZXJMaXN0Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdGl0bGU6IGBBY3RpdmF0ZSB1c2VyICR7dXNlci51c2VyaWR9IG9uIE11bHRpIFRlbmFudD9gLFxyXG4gICAgICAgIG1lc3NhZ2U6IGA8cD5BY3RpdmF0aW5nIHRoaXMgdXNlciB3aWxsIHBlcmZvcm0gdGhlIGN1dG92ZXIgdG8gTXVsdGkgVGVuYW50IGFuZCBjb21wbGV0ZSB0aGUgbWlncmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgICAgICAgPHA+QWZ0ZXIgYWN0aXZhdGlvbiwgdGhlIHVzZXIgd2lsbCBiZWNvbWUgYWN0aXZlIG9uIE11bHRpIFRlbmFudCBhbmQgdGhlIG9yaWdpbmFsIHVzZXIgd2lsbCBiZWNvbWUgaW5hY3RpdmUuPC9wPlxyXG4gICAgICAgICAgPHA+RG8geW91IHdhbnQgdG8gY29udGludWU/PC9wPmAsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdBY3RpdmF0ZScsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZXRVc2VyUGVuZGluZ1N0YXR1cyh1c2VyLCAnUGVuZGluZyBBY3RpdmF0aW9uJyk7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAgICAgLmdldE1pZ3JhdGVkTWlncmF0aW9uRm9ybUVudGl0aWVzKHRoaXMuY3VzdG9tZXJJZCwgdXNlci53ZWJleFVVSUQgfHwgJycsICdQRVJTT04nKVxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgbWFwKChlbnRpdGllczogYW55W10pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShlbnRpdGllcykgPyBlbnRpdGllc1swXSA6IGVudGl0aWVzIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZm9ybUlkID0gZW50aXR5Py5taWdyYXRpb25Gb3JtSWQgPz8gZW50aXR5Py5pZCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgIGlmICghZm9ybUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdJbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKCdBY3RpdmF0aW9uIGZhaWxlZC4gTWlncmF0aW9uIGZvcm0gbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hDdWNtSWRCeVNpdGVJZCgpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKGN1Y21JZEJ5U2l0ZUlkKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICBmb3JtSWQsXHJcbiAgICAgICAgICAgICAgICAgIGRldmljZU1hcDogdGhpcy5idWlsZEZpcm13YXJlRGV2aWNlTWFwKFxyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eSBhcyBNaWdyYXRlZEVudGl0eUxpa2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcixcclxuICAgICAgICAgICAgICAgICAgICBjdWNtSWRCeVNpdGVJZFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGZvcm1JZCwgZGV2aWNlTWFwIH0pID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGV2aWNlIG1hcCA9PT4gJywgZGV2aWNlTWFwKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnRyaWdnZXJGaXJtd2FyZVVwZ3JhZGUodGhpcy5jdXN0b21lcklkLCBOdW1iZXIoZm9ybUlkKSwgZGV2aWNlTWFwKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IGZvcm1JZCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChmb3JtSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXNCeVVzZXJJZChmb3JtSWQsIHVzZXIudXNlcmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdBY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxVc2VyU3RhdHVzKHVzZXIuZW1haWwsICdJbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3MoYCR7dXNlci51c2VyaWR9IHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWRgKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdJbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcignQWN0aXZhdGlvbiBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUmV2ZXJ0Q2xpY2tlZCh1c2VyOiBMaXN0VXNlcikge1xyXG4gICAgaWYgKHVzZXI/LndlYmV4VVVJRCkge1xyXG4gICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdQZW5kaW5nIERlYWN0aXZhdGlvbicpO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnJldmVydE1pZ3JhdGlvbih0aGlzLmN1c3RvbWVySWQsIHVzZXIud2ViZXhVVUlEKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRpbWVyKDIwMDApKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVc2VyUGVuZGluZ1N0YXR1cyh1c2VyLCAnSW5hY3RpdmUnKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW5hbFVzZXJTdGF0dXModXNlci5lbWFpbCwgJ0FjdGl2ZScpO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm5vdGlmaWNhdGlvbnMuc3VjY2VzcyhgJHt1c2VyLnVzZXJpZH0gc3VjY2Vzc2Z1bGx5IGRlYWN0aXZhdGVkYCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWlncmF0ZWRVc2VycygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlclBlbmRpbmdTdGF0dXModXNlciwgJ0FjdGl2ZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVc2VyUGVuZGluZ1N0YXR1cyh1c2VyOiBMaXN0VXNlciwgc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHVzZXIuc3RhdHVzID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb2xsTWlncmF0aW9uRm9ybVN0YXR1cyhcclxuICAgIGZvcm1JZDogbnVtYmVyLFxyXG4gICAgaW5kZXg6IG51bWJlcixcclxuICAgIG9uQ29tcGxldGVkOiAoKSA9PiB2b2lkLFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGltZXIoMCwgNTAwMClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMudXNlclNlcnZpY2UuZ2V0TWlncmF0aW9uRm9ybVN0YXR1cyh0aGlzLmN1c3RvbWVySWQsIGZvcm1JZCkpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICB0YWtlV2hpbGUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlPy5zdGF0dXM7XHJcbiAgICAgICAgICByZXR1cm4gIXRoaXMuaXNNaWdyYXRpb25TdGF0dXNDb21wbGV0ZWQoc3RhdHVzKVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5pc01pZ3JhdGlvblN0YXR1c0ZhaWxlZChzdGF0dXMpXHJcbiAgICAgICAgICAgICYmICF0aGlzLmlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkV2l0aEVycm9ycyhzdGF0dXMpO1xyXG4gICAgICAgIH0sIHRydWUpLFxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZT8uc3RhdHVzO1xyXG4gICAgICAgICAgY29uc3QgdXNlcklkID0gdGhpcy51c2Vycz8uW2luZGV4XT8udXNlcmlkIHx8ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNNaWdyYXRpb25TdGF0dXNDb21wbGV0ZWRXaXRoRXJyb3JzKHN0YXR1cykgJiYgdXNlcklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGVkV2l0aEVycm9yc0J5VXNlcklkKHVzZXJJZCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLmlzTWlncmF0aW9uU3RhdHVzRmFpbGVkKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZChzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdBY3RpdmUnKTtcclxuICAgICAgICAgICAgb25Db21wbGV0ZWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVVzZXJJbk1pZ3JhdGlvblByb2dyZXNzKCk7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvbGxNaWdyYXRpb25Gb3JtU3RhdHVzQnlVc2VySWQoXHJcbiAgICBmb3JtSWQ6IG51bWJlcixcclxuICAgIHVzZXJJZDogc3RyaW5nLFxyXG4gICAgb25Db21wbGV0ZWQ6ICgpID0+IHZvaWQsXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aW1lcigwLCA1MDAwKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy51c2VyU2VydmljZS5nZXRNaWdyYXRpb25Gb3JtU3RhdHVzKHRoaXMuY3VzdG9tZXJJZCwgZm9ybUlkKSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxyXG4gICAgICAgIHRha2VXaGlsZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2U/LnN0YXR1cztcclxuICAgICAgICAgIHJldHVybiAhdGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZChzdGF0dXMpXHJcbiAgICAgICAgICAgICYmICF0aGlzLmlzTWlncmF0aW9uU3RhdHVzRmFpbGVkKHN0YXR1cylcclxuICAgICAgICAgICAgJiYgIXRoaXMuaXNNaWdyYXRpb25TdGF0dXNDb21wbGV0ZWRXaXRoRXJyb3JzKHN0YXR1cyk7XHJcbiAgICAgICAgfSwgdHJ1ZSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHJlc3BvbnNlPy5zdGF0dXM7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0VXNlckluZGV4QnlJZCh1c2VySWQpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNNaWdyYXRpb25TdGF0dXNDb21wbGV0ZWRXaXRoRXJyb3JzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wbGV0ZWRXaXRoRXJyb3JzQnlVc2VySWQodXNlcklkKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNNaWdyYXRpb25TdGF0dXNGYWlsZWQoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVVzZXJJbk1pZ3JhdGlvblByb2dyZXNzKCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdNaWdyYXRpb24gRXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZChzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0FjdGl2ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9uQ29tcGxldGVkKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFVzZXJJbmRleEJ5SWQodXNlcklkKTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzVG9Vc2VyKGluZGV4LCAnTWlncmF0aW9uIEVycm9yJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXNlckluZGV4QnlJZCh1c2VySWQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy51c2Vycz8uZmluZEluZGV4KCh1c2VyKSA9PiB1c2VyLnVzZXJpZCA9PT0gdXNlcklkKSA/PyAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3JpZ2luYWxVc2VyU3RhdHVzKGVtYWlsID0gJycsIHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBvcmlnaW5hbFVzZXIgPSB0aGlzLnVzZXJzLmZpbmQoKHVzZXIpID0+IHVzZXIuZW1haWwgPT09IGVtYWlsICYmICF1c2VyLndlYmV4VVVJRCk7XHJcbiAgICBpZiAob3JpZ2luYWxVc2VyKSB7XHJcbiAgICAgIG9yaWdpbmFsVXNlci5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiZGF0YVBlbmRpbmdcIj48L2FwcC1sb2FkZXI+XHJcbjxkaXYgKm5nSWY9XCIhc2hvd01vdmVVc2VyV2l6YXJkXCIgaWQ9XCJ1c2Vycy1saXN0XCI+XHJcbiAgPHRrLXVzZXJzLXRhYmxlLXRvb2xiYXJcclxuICAgIFt0b3RhbFVzZXJzQ291bnRdPVwidG90YWxVc2Vyc0NvdW50XCJcclxuICAgIFtzZWFyY2hWYWx1ZV09XCJhY3RpdmVTZWFyY2hUb2tlblwiXHJcbiAgICBbc2VsZWN0ZWRVc2VyVHlwZV09XCJhY3RpdmVVc2VyVHlwZVwiXHJcbiAgICAoc2VhcmNoQ2hhbmdlKT1cInNlYXJjaFVzZXJzKCRldmVudClcIlxyXG4gICAgKHNlYXJjaEJ5VHlwZSk9XCJzZWFyY2hCeVR5cGUoJGV2ZW50KVwiXHJcbiAgICAoYWRkVXNlcik9XCJvbkNyZWF0ZVVzZXJSZXF1ZXN0ZWQoKVwiXHJcbiAgPjwvdGstdXNlcnMtdGFibGUtdG9vbGJhcj5cclxuICA8dGFibGVcclxuICAgIGNsYXNzPVwid2ViZXgtdGFibGVcIlxyXG4gICAgbWF0LXRhYmxlXHJcbiAgICAqbmdJZj1cInVzZXJzPy5sZW5ndGhcIlxyXG4gICAgI3RhYmxlXHJcbiAgICBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCJcclxuICA+XHJcbiAgICA8IS0tIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwidXNlci1pY29uXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiPjwvdGg+XHJcbiAgICAgIDx0ZCBjbGFzcz1cInVzZXItc2l0ZVwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHVzZXJcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieydkaXNhYmxlZC11c2VyLXJvdyc6IG1vdmVVc2VyUGVuZGluZyAmJiBtb3ZlSW5Qcm9ncmVzc1VzZXJJZCAmJiBtb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9PT0gdXNlcj8udXNlcmlkfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25Vc2VyQ2xpY2sodXNlcilcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImljb24td2ViZXgtYm94XCI+PHNwYW4gY2xhc3M9XCJpY29uLXdlYmV4IGljb24td2ViZXgtdXNlclwiPjwvc3Bhbj48L3NwYW4+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj4gLS0+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJuYW1lXCI+XHJcbiAgICAgIDx0aFxyXG4gICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiXHJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDYwcHhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgRGlzcGxheSBuYW1lXHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIGNsYXNzPVwidXNlci1zaXRlXCJcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHVzZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJvblVzZXJDbGljayh1c2VyKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheS1uYW1lLXdyYXBwZXJcIj5cclxuICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgIGNsYXNzPVwidXNlci1uYW1lLXRleHRcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpbmFjdGl2ZS11c2VyLXJvdyc6IHVzZXIuc3RhdHVzICE9PSAnQWN0aXZlJyB9XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgdXNlci5maXJzdE5hbWUgfX0ge3sgdXNlci5sYXN0TmFtZSB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXdlYmV4LWJveFwiXHJcbiAgICAgICAgICAgID48c3BhbiBjbGFzcz1cImljb24td2ViZXggaWNvbi13ZWJleC11c2VyXCI+PC9zcGFuXHJcbiAgICAgICAgICA+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJlbWFpbFwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwid2ViZXgtdGFibGUtdGhcIj5FbWFpbDwvdGg+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIGNsYXNzPVwidXNlci1zaXRlXCJcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHVzZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJvblVzZXJDbGljayh1c2VyKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyB1c2VyLmVtYWlsIH19XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInN0YXR1c1wiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwid2ViZXgtdGFibGUtdGhcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImhlYWRlci13aXRoLWluZm9cIj5cclxuICAgICAgICAgIFN0YXR1c1xyXG4gICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvaW5mby1jaXJjbGUtcmVndWxhci5zdmdcIiB3aWR0aD1cIjE2XCIgYWx0PVwiXCIgLz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIGNsYXNzPVwidXNlci1zaXRlXCJcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHVzZXJcIlxyXG4gICAgICAgIChjbGljayk9XCJvblVzZXJDbGljayh1c2VyKVwiXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICB1c2VyLnN0YXR1cyAhPT0gJ0FjdGl2ZScgJiYgdXNlci53ZWJleFVVSURcclxuICAgICAgICAgICAgPyAnUGVuZGluZyBjdXRvdmVyIHRvIE1ULiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IgZm9yIGRldGFpbHMuJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgXCJcclxuICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8c3BhblxyXG4gICAgICAgICAgY2xhc3M9XCJpY29uLXVzZXItc3RhdHVzXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2ljb24tdXNlci1zdGF0dXMtYWN0aXZlJzogdXNlci5zdGF0dXMgPT09ICdBY3RpdmUnIH1cIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+e3sgdXNlci5zdGF0dXMgfX1cclxuICAgICAgPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uc1wiPlxyXG4gICAgICA8dGhcclxuICAgICAgICBtYXQtaGVhZGVyLWNlbGxcclxuICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZlxyXG4gICAgICAgIGNsYXNzPVwid2ViZXgtdGFibGUtdGhcIlxyXG4gICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAyNHB4OyBwYWRkaW5nLXRvcDogNHB4XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL3NldHRpbmdzLXJlZ3VsYXIuc3ZnXCIgd2lkdGg9XCIxNlwiIGFsdD1cIlwiIC8+XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIGNsYXNzPVwidXNlci1zaXRlIGFjdGlvbnMtY2VsbFwiXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCB1c2VyOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcclxuICAgICAgICAgIGNsYXNzPVwiZmllbGQtc3Bpbm5lclwiXHJcbiAgICAgICAgICBbZGlhbWV0ZXJdPVwiMzBcIlxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg9XCIzXCJcclxuICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHVzZXIuc3RhdHVzID09PSAnSW4gUHJvZ3Jlc3MnIHx8XHJcbiAgICAgICAgICAgIHVzZXIuc3RhdHVzID09PSAnUGVuZGluZyBBY3RpdmF0aW9uJyB8fFxyXG4gICAgICAgICAgICB1c2VyLnN0YXR1cyA9PT0gJ1BlbmRpbmcgRGVhY3RpdmF0aW9uJ1xyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgIHVzZXIuc3RhdHVzID09PSAnSW4gUHJvZ3Jlc3MnIHx8XHJcbiAgICAgICAgICAgICAgdXNlci5zdGF0dXMgPT09ICdQZW5kaW5nIEFjdGl2YXRpb24nIHx8XHJcbiAgICAgICAgICAgICAgdXNlci5zdGF0dXMgPT09ICdQZW5kaW5nIERlYWN0aXZhdGlvbidcclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICAhKFxyXG4gICAgICAgICAgICAgIG1vdmVVc2VyUGVuZGluZyAmJlxyXG4gICAgICAgICAgICAgIG1vdmVJblByb2dyZXNzVXNlcklkICYmXHJcbiAgICAgICAgICAgICAgbW92ZUluUHJvZ3Jlc3NVc2VySWQgPT09IHVzZXI/LnVzZXJpZFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tYWN0aW9uLWRvdFwiXHJcbiAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1hY3Rpb25zLWRvdHNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWRvdFwiPi48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1kb3RcIj4uPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tZG90XCI+Ljwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwidHJ1ZVwiPlJlc2VuZCBJbnZpdGF0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cInRydWVcIj5SZXNldCBQYXNzd29yZDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cIiF1c2VyLndlYmV4VVVJRCAmJiB1c2VyLmN1Y21JZCA9PSBPTl9QUkVNX0lEXCJcclxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJDb21pbmcgc29vblwiXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgRW5hYmxlIEFJIFRyYW5zY3JpYmVcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlci53ZWJleFVVSUQgfHwgdXNlci5zdGF0dXMgIT09ICdBY3RpdmUnXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5pc01pZ3JhdGVkXCJcclxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Nb3ZlVXNlcih1c2VyLCBpLCAnUXVpY2tNb3ZlJywgJ01UJylcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBRdWljayBVcGdyYWRlIFVzZXIgdG8gTVRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlci53ZWJleFVVSUQgfHwgdXNlci5zdGF0dXMgIT09ICdBY3RpdmUnXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5pc01pZ3JhdGVkXCJcclxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Nb3ZlVXNlcih1c2VyLCBpLCAnTVQnLCAnTVQnKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFVwZ3JhZGUgVXNlciB0byBNVFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwidXNlci5pc01pZ3JhdGVkXCJcclxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25Nb3ZlVXNlcih1c2VyLCBpLCAnREknLCAnREknKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFJldmVydCBVc2VyIHRvIFVDTS9ESVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc1ZhbGlkV2ViZXhVdWlkKHVzZXIpIHx8IHVzZXIuc3RhdHVzICE9PSAnSW5hY3RpdmUnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRmlybXdhcmVVcGdyYWRlQ2xpY2tlZCh1c2VyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEFjdGl2YXRlIFVzZXJcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXNlci53ZWJleFVVSUQgfHwgdXNlci5zdGF0dXMgIT09ICdBY3RpdmUnXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmV2ZXJ0Q2xpY2tlZCh1c2VyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIFJldmVydFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cInRydWVcIj5EZWxldGUgVXNlcjwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJvbGVcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cIndlYmV4LXRhYmxlLXRoXCI+XHJcbiAgICAgICAgQWRtaW4gcm9sZXNcclxuICAgICAgPC90aD5cclxuICAgICAgPHRkXHJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLXNpdGVcIlxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaW5hY3RpdmUtdXNlci1yb3cnOiB1c2VyLnN0YXR1cyAhPT0gJ0FjdGl2ZScgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXNlckNsaWNrKHVzZXIpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHVzZXIucm9sZU5hbWUgfHwgXCItXCIgfX1cclxuICAgICAgPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic291cmNlXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiPlxyXG4gICAgICAgIFByb3Zpc2lvbmluZyBUeXBlXHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIGNsYXNzPVwidXNlci1wcm92aXNpb25pbmctdHlwZVwiXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCB1c2VyXCJcclxuICAgICAgICAoY2xpY2spPVwib25Vc2VyQ2xpY2sodXNlcilcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXIud2ViZXhVVUlEXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24td3JhcHBlclwiXHJcbiAgICAgICAgICAgID48aW1nXHJcbiAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL3dlYmV4LnN2Z1wiXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1dlYmV4IENhbGxpbmcnXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgIC8+PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlci53ZWJleFVVSURcIj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlci5jdWNtSWQgPT0gT05fUFJFTV9JRFwiIGNsYXNzPVwiaWNvbi13cmFwcGVyXCJcclxuICAgICAgICAgICAgPjxpbWdcclxuICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvbG9jYWxfMjQuc3ZnXCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidVQ00nXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXHJcbiAgICAgICAgICAvPjwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwidXNlci5jdWNtSWQgIT0gT05fUFJFTV9JRFwiIGNsYXNzPVwiaWNvbi13cmFwcGVyXCJcclxuICAgICAgICAgICAgPjxpbWdcclxuICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaWNvbnMvZGlfY2xvdWRfMjQuc3ZnXCJcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInV2ViZXggQ2FsbGluZyBESSdcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICB3aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICBhbHQ9XCJcIlxyXG4gICAgICAgICAgLz48L3NwYW4+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImxhc3QtYWN0aXZlLXRpbWVcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cIndlYmV4LXRhYmxlLXRoXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWFkZXItd2l0aC1pbmZvXCI+XHJcbiAgICAgICAgICBMYXN0IGFjdGl2ZSB0aW1lXHJcbiAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cImluZm8taWNvblwiPmluZm88L21hdC1pY29uPiAtLT5cclxuICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2luZm8tY2lyY2xlLXJlZ3VsYXIuc3ZnXCIgd2lkdGg9XCIxNlwiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGRcclxuICAgICAgICBjbGFzcz1cInVzZXItc2l0ZVwiXHJcbiAgICAgICAgbWF0LWNlbGxcclxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCB1c2VyXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7ICdpbmFjdGl2ZS11c2VyLXJvdyc6IHVzZXIuc3RhdHVzICE9PSAnQWN0aXZlJyB9XCJcclxuICAgICAgICAoY2xpY2spPVwib25Vc2VyQ2xpY2sodXNlcilcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZ2V0VG9kYXlTaG9ydERhdGUoKSB9fVxyXG4gICAgICA8L3RkPlxyXG4gICAgICAvXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxyXG4gICAgPHRyXHJcbiAgICAgIG1hdC1yb3dcclxuICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnNcIlxyXG4gICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2Rpc2FibGVkLXVzZXItcm93JzpcclxuICAgICAgICAgIG1vdmVVc2VyUGVuZGluZyAmJlxyXG4gICAgICAgICAgbW92ZUluUHJvZ3Jlc3NVc2VySWQgJiZcclxuICAgICAgICAgIG1vdmVJblByb2dyZXNzVXNlcklkID09PSByb3c/LnVzZXJpZCxcclxuICAgICAgICAnaW5hY3RpdmUtdXNlci1yb3cnOiByb3cuc3RhdHVzICE9PSAnQWN0aXZlJyxcclxuICAgICAgfVwiXHJcbiAgICA+PC90cj5cclxuICA8L3RhYmxlPlxyXG5cclxuICA8YXBwLXBhZ2luYXRpb25cclxuICAgIFtwYWdpbmF0aW9uXT1cInVzZXJzU2VhcmNoU2VydmljZS5nZXRQYWdpbmF0aW9uKClcIlxyXG4gICAgW3Nob3dQYWdlU2l6ZU9wdGlvbnNdPVwidHJ1ZVwiXHJcbiAgICAocGFnZU51bWJlckNoYW5nZUVtaXR0ZXIpPVwicGFnZU51bWJlckNoYW5nZUV2ZW50KCRldmVudClcIlxyXG4gICAgKHBhZ2VFbWl0dGVyKT1cInBhZ2VFdmVudCgkZXZlbnQpXCJcclxuICA+XHJcbiAgPC9hcHAtcGFnaW5hdGlvbj5cclxuPC9kaXY+XHJcblxyXG48YXBwLW1vdmUtdXNlci13aXphcmRcclxuICAqbmdJZj1cInNob3dNb3ZlVXNlcldpemFyZFwiXHJcbiAgW3VzZXJdPVwibW92ZVVzZXJcIlxyXG4gIChkb25lKT1cImNsb3NlTW92ZVVzZXJXaXphcmQodHJ1ZSlcIlxyXG4gIFtjdXN0b21lcklkXT1cImN1c3RvbWVySWRcIlxyXG4gIChydW5Nb3ZlVXNlcik9XCJydW5Nb3ZlVXNlclRvTVQoKVwiXHJcbiAgKGNsb3NlTW92ZVVzZXJXaXphcmQpPVwiY2xvc2VNb3ZlVXNlcldpemFyZChmYWxzZSlcIlxyXG4+PC9hcHAtbW92ZS11c2VyLXdpemFyZD5cclxuIl19
812
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvdXNlcnMtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvdXNlcnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsR0FBRyxFQUFxQyxVQUFVLEVBQUUsY0FBYyxFQUFtQixNQUFNLGlCQUFpQixDQUFDO0FBRXRILE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0csTUFBTSxjQUFjLEdBQUc7SUFDckIsTUFBTTtJQUNOLE9BQU87SUFDUCxRQUFRO0lBQ1Isa0JBQWtCO0lBQ2xCLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztDQUNWLENBQUM7QUFDRixNQUFNLGFBQWEsR0FBRztJQUNwQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsaUJBQWlCLEVBQUUsaUJBQWlCO0NBQ3JDLENBQUM7QUE4Q0YsTUFBTSxPQUFPLGtCQUFrQjtJQWdDN0IsaUJBQWlCO1FBQ2YsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMs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XHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBFTVBUWSwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YWtlV2hpbGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVzZXJzU2VhcmNoU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdXNlcnMtc2VhcmNoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaXN0VXNlciB9IGZyb20gJy4vY2xhc3Nlcy91c2VyLWxpc3QnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IEFwaVdlYmV4U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXBpLXdlYmV4LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUEksIENVU1RPTUVSX0RFU1RJTkFUSU9OLCBNQVhfSU5URUdFUiwgT05fUFJFTV9JRCwgVVNFUl9UWVBFU19NQVAsIFVTRVJfVFlQRVNfVFlQRSB9IGZyb20gJy4vYXBwLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFVzZXJMaXN0Q29uZmlybURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vdXNlci1saXN0LWNvbmZpcm0tZGlhbG9nL3VzZXItbGlzdC1jb25maXJtLWRpYWxvZy5jb21wb25lbnQnO1xyXG5cclxuY29uc3QgRElTUExBWUVEX0NPTFMgPSBbXHJcbiAgJ25hbWUnLFxyXG4gICdlbWFpbCcsXHJcbiAgJ3N0YXR1cycsXHJcbiAgJ2xhc3QtYWN0aXZlLXRpbWUnLFxyXG4gICdyb2xlJyxcclxuICAnc291cmNlJyxcclxuICAnYWN0aW9ucycsXHJcbl07XHJcbmNvbnN0IExPQ0FMX1NUT1JBR0UgPSB7XHJcbiAgVVNFUl9JTl9NSUdSQVRJT046ICd1c2VySWRJbk1pZ3JhdGlvbicsXHJcbiAgTUlHUkFUSU9OX0ZPUk1fSUQ6ICdtaWdyYXRpb25Gb3JtSWQnLFxyXG59O1xyXG5cclxudHlwZSBGaXJtd2FyZURldmljZU1hcCA9IFJlY29yZDxudW1iZXIsIFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPj47XHJcblxyXG5pbnRlcmZhY2UgTWlncmF0ZWRFbnRpdHlMaWtlIHtcclxuICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XHJcbiAgY3VjbUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcclxuICBkZXZpY2VzPzogdW5rbm93bltdO1xyXG4gIHNvdXJjZVNpdGU/OiB7XHJcbiAgICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XHJcbiAgICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICB9IHwgbnVsbDtcclxuICB3ZWJleE1pZ3JhdGlvbkRldmljZXM/OiB1bmtub3duW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBNaWdyYXRlZERldmljZUxpa2Uge1xyXG4gIGRldmljZT86IE1pZ3JhdGVkRGV2aWNlTGlrZTtcclxuICBpZD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XHJcbiAgbmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgbWFjPzogc3RyaW5nIHwgbnVsbDtcclxuICBkZXZpY2VJZD86IHN0cmluZyB8IG51bGw7XHJcbiAgY2lzVXVpZD86IHN0cmluZyB8IG51bGw7XHJcbiAgY3VjbUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcclxuICBpc1JlZ2lzdGVyZWQ/OiBib29sZWFuIHwgbnVsbDtcclxuICBkZXZpY2VUb1VwZ3JhZGU/OiBib29sZWFuIHwgbnVsbDtcclxuICBpc0VsaWdpYmxlPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgbGluZUFzc29jaWF0aW9ucz86IEFycmF5PHtcclxuICAgIGRpcmVjdG9yeU51bWJlcj86IHtcclxuICAgICAgZGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgdGVtcGxhdGVEaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgfSB8IG51bGw7XHJcbiAgICBlMTY0TWFzaz86IHN0cmluZyB8IG51bGw7XHJcbiAgfT47XHJcbiAgbGluZXM/OiBBcnJheTx7XHJcbiAgICBkaXJlY3RvcnlOdW1iZXI/OiB7XHJcbiAgICAgIGRpcmVjdG9yeU51bWJlcj86IHN0cmluZyB8IG51bGw7XHJcbiAgICAgIHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nIHwgbnVsbDtcclxuICAgIH0gfCBudWxsO1xyXG4gIH0+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC11c2Vycy1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXNlcnMtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlcnNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1c3RvbWVySWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l0ZUlkITogbnVtYmVyO1xyXG5cclxuICBAT3V0cHV0KCkgb3BlblVzZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHVzZXJNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc3dpdGNoVG9XaXphcmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZVVzZXJSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcblxyXG4gIGRhdGFQZW5kaW5nITogYm9vbGVhbjtcclxuICBtb3ZlSW5Qcm9ncmVzc1VzZXJJZCE6IHN0cmluZztcclxuICB1c2VycyE6IExpc3RVc2VyW107XHJcbiAgcHJpdmF0ZSBiYXNlVXNlcnM6IExpc3RVc2VyW10gPSBbXTtcclxuICBkYXRhU291cmNlITogTWF0VGFibGVEYXRhU291cmNlPExpc3RVc2VyPjtcclxuICBkaXNwbGF5ZWRDb2x1bW5zID0gRElTUExBWUVEX0NPTFM7XHJcbiAgbW92ZVVzZXI6IGFueTtcclxuICBtb3ZlVXNlckluZGV4OiBhbnk7XHJcbiAgc2hvd01vdmVVc2VyV2l6YXJkID0gZmFsc2U7XHJcbiAgbW92ZVVzZXJQZW5kaW5nID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBhY3RpdmVTZWFyY2hUb2tlbiA9ICcnO1xyXG4gIGFjdGl2ZVVzZXJUeXBlOiBVU0VSX1RZUEVTX1RZUEUgPSBudWxsO1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgT05fUFJFTV9JRCA9IE9OX1BSRU1fSUQ7XHJcblxyXG4gIHRvdGFsVXNlcnNDb3VudDogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgZ2V0VG9kYXlTaG9ydERhdGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBtb250aCA9IG5vdy5nZXRNb250aCgpICsgMTtcclxuICAgIGNvbnN0IGRheSA9IG5vdy5nZXREYXRlKCk7XHJcbiAgICBjb25zdCB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCkgJSAxMDA7XHJcbiAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkKHN0YXR1czogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IChzdGF0dXMgfHwgJycpLnRvVXBwZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gbm9ybWFsaXplZCA9PT0gJ0NPTVBMRVRFRCc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkV2l0aEVycm9ycyhzdGF0dXM6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSAoc3RhdHVzIHx8ICcnKS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICdDT01QTEVURURfV0lUSF9FUlJPUlMnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWZyZXNoVXNlcnNBZnRlck9wZXJhdGlvbihkZWxheU1zOiBudW1iZXIgPSAwKTogdm9pZCB7XHJcbiAgICBpZiAoZGVsYXlNcyA+IDApIHtcclxuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5nZXRNaWdyYXRlZFVzZXJzKCksIGRlbGF5TXMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ29tcGxldGVkV2l0aEVycm9yc0J5VXNlcklkKHVzZXJJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0VXNlckluZGV4QnlJZCh1c2VySWQpO1xyXG4gICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdDb21wbGV0ZWQgd2l0aCBlcnJvcnMnKTtcclxuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdJbmFjdGl2ZScpLCA1MDAwKTtcclxuICAgICAgdGhpcy5yZWZyZXNoVXNlcnNBZnRlck9wZXJhdGlvbig1MDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNNaWdyYXRpb25TdGF0dXNGYWlsZWQoc3RhdHVzOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gKHN0YXR1cyB8fCAnJykudG9VcHBlckNhc2UoKTtcclxuICAgIHJldHVybiBub3JtYWxpemVkID09PSAnRkFJTEVEJyB8fCBub3JtYWxpemVkID09PSAnRVJST1InO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5mb3JtO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGlXZWJleFNlcnZpY2U6IEFwaVdlYmV4U2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyB1c2Vyc1NlYXJjaFNlcnZpY2U6IFVzZXJzU2VhcmNoU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5zZXREZWZhdWx0VmFsdWVzKCk7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5jdXN0b21lcklkID0gdGhpcy5jdXN0b21lcklkO1xyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2Uuc2l0ZUlkID0gdGhpcy5zaXRlSWQ7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy5hcGlXZWJleFNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuaG9zdCArICcvZGNwJztcclxuICAgIHRoaXMuYXBpV2ViZXhTZXJ2aWNlLmFwaVVybCA9IHRoaXMuaG9zdCArICcvd2ViZXgnO1xyXG5cclxuICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLmdldFVzZXJzVXBncmFkZVN0YXR1cyh0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5jdXN0b21lcklkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKTtcclxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLmZvdW5kVXNlcnMkXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgKHVzZXJzOiBMaXN0VXNlcltdKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnVzZXJzVXBncmFkZVN0YXR1cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxpemVEYXRhU291cmNlKHVzZXJzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1VwZ3JhZGVVc2Vyc1N0YXR1cyh1c2Vycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ3VzZXJzIGxpc3QgcGFyaXMgNzc3MycpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS51c2Vyc1VwZ3JhZGVTdGF0dXMgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWJzY3JpcHRpb24pID0+IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcGFnZU51bWJlckNoYW5nZUV2ZW50KHBlclBhZ2VOdW1iZXI6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2UucGFnZVNpemUgPSBwZXJQYWdlTnVtYmVyO1xyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2UucGFnZUluZGV4ID0gMDtcclxuICAgIHRoaXMucnVuU2VhcmNoKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZU1vdmVVc2VyV2l6YXJkKGFmdGVyVXNlck1vdmU/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLm1vdmVVc2VyID0gbnVsbDtcclxuICAgIHRoaXMubW92ZVVzZXJJbmRleCA9IG51bGw7XHJcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMT0NBTF9TVE9SQUdFLlVTRVJfSU5fTUlHUkFUSU9OKTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0UuTUlHUkFUSU9OX0ZPUk1fSUQpO1xyXG4gICAgdGhpcy5zaG93TW92ZVVzZXJXaXphcmQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3dpdGNoVG9XaXphcmQuZW1pdChmYWxzZSk7XHJcbiAgICBpZiAoYWZ0ZXJVc2VyTW92ZSkge1xyXG4gICAgICB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhZ2VFdmVudChldmVudDogUGFnZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2UucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICB9XHJcblxyXG4gIG9uVXNlckNsaWNrKHVzZXI6IExpc3RVc2VyKTogdm9pZCB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaXNXZWJleCcsIFN0cmluZyghIXVzZXIud2ViZXhVVUlEKSk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd2ViZXhVVUlEJywgJ251bGwnKTtcclxuICAgIGlmICh1c2VyLndlYmV4VVVJRCkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnd2ViZXhVVUlEJywgU3RyaW5nKHVzZXIud2ViZXhVVUlEKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wZW5Vc2VyLmVtaXQodXNlcik7XHJcbiAgfVxyXG5cclxuICBtb3ZlVXNlclRvTVQodXNlcjogTGlzdFVzZXIpOiB2b2lkIHtcclxuICAgIGlmICh1c2VyICYmIHVzZXIuc2l0ZUlkICYmIHVzZXIudXNlcmlkKSB7XHJcbiAgICAgIHRoaXMubW92ZVVzZXJQZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9IHVzZXIudXNlcmlkO1xyXG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLmdldFVzZXJJbmRleEJ5SWQodXNlci51c2VyaWQpO1xyXG4gICAgICBpZiAoY3VycmVudEluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihjdXJyZW50SW5kZXgsICdJbiBQcm9ncmVzcycpO1xyXG4gICAgICB9XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExPQ0FMX1NUT1JBR0UuVVNFUl9JTl9NSUdSQVRJT04sIHVzZXIudXNlcmlkKTtcclxuXHJcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgICAubW92ZVVzZXJUb01UKHRoaXMuY3VzdG9tZXJJZCwgdXNlcilcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKGZvcm1JZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVVzZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VySW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUlkKSB7XHJcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTE9DQUxfU1RPUkFHRS5NSUdSQVRJT05fRk9STV9JRCwgU3RyaW5nKGZvcm1JZCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXNCeVVzZXJJZChmb3JtSWQsIHVzZXIudXNlcmlkLCAoKSA9PiB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRNaWdyYXRlZFVzZXJzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIodGhpcy5nZXRVc2VySW5kZXhCeUlkKHVzZXIudXNlcmlkKSwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hVc2Vyc0FmdGVyT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3ZlVXNlclRvREkodXNlcjogTGlzdFVzZXIsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICh1c2VyICYmIHVzZXIuc2l0ZUlkICYmIHVzZXIud2ViZXhVVUlEKSB7XHJcbiAgICAgIHRoaXMubW92ZVVzZXJQZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9IHVzZXIudXNlcmlkO1xyXG4gICAgICB0aGlzLnVzZXJzW2luZGV4XS5zdGF0dXMgPSAnSW4gUHJvZ3Jlc3MnO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFLlVTRVJfSU5fTUlHUkFUSU9OLCB1c2VyLnVzZXJpZCk7XHJcblxyXG4gICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlXHJcbiAgICAgICAgLm1vdmVVc2VyVG9ESSh0aGlzLmN1c3RvbWVySWQsIHVzZXIpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0FjdGl2ZScpO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJzW2luZGV4XS53ZWJleFVVSUQgPSAnJztcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLm1pZ3JhdGVkVXNlcnMgJiZcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5taWdyYXRlZFVzZXJzLmxlbmd0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5taWdyYXRlZFVzZXJzID1cclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLm1pZ3JhdGVkVXNlcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAobWlncmF0ZWRVc2VyOiBhbnkpID0+IG1pZ3JhdGVkVXNlci51c2VyaWQgIT09IHVzZXIuZW1haWwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TWlncmF0ZWRVc2VycygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hVc2Vyc0FmdGVyT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVVc2VySW5NaWdyYXRpb25Qcm9ncmVzcygpOiB2b2lkIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0UuVVNFUl9JTl9NSUdSQVRJT04pO1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfU1RPUkFHRS5NSUdSQVRJT05fRk9STV9JRCk7XHJcbiAgICB0aGlzLm1vdmVJblByb2dyZXNzVXNlcklkID0gJyc7XHJcbiAgICB0aGlzLm1vdmVVc2VyUGVuZGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTdGF0dXNUb1VzZXIoaW5kZXg6IG51bWJlciwgc3RhdHVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnVzZXJzICYmIHRoaXMudXNlcnNbaW5kZXhdKSB7XHJcbiAgICAgIHRoaXMudXNlcnNbaW5kZXhdLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgLy8gaWYgKHN0YXR1cyA9PT0gJ01pZ3JhdGVkJykge1xyXG4gICAgICAvLyAgIHRoaXMudXNlcnNbaW5kZXhdLnJvbGVOYW1lID0gJyc7XHJcbiAgICAgIC8vICAgdGhpcy51c2Vyc1tpbmRleF0uaXNNaWdyYXRlZCA9IHRydWU7XHJcbiAgICAgIC8vICAgdGhpcy51c2Vyc1tpbmRleF0uc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAvLyAgIHRoaXMudXNlcnNbaW5kZXhdLnJvbGVOYW1lID0gJ0RlZGljYXRlZCBJbnN0YW5jZSBDYWxsaW5nIHVzZXInO1xyXG4gICAgICAvLyAgIHRoaXMudXNlcnNbaW5kZXhdLmlzTWlncmF0ZWQgPSBmYWxzZTtcclxuICAgICAgLy8gICB0aGlzLnVzZXJzW2luZGV4XS5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy51c2Vycyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVEYXRhU291cmNlKHVzZXJzOiBMaXN0VXNlcltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBzYWZlVXNlcnMgPSBBcnJheS5pc0FycmF5KHVzZXJzKSA/IHVzZXJzIDogW107XHJcbiAgICAvLyB0aGlzLnNldFJhbmRvbVVzZXJSb2xlKHVzZXJzKTtcclxuICAgIHRoaXMuYmFzZVVzZXJzID0gc2FmZVVzZXJzO1xyXG4gICAgdGhpcy51c2VycyA9IHNhZmVVc2VycztcclxuICAgIC8vIHNldCB0b3RhbCByb3dzIGNvdW50IGZvciB0b29sYmFyL3BhZ2luYXRpb24gZnJvbSBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uIHdoZW4gYXZhaWxhYmxlXHJcbiAgICB0aGlzLnRvdGFsVXNlcnNDb3VudCA9IHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlPy50b3RhbCB8fCBzYWZlVXNlcnMubGVuZ3RoO1xyXG4gICAgdGhpcy5zZXRVc2VyTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnNldE1pZ3JhdGVkUHJvcFRvVXNlcnModGhpcy51c2Vycyk7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5zZXRVcGdyYWRlU3RhdHVzVG9Vc2Vycyh0aGlzLnVzZXJzLCB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS51c2Vyc1VwZ3JhZGVTdGF0dXMpO1xyXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnVzZXJzKTtcclxuICAgIHRoaXMuYXBwbHlBY3RpdmVGaWx0ZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXNlclJvbGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2Vycz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudXNlcnMuZm9yRWFjaCgodXNlcikgPT4ge1xyXG4gICAgICAgIGlmICghdXNlci5pc01pZ3JhdGVkKSB7XHJcbiAgICAgICAgICB1c2VyLnJvbGVOYW1lID0gJ0RlZGljYXRlZCBJbnN0YW5jZSBDYWxsaW5nIHVzZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFJhbmRvbVVzZXJSb2xlKHVzZXJzOiBMaXN0VXNlcltdKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXggPSBNYXRoLnJvdW5kKFxyXG4gICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5wYWdlU2l6ZSAtIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplIC8gNCxcclxuICAgICk7XHJcbiAgICBjb25zdCBtaW4gPSBNYXRoLnJvdW5kKHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplIC8gMik7XHJcbiAgICBjb25zdCByYW5kb21BbW91bnQgPSBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbik7XHJcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy5nZXRBcnJheU9mUmFuZG9tVXNlckluZGV4ZXMocmFuZG9tQW1vdW50KTtcclxuICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcclxuICAgICAgaWYgKHVzZXJzW2luZGV4XSkge1xyXG4gICAgICAgIHVzZXJzW2luZGV4XS5yb2xlTmFtZSA9ICdEZWRpY2F0ZWQgSW5zdGFuY2UgQ2FsbGluZyB1c2VyJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFycmF5T2ZSYW5kb21Vc2VySW5kZXhlcyhyYW5kb21BbW91bnQ6IG51bWJlcik6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSBbXTtcclxuICAgIHdoaWxlIChyYW5kb21BbW91bnQgPiAwKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5yb3VuZChcclxuICAgICAgICBNYXRoLnJhbmRvbSgpICogKHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnBhZ2VTaXplIC0gMSksXHJcbiAgICAgICk7XHJcbiAgICAgIGluZGV4ZXMucHVzaChpbmRleCk7XHJcbiAgICAgIHJhbmRvbUFtb3VudC0tO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGluZGV4ZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJ1blNlYXJjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2UucXVpY2tSZWd1bGFyVXNlcnNTZWFyY2goKS5zdWJzY3JpYmUoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKCdUaGUgZGF0YSBjYW4gbm90IGJlIHJlY2VpdmVkJyk7XHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRVc2VyTWlncmF0aW9uUHJvZ3Jlc3MoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VySWRJbk1pZ3JhdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICBMT0NBTF9TVE9SQUdFLlVTRVJfSU5fTUlHUkFUSU9OLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IG1pZ3JhdGlvbkZvcm1JZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxyXG4gICAgICBMT0NBTF9TVE9SQUdFLk1JR1JBVElPTl9GT1JNX0lELFxyXG4gICAgKTtcclxuICAgIGlmICh1c2VySWRJbk1pZ3JhdGlvbikge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlcnMuZmluZEluZGV4KFxyXG4gICAgICAgICh1c2VyKSA9PiB1c2VyLnVzZXJpZCA9PT0gdXNlcklkSW5NaWdyYXRpb24sXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMubW92ZUluUHJvZ3Jlc3NVc2VySWQgPSBpbmRleCA+IC0xID8gdGhpcy51c2Vyc1tpbmRleF0udXNlcmlkIDogJyc7XHJcbiAgICAgIHRoaXMubW92ZVVzZXJQZW5kaW5nID0gaW5kZXggPiAtMTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ0luIFByb2dyZXNzJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG1pZ3JhdGlvbkZvcm1JZCkge1xyXG4gICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXMoTnVtYmVyKG1pZ3JhdGlvbkZvcm1JZCksIGluZGV4LCAoKSA9PiB0aGlzLmdldE1pZ3JhdGVkVXNlcnMoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWlncmF0ZWRVc2VycygpOiB2b2lkIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0ge1xyXG4gICAgICBjdXN0b21lcmlkOiB0aGlzLmN1c3RvbWVySWQsXHJcbiAgICAgIHNpdGVpZDogdGhpcy5zaXRlSWQsXHJcbiAgICAgICdjbG91ZC1vbmx5JzogJ3RydWUnLFxyXG4gICAgfTtcclxuICAgIC8vIHRoaXMudXNlcnNTZWFyY2hTZXJ2aWNlLnF1aWNrV2ViZXhVc2Vyc1NlYXJjaChzZWFyY2hQYXJhbXMsIHRydWUsIE1BWF9JTlRFR0VSKVxyXG4gICAgdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2VcclxuICAgICAgLmdldE1pZ3JhdGVkVXNlcnModGhpcy5jdXN0b21lcklkKVxyXG4gICAgICAvLyB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5nZXRNaWdyYXRlZFdlYmV4VXNlcnModGhpcy5jdXN0b21lcklkKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHVzZXJJZEluTWlncmF0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXHJcbiAgICAgICAgICAgIExPQ0FMX1NUT1JBR0UuVVNFUl9JTl9NSUdSQVRJT04sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB1c2VySWRJbk1pZ3JhdGlvbiAmJlxyXG4gICAgICAgICAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5taWdyYXRlZFVzZXJzLmZpbHRlcihcclxuICAgICAgICAgICAgICAobWlncmF0ZWRVc2VyOiBhbnkpID0+IG1pZ3JhdGVkVXNlci51c2VyaWQgPT09IHVzZXJJZEluTWlncmF0aW9uLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfU1RPUkFHRS5VU0VSX0lOX01JR1JBVElPTik7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX1NUT1JBR0UuTUlHUkFUSU9OX0ZPUk1fSUQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5ydW5TZWFyY2goKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcignVGhlIGRhdGEgY2FuIG5vdCBiZSByZWNlaXZlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBvbk1vdmVVc2VyKHVzZXI6IExpc3RVc2VyLCBpbmRleDogbnVtYmVyLCB0eXBlOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVXNlckxpc3RDb25maXJtRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0aXRsZTogYFVwZ3JhZGUgdXNlciAke3VzZXIudXNlcmlkfSB0byBNdWx0aSBUZW5hbnQ/YCxcclxuICAgICAgICBtZXNzYWdlOiBgPHA+VXBncmFkaW5nIHRoaXMgdXNlciB3aWxsIHByZXBhcmUgdGhlIGFjY291bnQgZm9yIG1pZ3JhdGlvbiB0byBNdWx0aSBUZW5hbnQuPC9wPlxyXG4gICAgICAgICAgPHA+RHVyaW5nIHRoaXMgcHJvY2VzcywgdGhlIHVzZXIgY29uZmlndXJhdGlvbiB3aWxsIGJlIGNvcGllZCB0byB0aGUgTXVsdGkgVGVuYW50IGVudmlyb25tZW50LlxyXG4gICAgICAgICAgVGhlIHVzZXIgd2lsbCByZW1haW4gYWN0aXZlIG9uIHRoZSBjdXJyZW50IHN5c3RlbSB1bnRpbCB0aGUgQWN0aXZhdGUgc3RlcCBpcyBjb21wbGV0ZWQuPC9wPlxyXG4gICAgICAgICAgPHA+RG8geW91IHdhbnQgdG8gY29udGludWU/PC9wPmAsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdZZXMsIHVwZ3JhZGUnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICBjYXNlICdRdWlja01vdmUnOlxyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VyVG9NVCh1c2VyKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICdNVCc6XHJcbiAgICAgICAgICAgIHRoaXMubW92ZVVzZXIgPSB1c2VyO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VySW5kZXggPSBpbmRleDtcclxuICAgICAgICAgICAgdGhpcy5zaG93TW92ZVVzZXJXaXphcmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnN3aXRjaFRvV2l6YXJkLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnREknOlxyXG4gICAgICAgICAgICB0aGlzLm1vdmVVc2VyVG9ESSh1c2VyLCBpbmRleCk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBydW5Nb3ZlVXNlclRvTVQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5tb3ZlVXNlciAmJiB0aGlzLm1vdmVVc2VyLnNpdGVJZCAmJiB0aGlzLm1vdmVVc2VyLnVzZXJpZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLm1vdmVVc2VyUGVuZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMubW92ZUluUHJvZ3Jlc3NVc2VySWQgPSB0aGlzLm1vdmVVc2VyLnVzZXJpZDtcclxuICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIodGhpcy5tb3ZlVXNlckluZGV4LCAnSW4gUHJvZ3Jlc3MnKTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgTE9DQUxfU1RPUkFHRS5VU0VSX0lOX01JR1JBVElPTixcclxuICAgICAgICB0aGlzLm1vdmVVc2VyLnVzZXJpZCxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlXHJcbiAgICAgIC5tb3ZlVXNlclRvTVQodGhpcy5jdXN0b21lcklkLCB0aGlzLm1vdmVVc2VyKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChmb3JtSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKGZvcm1JZCkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9TVE9SQUdFLk1JR1JBVElPTl9GT1JNX0lELCBTdHJpbmcoZm9ybUlkKSk7XHJcbiAgICAgICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXMoZm9ybUlkLCB0aGlzLm1vdmVVc2VySW5kZXgsICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJNb3ZlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJNb3ZlZCQubmV4dCh0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzVG9Vc2VyKHRoaXMubW92ZVVzZXJJbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVXNlcnNBZnRlck9wZXJhdGlvbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaFVzZXJzKHRva2VuOiBzdHJpbmcsIHR5cGU/OiBVU0VSX1RZUEVTX1RZUEUpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUb2tlbiA9ICh0b2tlbiB8fCAnJykudHJpbSgpO1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB0eXBlIHx8IG51bGw7XHJcblxyXG4gICAgLy8gaWYgdG9rZW4gaXMgZW1wdHkg4oCUIHJlc3RvcmUgY3VycmVudCBwYWdlIGRhdGFzb3VyY2VcclxuICAgIGlmICghbm9ybWFsaXplZFRva2VuICYmICFub3JtYWxpemVkVHlwZSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZVNlYXJjaFRva2VuID0gJyc7XHJcbiAgICAgIHRoaXMuYWN0aXZlVXNlclR5cGUgPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy5iYXNlVXNlcnM7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy51c2Vycyk7XHJcbiAgICAgIHRoaXMudG90YWxVc2Vyc0NvdW50ID0gdGhpcy51c2Vyc1NlYXJjaFNlcnZpY2U/LnRvdGFsIHx8IHRoaXMudXNlcnMubGVuZ3RoO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG5vcm1hbGl6ZWRUeXBlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVXNlclR5cGUgPSBub3JtYWxpemVkVHlwZTtcclxuICAgICAgdGhpcy5hY3RpdmVTZWFyY2hUb2tlbiA9ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3RpdmVTZWFyY2hUb2tlbiA9IG5vcm1hbGl6ZWRUb2tlbjtcclxuICAgICAgdGhpcy5hY3RpdmVVc2VyVHlwZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmV0Y2ggYWxsIHVzZXJzIChzZXJ2ZXItc2lkZSkgYW5kIGZpbHRlciBsb2NhbGx5IGFjcm9zcyB0aGUgd2hvbGUgZGF0YXNldFxyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5nZXRBbGxSZWd1bGFyVXNlcnMoKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChhbGxVc2VyczogTGlzdFVzZXJbXSkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbHRlcmVkOiBMaXN0VXNlcltdO1xyXG4gICAgICAgICAgaWYgKG5vcm1hbGl6ZWRUeXBlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkID0gdGhpcy5maWx0ZXJCeVRva2VuKGFsbFVzZXJzLCBub3JtYWxpemVkVG9rZW4pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVyZWQgPSB0aGlzLmZpbHRlckJ5VHlwZShhbGxVc2Vycywgbm9ybWFsaXplZFR5cGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy51c2VycyA9IGZpbHRlcmVkO1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLnVzZXJzKTtcclxuICAgICAgICAgIHRoaXMudG90YWxVc2Vyc0NvdW50ID0gZmlsdGVyZWQubGVuZ3RoO1xyXG4gICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKCdUaGUgZGF0YSBjYW4gbm90IGJlIHJlY2VpdmVkJyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCeVR5cGUodXNlclR5cGU6IFVTRVJfVFlQRVNfVFlQRSkge1xyXG4gICAgY29uc3Qgbm9ybWFsaXplZFR5cGUgPSB1c2VyVHlwZSB8fCBudWxsO1xyXG4gICAgaWYgKCFub3JtYWxpemVkVHlwZSkge1xyXG4gICAgICB0aGlzLnNlYXJjaFVzZXJzKCcnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hVc2VycygnJywgbm9ybWFsaXplZFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseUFjdGl2ZUZpbHRlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZVNlYXJjaFRva2VuKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVXNlcnModGhpcy5hY3RpdmVTZWFyY2hUb2tlbik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFjdGl2ZVVzZXJUeXBlKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVXNlcnMoJycsIHRoaXMuYWN0aXZlVXNlclR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DcmVhdGVVc2VyUmVxdWVzdGVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jcmVhdGVVc2VyUmVxdWVzdGVkLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyQnlUb2tlbih1c2VyczogTGlzdFVzZXJbXSwgdG9rZW46IHN0cmluZyk6IExpc3RVc2VyW10ge1xyXG4gICAgY29uc3QgdG9rID0gKHRva2VuIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgY29uc3QgZmlsdGVyZWQgPSAodXNlcnMgfHwgW10pLmZpbHRlcigodXNlcjogTGlzdFVzZXIpID0+IHtcclxuICAgICAgY29uc3QgZmlyc3ROYW1lID0gKHVzZXI/LmZpcnN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgY29uc3QgbGFzdE5hbWUgPSAodXNlcj8ubGFzdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGNvbnN0IGZ1bGxOYW1lID0gYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfWAudHJpbSgpO1xyXG4gICAgICBjb25zdCBlbWFpbCA9ICh1c2VyPy5lbWFpbCB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBmaXJzdE5hbWUuaW5jbHVkZXModG9rKSB8fFxyXG4gICAgICAgIGxhc3ROYW1lLmluY2x1ZGVzKHRvaykgfHxcclxuICAgICAgICBmdWxsTmFtZS5pbmNsdWRlcyh0b2spIHx8XHJcbiAgICAgICAgZW1haWwuaW5jbHVkZXModG9rKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJCeVR5cGUodXNlcnM6IExpc3RVc2VyW10sIHVzZXJUeXBlOiBVU0VSX1RZUEVTX1RZUEUpOiBMaXN0VXNlcltdIHtcclxuICAgIGxldCBmaWx0ZXJlZFVzZXJzOiBMaXN0VXNlcltdO1xyXG4gICAgaWYgKHVzZXJUeXBlID09PSBVU0VSX1RZUEVTX01BUC5DVUNNKSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+ICF1c2VyLndlYmV4VVVJRCAmJiB1c2VyLmN1Y21JZCAhPSBPTl9QUkVNX0lEKTtcclxuICAgIH0gZWxzZSBpZiAodXNlclR5cGUgPT09IFVTRVJfVFlQRVNfTUFQLldFQkVYKSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+IHVzZXIud2ViZXhVVUlEICE9PSBudWxsICYmIHVzZXIud2ViZXhVVUlEICE9PSB1bmRlZmluZWQpO1xyXG4gICAgfSBlbHNlIGlmICh1c2VyVHlwZSA9PT0gVVNFUl9UWVBFU19NQVAuT05QUkVNKSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+ICF1c2VyLndlYmV4VVVJRCAmJiB1c2VyLmN1Y21JZCA9PSBPTl9QUkVNX0lEKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZpbHRlcmVkVXNlcnMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmlsdGVyZWRVc2VycztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc1ZhbGlkV2ViZXhVdWlkKHVzZXI6IExpc3RVc2VyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHVzZXI/LndlYmV4VVVJRDtcclxuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRmlybXdhcmVEZXZpY2VNYXAoXHJcbiAgICBlbnRpdHk6IE1pZ3JhdGVkRW50aXR5TGlrZSB8IG51bGwsXHJcbiAgICB1c2VyOiBMaXN0VXNlcixcclxuICAgIGN1Y21JZEJ5U2l0ZUlkOiBNYXA8bnVtYmVyLCBudW1iZXI+XHJcbiAgKTogRmlybXdhcmVEZXZpY2VNYXAge1xyXG4gICAgY29uc3QgZGV2aWNlTWFwOiBGaXJtd2FyZURldmljZU1hcCA9IHt9O1xyXG4gICAgY29uc3QgbWFwcGVkRGV2aWNlcyA9IHRoaXMuZ2V0QWN0aXZhdGlvbkRldmljZXMoZW50aXR5LCB1c2VyKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhtYXBwZWREZXZpY2VzKVxyXG5cclxuICAgIGNvbnN0IGRldmljZXM6IGFueSA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNpdGVJZCA9IE51bWJlcihlbnRpdHk/LnNvdXJjZVNpdGU/LmlkID8/IHVzZXI/LnNpdGVJZCA/PyAwKTtcclxuICAgIGNvbnN0IGN1Y21JZCA9IGN1Y21JZEJ5U2l0ZUlkLmdldChzaXRlSWQpIHx8IDA7XHJcblxyXG4gICAgbWFwcGVkRGV2aWNlcy5mb3JFYWNoKChyYXdEZXZpY2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBkZXZpY2UgPSByYXdEZXZpY2U7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgY29uc3QgaXNFbGlnaWJsZSA9IGRldmljZS5pc1JlZ2lzdGVyZWQgfHwgZGV2aWNlLmRldmljZVRvVXBncmFkZSB8fCBkZXZpY2UuaXNFbGlnaWJsZTtcclxuXHJcbiAgICAgIGRldmljZXMucHVzaCh7XHJcbiAgICAgICAgdXNlcklkOiB1c2VyLnVzZXJpZCxcclxuICAgICAgICBkZXZpY2VOYW1lOiBkZXZpY2UubmFtZS5pbmNsdWRlcygnU0VQJykgPyBkZXZpY2UubmFtZSA6ICdTRVAnICsgZGV2aWNlLm5hbWUgfHwgJycsXHJcbiAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLnByb2R1Y3QgfHwgZGV2aWNlLm1vZGVsIHx8ICcnLFxyXG4gICAgICAgIHN0YXR1czogaXNFbGlnaWJsZSA/ICdFTElHSUJMRV9UT19VUEdSQURFJyA6ICdVTlJFR0lTVEVSRUQnLFxyXG4gICAgICAgIGVycm9yRGVzY3JpcHRpb246ICcnLFxyXG4gICAgICAgIGN1Y21JZCxcclxuICAgICAgICBmZWF0dXJlOiAnUEVSU09OJyxcclxuICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgIGRpc2FibGVkUmVhc29uOiBmYWxzZSA/ICdGSVJNV0FSRV9VUEdSQURFLkRFVklDRV9OT1RfTUlHUkFURUQnIDogJycsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFPYmplY3Qua2V5cyhkZXZpY2VNYXApLmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKCdGaXJtd2FyZSBhY3RpdmF0aW9uOiBubyB1c2FibGUgZGV2aWNlcyBmb3VuZCB0byBidWlsZCBkZXZpY2VNYXAuJyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGRldmljZXMuZm9yRWFjaCgoZGV2aWNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFkZXZpY2VNYXBbZGV2aWNlLmN1Y21JZF0pIHtcclxuICAgICAgICBkZXZpY2VNYXBbZGV2aWNlLmN1Y21JZF0gPSB7fTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWRldmljZU1hcFtkZXZpY2UuY3VjbUlkXVtkZXZpY2UuZmVhdHVyZV0pIHtcclxuICAgICAgICBkZXZpY2VNYXBbZGV2aWNlLmN1Y21JZF1bZGV2aWNlLmZlYXR1cmVdID0gW107XHJcbiAgICAgIH1cclxuICAgICAgZGV2aWNlTWFwW2RldmljZS5jdWNtSWRdW2RldmljZS5mZWF0dXJlXS5wdXNoKGRldmljZS5kZXZpY2VOYW1lKVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJkZXYgbWFwID09PiBcIiwgZGV2aWNlTWFwKTtcclxuXHJcblxyXG4gICAgcmV0dXJuIGRldmljZU1hcDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hDdWNtSWRCeVNpdGVJZCgpOiBPYnNlcnZhYmxlPE1hcDxudW1iZXIsIG51bWJlcj4+IHtcclxuICAgIGNvbnN0IHNpdGVzVXJsID0gQVBJLlNJVEVTLnJlcGxhY2UoJzpjdXN0b21lcklkJywgU3RyaW5nKHRoaXMuY3VzdG9tZXJJZCkpO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaFBhZ2luYXRpb24oc2l0ZXNVcmwsIDEwMDAwLCAwLCB7fSwgZmFsc2UpLnBpcGUoXHJcbiAgICAgIG1hcCgoc2l0ZXNSZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNpdGVzID0gc2l0ZXNSZXM/LnBhZ2VEYXRhIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1Y21JZEJ5U2l0ZUlkID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcclxuICAgICAgICBzaXRlcy5mb3JFYWNoKChzaXRlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNpdGVJZCA9IE51bWJlcihzaXRlPy5pZCk7XHJcbiAgICAgICAgICBjb25zdCBjdWNtSWQgPSBOdW1iZXIoc2l0ZT8uY3VjbT8uaWQpO1xyXG4gICAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShzaXRlSWQpICYmIE51bWJlci5pc0Zpbml0ZShjdWNtSWQpKSB7XHJcbiAgICAgICAgICAgIGN1Y21JZEJ5U2l0ZUlkLnNldChzaXRlSWQsIGN1Y21JZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGN1Y21JZEJ5U2l0ZUlkO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QWN0aXZhdGlvbkRldmljZXMoZW50aXR5OiBNaWdyYXRlZEVudGl0eUxpa2UgfCBudWxsLCB1c2VyOiBMaXN0VXNlcik6IHVua25vd25bXSB7XHJcbiAgICBjb25zdCBtaWdyYXRlZEVudGl0eURldmljZXM6IHVua25vd25bXSA9IEFycmF5LmlzQXJyYXkoZW50aXR5Py5kZXZpY2VzKVxyXG4gICAgICA/IChlbnRpdHk/LmRldmljZXMgPz8gW10pXHJcbiAgICAgIDogW107XHJcblxyXG4gICAgY29uc3QgZW50aXR5RGV2aWNlczogdW5rbm93bltdID0gQXJyYXkuaXNBcnJheShlbnRpdHk/LndlYmV4TWlncmF0aW9uRGV2aWNlcylcclxuICAgICAgPyAoZW50aXR5Py53ZWJleE1pZ3JhdGlvbkRldmljZXMgPz8gW10pXHJcbiAgICAgIDogW107XHJcblxyXG4gICAgY29uc3QgYWxsRW50aXR5RGV2aWNlcyA9IFsuLi5taWdyYXRlZEVudGl0eURldmljZXMsIC4uLmVudGl0eURldmljZXNdO1xyXG4gICAgaWYgKGFsbEVudGl0eURldmljZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBhbGxFbnRpdHlEZXZpY2VzO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZhbGxiYWNrIGZvciBwYXJ0aWFsIHJlc3BvbnNlcyB3aGVyZSBvbmx5IGxpc3QtdXNlciBkZXZpY2VzIGFyZSBhdmFpbGFibGUuXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAuLi4oQXJyYXkuaXNBcnJheSh1c2VyPy5kZXZpY2VzKSA/IHVzZXIuZGV2aWNlcyA6IFtdKSxcclxuICAgICAgLi4uKEFycmF5LmlzQXJyYXkodXNlcj8uZGV2aWNlUHJvZmlsZXMpID8gdXNlci5kZXZpY2VQcm9maWxlcyA6IFtdKSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVud3JhcE1pZ3JhdGVkRGV2aWNlKHJhd0RldmljZTogdW5rbm93bik6IE1pZ3JhdGVkRGV2aWNlTGlrZSB7XHJcbiAgICBjb25zdCBjYW5kaWRhdGUgPSByYXdEZXZpY2UgYXMgTWlncmF0ZWREZXZpY2VMaWtlO1xyXG4gICAgaWYgKGNhbmRpZGF0ZT8uZGV2aWNlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uY2FuZGlkYXRlLmRldmljZSxcclxuICAgICAgICAuLi5jYW5kaWRhdGUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2FuZGlkYXRlIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc01pZ3JhdGVkRGV2aWNlRWxpZ2libGUoZGV2aWNlOiBNaWdyYXRlZERldmljZUxpa2UpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGhhc0VsaWdpYmlsaXR5U2lnbmFsID0gZGV2aWNlPy5pc1JlZ2lzdGVyZWQgIT09IHVuZGVmaW5lZFxyXG4gICAgICB8fCBkZXZpY2U/LmRldmljZVRvVXBncmFkZSAhPT0gdW5kZWZpbmVkXHJcbiAgICAgIHx8IGRldmljZT8uaXNFbGlnaWJsZSAhPT0gdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICghaGFzRWxpZ2liaWxpdHlTaWduYWwpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICEhKGRldmljZT8uaXNSZWdpc3RlcmVkIHx8IGRldmljZT8uZGV2aWNlVG9VcGdyYWRlIHx8IGRldmljZT8uaXNFbGlnaWJsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RDdWNtSWQoXHJcbiAgICBlbnRpdHk6IE1pZ3JhdGVkRW50aXR5TGlrZSB8IG51bGwsXHJcbiAgICBkZXZpY2U6IE1pZ3JhdGVkRGV2aWNlTGlrZSxcclxuICAgIHVzZXI6IExpc3RVc2VyXHJcbiAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBkZXZpY2VDdWNtSWQgPSBOdW1iZXIoZGV2aWNlPy5jdWNtSWQpO1xyXG4gICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZXZpY2VDdWNtSWQpICYmIGRldmljZUN1Y21JZCA+IDApIHtcclxuICAgICAgcmV0dXJuIGRldmljZUN1Y21JZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1c2VyQ3VjbUlkID0gTnVtYmVyKHVzZXI/LmN1Y21JZCk7XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKHVzZXJDdWNtSWQpKSB7XHJcbiAgICAgIHJldHVybiB1c2VyQ3VjbUlkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eUN1Y21JZCA9IE51bWJlcihlbnRpdHk/LmN1Y21JZCk7XHJcbiAgICBpZiAoTnVtYmVyLmlzRmluaXRlKGVudGl0eUN1Y21JZCkpIHtcclxuICAgICAgcmV0dXJuIGVudGl0eUN1Y21JZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzb2x2ZU1pZ3JhdGVkRGV2aWNlS2V5KGRldmljZTogTWlncmF0ZWREZXZpY2VMaWtlKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBTdHJpbmcoXHJcbiAgICAgIGRldmljZT8ubmFtZSB8fFxyXG4gICAgICBkZXZpY2U/Lm1hYyB8fFxyXG4gICAgICBkZXZpY2U/LmRldmljZUlkIHx8XHJcbiAgICAgIGRldmljZT8uY2lzVXVpZCB8fFxyXG4gICAgICBkZXZpY2U/LmlkIHx8XHJcbiAgICAgICcnXHJcbiAgICApLnRyaW0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXh0cmFjdE1pZ3JhdGVkRGV2aWNlTGluZXMoZGV2aWNlOiBNaWdyYXRlZERldmljZUxpa2UpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuXHJcbiAgICBjb25zdCBsaW5lQXNzb2NpYXRpb25zID0gQXJyYXkuaXNBcnJheShkZXZpY2U/LmxpbmVBc3NvY2lhdGlvbnMpID8gZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgOiBbXTtcclxuICAgIGxpbmVBc3NvY2lhdGlvbnMuZm9yRWFjaCgobGluZUFzc29jaWF0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpcmVjdG9yeU51bWJlciA9IGxpbmVBc3NvY2lhdGlvbj8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZUFzc29jaWF0aW9uPy5kaXJlY3RvcnlOdW1iZXI/LnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgICBjb25zdCBlMTY0TWFzayA9IGxpbmVBc3NvY2lhdGlvbj8uZTE2NE1hc2s7XHJcblxyXG4gICAgICBbZGlyZWN0b3J5TnVtYmVyLCB0ZW1wbGF0ZURpcmVjdG9yeU51bWJlciwgZTE2NE1hc2tdLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIGlmIChub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICB2YWx1ZXMuYWRkKG5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBsaW5lcyA9IEFycmF5LmlzQXJyYXkoZGV2aWNlPy5saW5lcykgPyBkZXZpY2UubGluZXMgOiBbXTtcclxuICAgIGxpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcclxuICAgICAgY29uc3QgZGlyZWN0b3J5TnVtYmVyID0gbGluZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZT8uZGlyZWN0b3J5TnVtYmVyPy50ZW1wbGF0ZURpcmVjdG9yeU51bWJlcjtcclxuICAgICAgW2RpcmVjdG9yeU51bWJlciwgdGVtcGxhdGVEaXJlY3RvcnlOdW1iZXJdLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIGlmIChub3JtYWxpemVkKSB7XHJcbiAgICAgICAgICB2YWx1ZXMuYWRkKG5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgb25GaXJtd2FyZVVwZ3JhZGVDbGlja2VkKHVzZXI6IExpc3RVc2VyKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNWYWxpZFdlYmV4VXVpZCh1c2VyKSB8fCB1c2VyLnN0YXR1cyAhPT0gJ0luYWN0aXZlJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFVzZXJMaXN0Q29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdGl0bGU6IGBBY3RpdmF0ZSB1c2VyICR7dXNlci51c2VyaWR9IG9uIE11bHRpIFRlbmFudD9gLFxyXG4gICAgICAgIG1lc3NhZ2U6IGA8cD5BY3RpdmF0aW5nIHRoaXMgdXNlciB3aWxsIHBlcmZvcm0gdGhlIGN1dG92ZXIgdG8gTXVsdGkgVGVuYW50IGFuZCBjb21wbGV0ZSB0aGUgbWlncmF0aW9uIHByb2Nlc3MuPC9wPlxyXG4gICAgICAgICAgPHA+QWZ0ZXIgYWN0aXZhdGlvbiwgdGhlIHVzZXIgd2lsbCBiZWNvbWUgYWN0aXZlIG9uIE11bHRpIFRlbmFudCBhbmQgdGhlIG9yaWdpbmFsIHVzZXIgd2lsbCBiZWNvbWUgaW5hY3RpdmUuPC9wPlxyXG4gICAgICAgICAgPHA+RG8geW91IHdhbnQgdG8gY29udGludWU/PC9wPmAsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdBY3RpdmF0ZScsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYmVmb3JlQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZXRVc2VyUGVuZGluZ1N0YXR1cyh1c2VyLCAnUGVuZGluZyBBY3RpdmF0aW9uJyk7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAgICAgLmdldE1pZ3JhdGVkTWlncmF0aW9uRm9ybUVudGl0aWVzKHRoaXMuY3VzdG9tZXJJZCwgdXNlci53ZWJleFVVSUQgfHwgJycsICdQRVJTT04nKVxyXG4gICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgbWFwKChlbnRpdGllczogYW55W10pID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShlbnRpdGllcykgPyBlbnRpdGllc1swXSA6IGVudGl0aWVzIHx8IG51bGw7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGVudGl0eTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZm9ybUlkID0gZW50aXR5Py5taWdyYXRpb25Gb3JtSWQgPz8gZW50aXR5Py5pZCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgIGlmICghZm9ybUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdJbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmVycm9yKCdBY3RpdmF0aW9uIGZhaWxlZC4gTWlncmF0aW9uIGZvcm0gbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hDdWNtSWRCeVNpdGVJZCgpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoKGN1Y21JZEJ5U2l0ZUlkKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICBmb3JtSWQsXHJcbiAgICAgICAgICAgICAgICAgIGRldmljZU1hcDogdGhpcy5idWlsZEZpcm13YXJlRGV2aWNlTWFwKFxyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eSBhcyBNaWdyYXRlZEVudGl0eUxpa2UsXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcixcclxuICAgICAgICAgICAgICAgICAgICBjdWNtSWRCeVNpdGVJZFxyXG4gICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKCh7IGZvcm1JZCwgZGV2aWNlTWFwIH0pID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGV2aWNlIG1hcCA9PT4gJywgZGV2aWNlTWFwKTtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnRyaWdnZXJGaXJtd2FyZVVwZ3JhZGUodGhpcy5jdXN0b21lcklkLCBOdW1iZXIoZm9ybUlkKSwgZGV2aWNlTWFwKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUobWFwKCgpID0+IGZvcm1JZCkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChmb3JtSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXNCeVVzZXJJZChmb3JtSWQsIHVzZXIudXNlcmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdBY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxVc2VyU3RhdHVzKHVzZXIuZW1haWwsICdJbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3MoYCR7dXNlci51c2VyaWR9IHN1Y2Nlc3NmdWxseSBhY3RpdmF0ZWRgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFVzZXJzQWZ0ZXJPcGVyYXRpb24oKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFVzZXJQZW5kaW5nU3RhdHVzKHVzZXIsICdJbmFjdGl2ZScpO1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5lcnJvcignQWN0aXZhdGlvbiBmYWlsZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoVXNlcnNBZnRlck9wZXJhdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJldmVydENsaWNrZWQodXNlcjogTGlzdFVzZXIpIHtcclxuICAgIGlmICh1c2VyPy53ZWJleFVVSUQpIHtcclxuICAgICAgdGhpcy5zZXRVc2VyUGVuZGluZ1N0YXR1cyh1c2VyLCAnUGVuZGluZyBEZWFjdGl2YXRpb24nKTtcclxuICAgICAgdGhpcy51c2VyU2VydmljZS5yZXZlcnRNaWdyYXRpb24odGhpcy5jdXN0b21lcklkLCB1c2VyLndlYmV4VVVJRClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aW1lcigyMDAwKSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlclBlbmRpbmdTdGF0dXModXNlciwgJ0luYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0T3JpZ2luYWxVc2VyU3RhdHVzKHVzZXIuZW1haWwsICdBY3RpdmUnKTtcclxuICAgICAgICAgICAgLy8gdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3MoYCR7dXNlci51c2VyaWR9IHN1Y2Nlc3NmdWxseSBkZWFjdGl2YXRlZGApO1xyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hVc2Vyc0FmdGVyT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVc2VyUGVuZGluZ1N0YXR1cyh1c2VyLCAnQWN0aXZlJyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFVzZXJzQWZ0ZXJPcGVyYXRpb24oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VXNlclBlbmRpbmdTdGF0dXModXNlcjogTGlzdFVzZXIsIHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICB1c2VyLnN0YXR1cyA9IHN0YXR1cztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXMoXHJcbiAgICBmb3JtSWQ6IG51bWJlcixcclxuICAgIGluZGV4OiBudW1iZXIsXHJcbiAgICBvbkNvbXBsZXRlZDogKCkgPT4gdm9pZCxcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRpbWVyKDAsIDUwMDApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmdldE1pZ3JhdGlvbkZvcm1TdGF0dXModGhpcy5jdXN0b21lcklkLCBmb3JtSWQpKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgdGFrZVdoaWxlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZT8uc3RhdHVzO1xyXG4gICAgICAgICAgcmV0dXJuICF0aGlzLmlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkKHN0YXR1cylcclxuICAgICAgICAgICAgJiYgIXRoaXMuaXNNaWdyYXRpb25TdGF0dXNGYWlsZWQoc3RhdHVzKVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZFdpdGhFcnJvcnMoc3RhdHVzKTtcclxuICAgICAgICB9LCB0cnVlKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2U/LnN0YXR1cztcclxuICAgICAgICAgIGNvbnN0IHVzZXJJZCA9IHRoaXMudXNlcnM/LltpbmRleF0/LnVzZXJpZCB8fCAnJztcclxuICAgICAgICAgIGlmICh0aGlzLmlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkV2l0aEVycm9ycyhzdGF0dXMpICYmIHVzZXJJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbXBsZXRlZFdpdGhFcnJvcnNCeVVzZXJJZCh1c2VySWQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5pc01pZ3JhdGlvblN0YXR1c0ZhaWxlZChzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdNaWdyYXRpb24gRXJyb3InKTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVXNlcnNBZnRlck9wZXJhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZChzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdBY3RpdmUnKTtcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVXNlcnNBZnRlck9wZXJhdGlvbigpO1xyXG4gICAgICAgICAgICBvbkNvbXBsZXRlZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdHVzVG9Vc2VyKGluZGV4LCAnTWlncmF0aW9uIEVycm9yJyk7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hVc2Vyc0FmdGVyT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9sbE1pZ3JhdGlvbkZvcm1TdGF0dXNCeVVzZXJJZChcclxuICAgIGZvcm1JZDogbnVtYmVyLFxyXG4gICAgdXNlcklkOiBzdHJpbmcsXHJcbiAgICBvbkNvbXBsZXRlZDogKCkgPT4gdm9pZCxcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRpbWVyKDAsIDUwMDApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLmdldE1pZ3JhdGlvbkZvcm1TdGF0dXModGhpcy5jdXN0b21lcklkLCBmb3JtSWQpKSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXHJcbiAgICAgICAgdGFrZVdoaWxlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSByZXNwb25zZT8uc3RhdHVzO1xyXG4gICAgICAgICAgcmV0dXJuICF0aGlzLmlzTWlncmF0aW9uU3RhdHVzQ29tcGxldGVkKHN0YXR1cylcclxuICAgICAgICAgICAgJiYgIXRoaXMuaXNNaWdyYXRpb25TdGF0dXNGYWlsZWQoc3RhdHVzKVxyXG4gICAgICAgICAgICAmJiAhdGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZFdpdGhFcnJvcnMoc3RhdHVzKTtcclxuICAgICAgICB9LCB0cnVlKSxcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gcmVzcG9uc2U/LnN0YXR1cztcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRVc2VySW5kZXhCeUlkKHVzZXJJZCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5pc01pZ3JhdGlvblN0YXR1c0NvbXBsZXRlZFdpdGhFcnJvcnMoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNvbXBsZXRlZFdpdGhFcnJvcnNCeVVzZXJJZCh1c2VySWQpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5pc01pZ3JhdGlvblN0YXR1c0ZhaWxlZChzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXR1c1RvVXNlcihpbmRleCwgJ01pZ3JhdGlvbiBFcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFVzZXJzQWZ0ZXJPcGVyYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNNaWdyYXRpb25TdGF0dXNDb21wbGV0ZWQoc3RhdHVzKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVVzZXJJbk1pZ3JhdGlvblByb2dyZXNzKCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0dXNUb1VzZXIoaW5kZXgsICdBY3RpdmUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hVc2Vyc0FmdGVyT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgICAgIG9uQ29tcGxldGVkKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldFVzZXJJbmRleEJ5SWQodXNlcklkKTtcclxuICAgICAgICAgIHRoaXMucmVtb3ZlVXNlckluTWlncmF0aW9uUHJvZ3Jlc3MoKTtcclxuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdHVzVG9Vc2VyKGluZGV4LCAnTWlncmF0aW9uIEVycm9yJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hVc2Vyc0FmdGVyT3BlcmF0aW9uKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VXNlckluZGV4QnlJZCh1c2VySWQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy51c2Vycz8uZmluZEluZGV4KCh1c2VyKSA9PiB1c2VyLnVzZXJpZCA9PT0gdXNlcklkKSA/PyAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0T3JpZ2luYWxVc2VyU3RhdHVzKGVtYWlsID0gJycsIHN0YXR1czogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBvcmlnaW5hbFVzZXIgPSB0aGlzLnVzZXJzLmZpbmQoKHVzZXIpID0+IHVzZXIuZW1haWwgPT09IGVtYWlsICYmICF1c2VyLndlYmV4VVVJRCk7XHJcbiAgICBpZiAob3JpZ2luYWxVc2VyKSB7XHJcbiAgICAgIG9yaWdpbmFsVXNlci5zdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvVXBncmFkZVVzZXJzU3RhdHVzKHVzZXJzOiBMaXN0VXNlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnVzZXJzU2VhcmNoU2VydmljZS5xdWlja1VwZ3JhZGVTdGF0dXNVc2VycyRcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVEYXRhU291cmNlKHVzZXJzKVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1sb2FkZXIgKm5nSWY9XCJkYXRhUGVuZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuPGRpdiAqbmdJZj1cIiFzaG93TW92ZVVzZXJXaXphcmRcIiBpZD1cInVzZXJzLWxpc3RcIj5cclxuICA8dGstdXNlcnMtdGFibGUtdG9vbGJhclxyXG4gICAgW3RvdGFsVXNlcnNDb3VudF09XCJ0b3RhbFVzZXJzQ291bnRcIlxyXG4gICAgW3NlYXJjaFZhbHVlXT1cImFjdGl2ZVNlYXJjaFRva2VuXCJcclxuICAgIFtzZWxlY3RlZFVzZXJUeXBlXT1cImFjdGl2ZVVzZXJUeXBlXCJcclxuICAgIChzZWFyY2hDaGFuZ2UpPVwic2VhcmNoVXNlcnMoJGV2ZW50KVwiXHJcbiAgICAoc2VhcmNoQnlUeXBlKT1cInNlYXJjaEJ5VHlwZSgkZXZlbnQpXCJcclxuICAgIChhZGRVc2VyKT1cIm9uQ3JlYXRlVXNlclJlcXVlc3RlZCgpXCJcclxuICA+PC90ay11c2Vycy10YWJsZS10b29sYmFyPlxyXG4gIDx0YWJsZVxyXG4gICAgY2xhc3M9XCJ3ZWJleC10YWJsZVwiXHJcbiAgICBtYXQtdGFibGVcclxuICAgICpuZ0lmPVwidXNlcnM/Lmxlbmd0aFwiXHJcbiAgICAjdGFibGVcclxuICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gID5cclxuICAgIDwhLS0gPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJ1c2VyLWljb25cIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz1cIndlYmV4LXRhYmxlLXRoXCI+PC90aD5cclxuICAgICAgPHRkIGNsYXNzPVwidXNlci1zaXRlXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGVkLXVzZXItcm93JzogbW92ZVVzZXJQZW5kaW5nICYmIG1vdmVJblByb2dyZXNzVXNlcklkICYmIG1vdmVJblByb2dyZXNzVXNlcklkID09PSB1c2VyPy51c2VyaWR9XCJcclxuICAgICAgICAgIChjbGljayk9XCJvblVzZXJDbGljayh1c2VyKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi13ZWJleC1ib3hcIj48c3BhbiBjbGFzcz1cImljb24td2ViZXggaWNvbi13ZWJleC11c2VyXCI+PC9zcGFuPjwvc3Bhbj5cclxuICAgICAgPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPiAtLT5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIm5hbWVcIj5cclxuICAgICAgPHRoXHJcbiAgICAgICAgbWF0LWhlYWRlci1jZWxsXHJcbiAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcclxuICAgICAgICBjbGFzcz1cIndlYmV4LXRhYmxlLXRoXCJcclxuICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogNjBweFwiXHJcbiAgICAgID5cclxuICAgICAgICBEaXNwbGF5IG5hbWVcclxuICAgICAgPC90aD5cclxuICAgICAgPHRkXHJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLXNpdGVcIlxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXNlckNsaWNrKHVzZXIpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXNwbGF5LW5hbWUtd3JhcHBlclwiPlxyXG4gICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJ1c2VyLW5hbWUtdGV4dFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2luYWN0aXZlLXVzZXItcm93JzogdXNlci5zdGF0dXMgIT09ICdBY3RpdmUnIH1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyB1c2VyLmZpcnN0TmFtZSB9fSB7eyB1c2VyLmxhc3ROYW1lIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24td2ViZXgtYm94XCJcclxuICAgICAgICAgICAgPjxzcGFuIGNsYXNzPVwiaWNvbi13ZWJleCBpY29uLXdlYmV4LXVzZXJcIj48L3NwYW5cclxuICAgICAgICAgID48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImVtYWlsXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiPkVtYWlsPC90aD5cclxuICAgICAgPHRkXHJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLXNpdGVcIlxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXNlckNsaWNrKHVzZXIpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHVzZXIuZW1haWwgfX1cclxuICAgICAgPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdHVzXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXdpdGgtaW5mb1wiPlxyXG4gICAgICAgICAgU3RhdHVzXHJcbiAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9pbmZvLWNpcmNsZS1yZWd1bGFyLnN2Z1wiIHdpZHRoPVwiMTZcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC90aD5cclxuICAgICAgPHRkXHJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLXNpdGVcIlxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXNlckNsaWNrKHVzZXIpXCJcclxuICAgICAgICBbbWF0VG9vbHRpcF09XCJcclxuICAgICAgICAgIHVzZXIuc3RhdHVzICE9PSAnQWN0aXZlJyAmJiB1c2VyLndlYmV4VVVJRFxyXG4gICAgICAgICAgICA/ICdQZW5kaW5nIGN1dG92ZXIgdG8gTVQuIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvciBmb3IgZGV0YWlscy4nXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgICBcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuXHJcbiAgICAgICAgICBjbGFzcz1cImljb24tdXNlci1zdGF0dXNcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnaWNvbi11c2VyLXN0YXR1cy1hY3RpdmUnOiB1c2VyLnN0YXR1cyA9PT0gJ0FjdGl2ZScgfVwiXHJcbiAgICAgICAgPjwvc3BhblxyXG4gICAgICAgID57eyB1c2VyLnN0YXR1cyB9fVxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJhY3Rpb25zXCI+XHJcbiAgICAgIDx0aFxyXG4gICAgICAgIG1hdC1oZWFkZXItY2VsbFxyXG4gICAgICAgICptYXRIZWFkZXJDZWxsRGVmXHJcbiAgICAgICAgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiXHJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDI0cHg7IHBhZGRpbmctdG9wOiA0cHhcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvc2V0dGluZ3MtcmVndWxhci5zdmdcIiB3aWR0aD1cIjE2XCIgYWx0PVwiXCIgLz5cclxuICAgICAgPC90aD5cclxuICAgICAgPHRkXHJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLXNpdGUgYWN0aW9ucy1jZWxsXCJcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHVzZXI7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgICAgICAgY2xhc3M9XCJmaWVsZC1zcGlubmVyXCJcclxuICAgICAgICAgIFtkaWFtZXRlcl09XCIzMFwiXHJcbiAgICAgICAgICBzdHJva2VXaWR0aD1cIjNcIlxyXG4gICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgdXNlci5zdGF0dXMgPT09ICdJbiBQcm9ncmVzcycgfHxcclxuICAgICAgICAgICAgdXNlci5zdGF0dXMgPT09ICdQZW5kaW5nIEFjdGl2YXRpb24nIHx8XHJcbiAgICAgICAgICAgIHVzZXIuc3RhdHVzID09PSAnUGVuZGluZyBEZWFjdGl2YXRpb24nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgID48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICEoXHJcbiAgICAgICAgICAgICAgdXNlci5zdGF0dXMgPT09ICdJbiBQcm9ncmVzcycgfHxcclxuICAgICAgICAgICAgICB1c2VyLnN0YXR1cyA9PT0gJ1BlbmRpbmcgQWN0aXZhdGlvbicgfHxcclxuICAgICAgICAgICAgICB1c2VyLnN0YXR1cyA9PT0gJ1BlbmRpbmcgRGVhY3RpdmF0aW9uJ1xyXG4gICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgICEoXHJcbiAgICAgICAgICAgICAgbW92ZVVzZXJQZW5kaW5nICYmXHJcbiAgICAgICAgICAgICAgbW92ZUluUHJvZ3Jlc3NVc2VySWQgJiZcclxuICAgICAgICAgICAgICBtb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9PT0gdXNlcj8udXNlcmlkXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1hY3Rpb24tZG90XCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWFjdGlvbnMtZG90c1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24tZG90XCI+Ljwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWRvdFwiPi48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1kb3RcIj4uPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJ0cnVlXCI+UmVzZW5kIEludml0YXRpb248L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwidHJ1ZVwiPlJlc2V0IFBhc3N3b3JkPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIud2ViZXhVVUlEICYmIHVzZXIuY3VjbUlkID09IE9OX1BSRU1fSURcIlxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWluZyBzb29uXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBFbmFibGUgQUkgVHJhbnNjcmliZVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXNlci5pc1JlYWR5VG9VcGdyYWRlIHx8IHVzZXIud2ViZXhVVUlEIHx8IHVzZXIuc3RhdHVzICE9PSAnQWN0aXZlJ1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIuaXNNaWdyYXRlZFwiXHJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW92ZVVzZXIodXNlciwgaSwgJ1F1aWNrTW92ZScsICdNVCcpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgUXVpY2sgVXBncmFkZSBVc2VyIHRvIE1UXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIud2ViZXhVVUlEIHx8IHVzZXIuc3RhdHVzICE9PSAnQWN0aXZlJ1wiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIuaXNNaWdyYXRlZFwiXHJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW92ZVVzZXIodXNlciwgaSwgJ01UJywgJ01UJylcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBVcGdyYWRlIFVzZXIgdG8gTVRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAqbmdJZj1cInVzZXIuaXNNaWdyYXRlZFwiXHJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTW92ZVVzZXIodXNlciwgaSwgJ0RJJywgJ0RJJylcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBSZXZlcnQgVXNlciB0byBVQ00vRElcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNWYWxpZFdlYmV4VXVpZCh1c2VyKSB8fCB1c2VyLnN0YXR1cyAhPT0gJ0luYWN0aXZlJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkZpcm13YXJlVXBncmFkZUNsaWNrZWQodXNlcilcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBBY3RpdmF0ZSBVc2VyXHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXVzZXIud2ViZXhVVUlEIHx8IHVzZXIuc3RhdHVzICE9PSAnQWN0aXZlJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJldmVydENsaWNrZWQodXNlcilcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBSZXZlcnRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJ0cnVlXCI+RGVsZXRlIFVzZXI8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyb2xlXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiPlxyXG4gICAgICAgIEFkbWluIHJvbGVzXHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0ZFxyXG4gICAgICAgIGNsYXNzPVwidXNlci1zaXRlXCJcclxuICAgICAgICBtYXQtY2VsbFxyXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHVzZXJcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2luYWN0aXZlLXVzZXItcm93JzogdXNlci5zdGF0dXMgIT09ICdBY3RpdmUnIH1cIlxyXG4gICAgICAgIChjbGljayk9XCJvblVzZXJDbGljayh1c2VyKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyB1c2VyLnJvbGVOYW1lIHx8IFwiLVwiIH19XHJcbiAgICAgIDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNvdXJjZVwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPVwid2ViZXgtdGFibGUtdGhcIj5cclxuICAgICAgICBQcm92aXNpb25pbmcgVHlwZVxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGRcclxuICAgICAgICBjbGFzcz1cInVzZXItcHJvdmlzaW9uaW5nLXR5cGVcIlxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXNlckNsaWNrKHVzZXIpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ1c2VyLndlYmV4VVVJRFwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLXdyYXBwZXJcIlxyXG4gICAgICAgICAgICA+PGltZ1xyXG4gICAgICAgICAgICAgIHNyYz1cImFzc2V0cy9pY29ucy93ZWJleC5zdmdcIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidXZWJleCBDYWxsaW5nJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgIGFsdD1cIlwiXHJcbiAgICAgICAgICAvPjwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXVzZXIud2ViZXhVVUlEXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXIuY3VjbUlkID09IE9OX1BSRU1fSURcIiBjbGFzcz1cImljb24td3JhcHBlclwiXHJcbiAgICAgICAgICAgID48aW1nXHJcbiAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2xvY2FsXzI0LnN2Z1wiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInVUNNJ1wiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIlxyXG4gICAgICAgICAgLz48L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cInVzZXIuY3VjbUlkICE9IE9OX1BSRU1fSURcIiBjbGFzcz1cImljb24td3JhcHBlclwiXHJcbiAgICAgICAgICAgID48aW1nXHJcbiAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2ljb25zL2RpX2Nsb3VkXzI0LnN2Z1wiXHJcbiAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1dlYmV4IENhbGxpbmcgREknXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiXHJcbiAgICAgICAgICAgICAgYWx0PVwiXCJcclxuICAgICAgICAgIC8+PC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJsYXN0LWFjdGl2ZS10aW1lXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9XCJ3ZWJleC10YWJsZS10aFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiaGVhZGVyLXdpdGgtaW5mb1wiPlxyXG4gICAgICAgICAgTGFzdCBhY3RpdmUgdGltZVxyXG4gICAgICAgICAgPCEtLSA8bWF0LWljb24gY2xhc3M9XCJpbmZvLWljb25cIj5pbmZvPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9pbmZvLWNpcmNsZS1yZWd1bGFyLnN2Z1wiIHdpZHRoPVwiMTZcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC90aD5cclxuICAgICAgPHRkXHJcbiAgICAgICAgY2xhc3M9XCJ1c2VyLXNpdGVcIlxyXG4gICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgdXNlclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaW5hY3RpdmUtdXNlci1yb3cnOiB1c2VyLnN0YXR1cyAhPT0gJ0FjdGl2ZScgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uVXNlckNsaWNrKHVzZXIpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGdldFRvZGF5U2hvcnREYXRlKCkgfX1cclxuICAgICAgPC90ZD5cclxuICAgICAgL1xyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cclxuICAgIDx0clxyXG4gICAgICBtYXQtcm93XHJcbiAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCJcclxuICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICdkaXNhYmxlZC11c2VyLXJvdyc6XHJcbiAgICAgICAgICBtb3ZlVXNlclBlbmRpbmcgJiZcclxuICAgICAgICAgIG1vdmVJblByb2dyZXNzVXNlcklkICYmXHJcbiAgICAgICAgICBtb3ZlSW5Qcm9ncmVzc1VzZXJJZCA9PT0gcm93Py51c2VyaWQsXHJcbiAgICAgICAgJ2luYWN0aXZlLXVzZXItcm93Jzogcm93LnN0YXR1cyAhPT0gJ0FjdGl2ZScsXHJcbiAgICAgIH1cIlxyXG4gICAgPjwvdHI+XHJcbiAgPC90YWJsZT5cclxuXHJcbiAgPGFwcC1wYWdpbmF0aW9uXHJcbiAgICBbcGFnaW5hdGlvbl09XCJ1c2Vyc1NlYXJjaFNlcnZpY2UuZ2V0UGFnaW5hdGlvbigpXCJcclxuICAgIFtzaG93UGFnZVNpemVPcHRpb25zXT1cInRydWVcIlxyXG4gICAgKHBhZ2VOdW1iZXJDaGFuZ2VFbWl0dGVyKT1cInBhZ2VOdW1iZXJDaGFuZ2VFdmVudCgkZXZlbnQpXCJcclxuICAgIChwYWdlRW1pdHRlcik9XCJwYWdlRXZlbnQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvYXBwLXBhZ2luYXRpb24+XHJcbjwvZGl2PlxyXG5cclxuPGFwcC1tb3ZlLXVzZXItd2l6YXJkXHJcbiAgKm5nSWY9XCJzaG93TW92ZVVzZXJXaXphcmRcIlxyXG4gIFt1c2VyXT1cIm1vdmVVc2VyXCJcclxuICAoZG9uZSk9XCJjbG9zZU1vdmVVc2VyV2l6YXJkKHRydWUpXCJcclxuICBbY3VzdG9tZXJJZF09XCJjdXN0b21lcklkXCJcclxuICAocnVuTW92ZVVzZXIpPVwicnVuTW92ZVVzZXJUb01UKClcIlxyXG4gIChjbG9zZU1vdmVVc2VyV2l6YXJkKT1cImNsb3NlTW92ZVVzZXJXaXphcmQoZmFsc2UpXCJcclxuPjwvYXBwLW1vdmUtdXNlci13aXphcmQ+XHJcbiJdfQ==