@bnsights/bbsf-admin-portal 1.1.2 → 1.1.3

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 (684) hide show
  1. package/README.md +4 -0
  2. package/{esm2020 → esm2022}/bnsights-bbsf-admin-portal.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/Pages/ActiveDirectories/active-directories.component.mjs +14 -14
  4. package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +421 -0
  5. package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +528 -0
  6. package/{esm2020 → esm2022}/lib/Pages/ActiveDirectories/active-directory-routing.module.mjs +29 -29
  7. package/esm2022/lib/Pages/ActiveDirectories/active-directory.module.mjs +108 -0
  8. package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +23 -0
  9. package/{esm2020 → esm2022}/lib/Pages/_layout/components/aside/aside.component.mjs +65 -65
  10. package/{esm2020 → esm2022}/lib/Pages/_layout/components/content/content.component.mjs +31 -31
  11. package/{esm2020 → esm2022}/lib/Pages/_layout/components/footer/footer.component.mjs +32 -32
  12. package/{esm2020 → esm2022}/lib/Pages/_layout/components/header/header.component.mjs +57 -57
  13. package/{esm2020 → esm2022}/lib/Pages/_layout/components/header/page-title/page-title.component.mjs +36 -36
  14. package/{esm2020 → esm2022}/lib/Pages/_layout/components/scripts-init/scripts-init.component.mjs +58 -58
  15. package/{esm2020 → esm2022}/lib/Pages/_layout/components/subheader/subheader.component.mjs +36 -36
  16. package/{esm2020 → esm2022}/lib/Pages/_layout/components/subheader/subheader.module.mjs +26 -26
  17. package/{esm2020 → esm2022}/lib/Pages/_layout/components/toolbar/toolbar.component.mjs +41 -41
  18. package/{esm2020 → esm2022}/lib/Pages/_layout/components/toolbar/toolbar.module.mjs +25 -25
  19. package/{esm2020 → esm2022}/lib/Pages/_layout/components/topbar/topbar.component.mjs +71 -71
  20. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/activation/activation.component.mjs +92 -92
  21. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +37 -37
  22. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +54 -54
  23. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +100 -0
  24. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/error/error.component.mjs +48 -48
  25. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +59 -59
  26. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/login/login.component.mjs +94 -94
  27. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +90 -90
  28. package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +71 -71
  29. package/{esm2020 → esm2022}/lib/Pages/authentication/auth-callback/auth-callback.component.mjs +43 -43
  30. package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.component.mjs +15 -15
  31. package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.module.mjs +41 -41
  32. package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.routing.mjs +31 -31
  33. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +330 -0
  34. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +157 -0
  35. package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +801 -0
  36. package/{esm2020 → esm2022}/lib/Pages/configurations/configurations.component.mjs +15 -15
  37. package/esm2022/lib/Pages/configurations/configurations.module.mjs +104 -0
  38. package/{esm2020 → esm2022}/lib/Pages/configurations/configurations.routing.mjs +41 -41
  39. package/{esm2020 → esm2022}/lib/Pages/configurations/index.mjs +6 -6
  40. package/{esm2020 → esm2022}/lib/Pages/core/auth.module.mjs +30 -30
  41. package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +17 -0
  42. package/{esm2020 → esm2022}/lib/Pages/core/authentication/auth.guard.mjs +46 -46
  43. package/esm2022/lib/Pages/core/authentication/auth.service.mjs +147 -0
  44. package/esm2022/lib/Pages/departments/department/department.component.mjs +220 -0
  45. package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +185 -0
  46. package/{esm2020 → esm2022}/lib/Pages/departments/departments-routing.module.mjs +27 -27
  47. package/{esm2020 → esm2022}/lib/Pages/departments/departments.component.mjs +15 -15
  48. package/esm2022/lib/Pages/departments/departments.module.mjs +94 -0
  49. package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +136 -0
  50. package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +148 -0
  51. package/{esm2020 → esm2022}/lib/Pages/documents/document-template-info/document-template-info.component.mjs +332 -332
  52. package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +437 -0
  53. package/{esm2020 → esm2022}/lib/Pages/documents/documents.component.mjs +15 -15
  54. package/esm2022/lib/Pages/documents/documents.module.mjs +114 -0
  55. package/esm2022/lib/Pages/documents/documents.routing.mjs +37 -0
  56. package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +169 -0
  57. package/{esm2020 → esm2022}/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +123 -123
  58. package/{esm2020 → esm2022}/lib/Pages/empty-data/empty-data.component.mjs +31 -31
  59. package/{esm2020 → esm2022}/lib/Pages/empty-data/empty-data.module.mjs +28 -28
  60. package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +294 -0
  61. package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +43 -0
  62. package/{esm2020 → esm2022}/lib/Pages/helpCenter/help-center-routing.module.mjs +31 -31
  63. package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +242 -0
  64. package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +243 -0
  65. package/esm2022/lib/Pages/helpCenter/help-center.module.mjs +99 -0
  66. package/{esm2020 → esm2022}/lib/Pages/helpCenter/help-centers.component.mjs +15 -15
  67. package/{esm2020 → esm2022}/lib/Pages/home/filter-pipe.mjs +23 -23
  68. package/esm2022/lib/Pages/home/home.component.mjs +158 -0
  69. package/esm2022/lib/Pages/home/home.module.mjs +48 -0
  70. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +443 -0
  71. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +95 -0
  72. package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +223 -0
  73. package/esm2022/lib/Pages/jobs/jobs.module.mjs +87 -0
  74. package/{esm2020 → esm2022}/lib/Pages/license/license/license.component.mjs +163 -163
  75. package/esm2022/lib/Pages/license/license.module.mjs +71 -0
  76. package/{esm2020 → esm2022}/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +215 -215
  77. package/esm2022/lib/Pages/localizations/localizations.component.mjs +516 -0
  78. package/esm2022/lib/Pages/localizations/localizations.module.mjs +79 -0
  79. package/{esm2020 → esm2022}/lib/Pages/logs/log/log.component.mjs +93 -93
  80. package/{esm2020 → esm2022}/lib/Pages/logs/logs-routing.module.mjs +27 -27
  81. package/{esm2020 → esm2022}/lib/Pages/logs/logs.component.mjs +15 -15
  82. package/esm2022/lib/Pages/logs/logs.module.mjs +87 -0
  83. package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +367 -0
  84. package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +187 -0
  85. package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +297 -0
  86. package/{esm2020 → esm2022}/lib/Pages/lookups/lookups-routing.module.mjs +29 -29
  87. package/{esm2020 → esm2022}/lib/Pages/lookups/lookups.component.mjs +15 -15
  88. package/esm2022/lib/Pages/lookups/lookups.module.mjs +100 -0
  89. package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +104 -0
  90. package/{esm2020 → esm2022}/lib/Pages/notifications/edit-email/edit-email.component.mjs +158 -158
  91. package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +133 -0
  92. package/{esm2020 → esm2022}/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +115 -115
  93. package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +148 -0
  94. package/esm2022/lib/Pages/notifications/notifications-routing.module.mjs +39 -0
  95. package/{esm2020 → esm2022}/lib/Pages/notifications/notifications.component.mjs +15 -15
  96. package/esm2022/lib/Pages/notifications/notifications.module.mjs +101 -0
  97. package/{esm2020 → esm2022}/lib/Pages/notifications/template-info/template-info.component.mjs +391 -391
  98. package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +495 -0
  99. package/esm2022/lib/Pages/providers/provider/provider.component.mjs +615 -0
  100. package/{esm2020 → esm2022}/lib/Pages/providers/providers-routing.module.mjs +27 -27
  101. package/{esm2020 → esm2022}/lib/Pages/providers/providers.component.mjs +15 -15
  102. package/esm2022/lib/Pages/providers/providers.module.mjs +91 -0
  103. package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +334 -0
  104. package/{esm2020 → esm2022}/lib/Pages/publicHolidays/public-holidays-routing.module.mjs +25 -25
  105. package/{esm2020 → esm2022}/lib/Pages/publicHolidays/public-holidays.component.mjs +15 -15
  106. package/esm2022/lib/Pages/publicHolidays/public-holidays.module.mjs +94 -0
  107. package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +187 -0
  108. package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +226 -0
  109. package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +277 -0
  110. package/{esm2020 → esm2022}/lib/Pages/roles/roles-routing.module.mjs +29 -29
  111. package/{esm2020 → esm2022}/lib/Pages/roles/roles.component.mjs +15 -15
  112. package/esm2022/lib/Pages/roles/roles.module.mjs +105 -0
  113. package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +193 -0
  114. package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +180 -0
  115. package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +187 -0
  116. package/{esm2020 → esm2022}/lib/Pages/sectors/sectors-routing.module.mjs +29 -29
  117. package/{esm2020 → esm2022}/lib/Pages/sectors/sectors.component.mjs +15 -15
  118. package/esm2022/lib/Pages/sectors/sectors.module.mjs +96 -0
  119. package/{esm2020 → esm2022}/lib/Pages/shared/Enums/ADType.mjs +5 -5
  120. package/{esm2020 → esm2022}/lib/Pages/shared/Enums/Enums.mjs +54 -54
  121. package/{esm2020 → esm2022}/lib/Pages/shared/Enums/ProviderType.mjs +6 -6
  122. package/{esm2020 → esm2022}/lib/Pages/shared/Enums/WFActivityType.mjs +11 -11
  123. package/{esm2020 → esm2022}/lib/Pages/shared/Enums/configuration/ConditionRHSType.mjs +5 -5
  124. package/{esm2020 → esm2022}/lib/Pages/shared/Enums/configuration/authentecation-configuration.mjs +18 -18
  125. package/{esm2020 → esm2022}/lib/Pages/shared/Pipes/survey-date.pipe.mjs +22 -22
  126. package/{esm2020 → esm2022}/lib/Pages/shared/Services/AccountService.service.mjs +55 -55
  127. package/{esm2020 → esm2022}/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +51 -51
  128. package/{esm2020 → esm2022}/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +29 -29
  129. package/{esm2020 → esm2022}/lib/Pages/shared/Services/ConfigurationsService.service.mjs +61 -61
  130. package/{esm2020 → esm2022}/lib/Pages/shared/Services/DepartmentService.service.mjs +46 -46
  131. package/{esm2020 → esm2022}/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +36 -36
  132. package/{esm2020 → esm2022}/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +81 -81
  133. package/{esm2020 → esm2022}/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +37 -37
  134. package/{esm2020 → esm2022}/lib/Pages/shared/Services/ErrorService.service.mjs +15 -15
  135. package/{esm2020 → esm2022}/lib/Pages/shared/Services/GlobalErrorHandler.service.mjs +36 -36
  136. package/{esm2020 → esm2022}/lib/Pages/shared/Services/HelpCenterService.service.mjs +47 -47
  137. package/{esm2020 → esm2022}/lib/Pages/shared/Services/HttpErrorInterceptor.service.mjs +47 -47
  138. package/{esm2020 → esm2022}/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +36 -36
  139. package/{esm2020 → esm2022}/lib/Pages/shared/Services/JobsService.service.mjs +21 -21
  140. package/{esm2020 → esm2022}/lib/Pages/shared/Services/LicenseService.service.mjs +24 -24
  141. package/{esm2020 → esm2022}/lib/Pages/shared/Services/LogsService.mjs +24 -24
  142. package/{esm2020 → esm2022}/lib/Pages/shared/Services/LookupGroupsService.service.mjs +33 -33
  143. package/{esm2020 → esm2022}/lib/Pages/shared/Services/LookupService.service.mjs +67 -67
  144. package/{esm2020 → esm2022}/lib/Pages/shared/Services/PermissionSetService.service.mjs +50 -50
  145. package/{esm2020 → esm2022}/lib/Pages/shared/Services/PermissionsService.service.mjs +36 -36
  146. package/{esm2020 → esm2022}/lib/Pages/shared/Services/PublicHolidayService.service.mjs +39 -39
  147. package/{esm2020 → esm2022}/lib/Pages/shared/Services/SectorService.service.mjs +46 -46
  148. package/{esm2020 → esm2022}/lib/Pages/shared/Services/TemplateService.service.mjs +90 -90
  149. package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkFlowVersionService.service.mjs +24 -24
  150. package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +54 -54
  151. package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowInstanceService.service.mjs +24 -24
  152. package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowLogVariablesService.service.mjs +24 -24
  153. package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowService.service.mjs +38 -38
  154. package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +36 -36
  155. package/{esm2020 → esm2022}/lib/Pages/shared/Services/data.service.mjs +27 -27
  156. package/esm2022/lib/Pages/shared/Services/injectionModuleService.service.mjs +163 -0
  157. package/{esm2020 → esm2022}/lib/Pages/shared/Services/localizationsService.service .mjs +77 -77
  158. package/{esm2020 → esm2022}/lib/Pages/shared/Services/provider.service.mjs +62 -62
  159. package/{esm2020 → esm2022}/lib/Pages/shared/Services/survey-question.service.mjs +57 -57
  160. package/{esm2020 → esm2022}/lib/Pages/shared/Services/survey.service.mjs +140 -140
  161. package/{esm2020 → esm2022}/lib/Pages/shared/Services/userService.service.mjs +80 -80
  162. package/{esm2020 → esm2022}/lib/Pages/shared/base.service.mjs +19 -19
  163. package/{esm2020 → esm2022}/lib/Pages/shared/components/AdDirective.mjs +16 -16
  164. package/{esm2020 → esm2022}/lib/Pages/shared/components/external-url/external-url.component.mjs +168 -168
  165. package/{esm2020 → esm2022}/lib/Pages/shared/components/no-results/no-results.component.mjs +19 -19
  166. package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +192 -0
  167. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +48 -48
  168. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +50 -50
  169. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +217 -217
  170. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +47 -47
  171. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +49 -49
  172. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +50 -50
  173. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +624 -624
  174. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +47 -47
  175. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +683 -683
  176. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +138 -138
  177. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +102 -102
  178. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +56 -56
  179. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +532 -532
  180. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +113 -113
  181. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +114 -114
  182. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey.component.mjs +292 -292
  183. package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +696 -0
  184. package/esm2022/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +84 -0
  185. package/{esm2020 → esm2022}/lib/Pages/shared/components/survey-layout/survey-layout.component.mjs +15 -15
  186. package/{esm2020 → esm2022}/lib/Pages/shared/config/environment.mjs +11 -11
  187. package/esm2022/lib/Pages/shared/constants.mjs +130 -0
  188. package/{esm2020 → esm2022}/lib/Pages/shared/filter/filter.component.mjs +14 -14
  189. package/{esm2020 → esm2022}/lib/Pages/shared/models/ADModels/ADMappingModel.mjs +3 -3
  190. package/{esm2020 → esm2022}/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.mjs +6 -6
  191. package/{esm2020 → esm2022}/lib/Pages/shared/models/AccountModels/forgotPasswordModel.mjs +5 -5
  192. package/{esm2020 → esm2022}/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.mjs +50 -50
  193. package/{esm2020 → esm2022}/lib/Pages/shared/models/DepartmentModels/DepartmentModel.mjs +2 -2
  194. package/{esm2020 → esm2022}/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.mjs +5 -5
  195. package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentExportDTO.mjs +7 -7
  196. package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.mjs +9 -9
  197. package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.mjs +9 -9
  198. package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.mjs +7 -7
  199. package/{esm2020 → esm2022}/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.mjs +11 -11
  200. package/{esm2020 → esm2022}/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.mjs +7 -7
  201. package/{esm2020 → esm2022}/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.mjs +8 -8
  202. package/{esm2020 → esm2022}/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.mjs +6 -6
  203. package/{esm2020 → esm2022}/lib/Pages/shared/models/JobModels/JobCountsModel.mjs +2 -2
  204. package/{esm2020 → esm2022}/lib/Pages/shared/models/LicenseModel/LicenseModel.mjs +5 -5
  205. package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/EditResourceModel.mjs +7 -7
  206. package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.mjs +5 -5
  207. package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.mjs +2 -2
  208. package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupGroupModel.mjs +6 -6
  209. package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupItem.mjs +7 -7
  210. package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupModel.mjs +8 -8
  211. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.mjs +10 -10
  212. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.mjs +11 -11
  213. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.mjs +2 -2
  214. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.mjs +6 -6
  215. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.mjs +2 -2
  216. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.mjs +2 -2
  217. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/TemplateDTO.mjs +9 -9
  218. package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.mjs +8 -8
  219. package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionModel.mjs +7 -7
  220. package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.mjs +7 -7
  221. package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.mjs +5 -5
  222. package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.mjs +5 -5
  223. package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.mjs +2 -2
  224. package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/ProviderAttributeModel.mjs +2 -2
  225. package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/ProviderModel.mjs +5 -5
  226. package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.mjs +2 -2
  227. package/{esm2020 → esm2022}/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.mjs +7 -7
  228. package/{esm2020 → esm2022}/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.mjs +5 -5
  229. package/{esm2020 → esm2022}/lib/Pages/shared/models/SectorModels/SectorModel.mjs +6 -6
  230. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/DeleteSurveyDTO.mjs +2 -2
  231. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/add-survey-submissio.mjs +13 -13
  232. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/add-survey.mjs +10 -10
  233. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/model.mjs +2 -2
  234. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-field-options.mjs +6 -6
  235. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-filed-value.mjs +7 -7
  236. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-form-options.mjs +7 -7
  237. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-publish.mjs +4 -4
  238. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +17 -17
  239. package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-question.mjs +10 -10
  240. package/esm2022/lib/Pages/shared/models/SurveyModels/survey-utils.mjs +8 -0
  241. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/ActivationModel.mjs +2 -2
  242. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/AddUserModel.mjs +36 -36
  243. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/DropdownsResponseModel.mjs +11 -11
  244. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/EditUserModel.mjs +8 -8
  245. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/IdentityModel.mjs +2 -2
  246. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/UserSearchParamDTO.mjs +2 -2
  247. package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/UsersIDRequestModel.mjs +5 -5
  248. package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.mjs +2 -2
  249. package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityModel.mjs +16 -16
  250. package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.mjs +2 -2
  251. package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.mjs +7 -7
  252. package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFCreationModel.mjs +7 -7
  253. package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFVariableModel.mjs +8 -8
  254. package/{esm2020 → esm2022}/lib/Pages/shared/models/user.registration.mjs +7 -7
  255. package/esm2022/lib/Pages/shared/modules/public-survey.module.mjs +68 -0
  256. package/{esm2020 → esm2022}/lib/Pages/shared/modules/survey-routing.module.mjs +39 -39
  257. package/esm2022/lib/Pages/shared/modules/survey.module.mjs +129 -0
  258. package/esm2022/lib/Pages/shared/shared.module.mjs +31 -0
  259. package/{esm2020 → esm2022}/lib/Pages/shared/stylesbundle.service.mjs +44 -44
  260. package/{esm2020 → esm2022}/lib/Pages/start/index/index.component.mjs +25 -25
  261. package/{esm2020 → esm2022}/lib/Pages/start/start-routing.module.mjs +22 -22
  262. package/{esm2020 → esm2022}/lib/Pages/start/start.module.mjs +31 -31
  263. package/esm2022/lib/Pages/users/users.component.mjs +806 -0
  264. package/esm2022/lib/Pages/users/users.module.mjs +86 -0
  265. package/{esm2020 → esm2022}/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +535 -535
  266. package/{esm2020 → esm2022}/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +840 -840
  267. package/{esm2020 → esm2022}/lib/Pages/workflows/instance-info/instance-info.component.mjs +302 -302
  268. package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +793 -0
  269. package/{esm2020 → esm2022}/lib/Pages/workflows/version-info/version-info.component.mjs +137 -137
  270. package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +209 -0
  271. package/{esm2020 → esm2022}/lib/Pages/workflows/workflows-routing.module.mjs +35 -35
  272. package/{esm2020 → esm2022}/lib/Pages/workflows/workflows.component.mjs +15 -15
  273. package/esm2022/lib/Pages/workflows/workflows.module.mjs +103 -0
  274. package/{esm2020 → esm2022}/lib/_metronic/configs/default-layout.config.mjs +95 -95
  275. package/{esm2020 → esm2022}/lib/_metronic/core/_utils/DomHelpers.mjs +270 -270
  276. package/{esm2020 → esm2022}/lib/_metronic/core/_utils/ElementAnimateUtil.mjs +166 -166
  277. package/esm2022/lib/_metronic/core/_utils/EventHandlerUtil.mjs +90 -0
  278. package/esm2022/lib/_metronic/core/_utils/_DOMEventHandlerUtil.mjs +49 -0
  279. package/esm2022/lib/_metronic/core/_utils/_DataUtil.mjs +48 -0
  280. package/{esm2020 → esm2022}/lib/_metronic/core/_utils/_ElementStyleUtil.mjs +16 -16
  281. package/{esm2020 → esm2022}/lib/_metronic/core/_utils/_TypesHelpers.mjs +48 -48
  282. package/{esm2020 → esm2022}/lib/_metronic/core/_utils/models/OffsetModel.mjs +1 -1
  283. package/{esm2020 → esm2022}/lib/_metronic/core/_utils/models/ViewPortModel.mjs +1 -1
  284. package/{esm2020 → esm2022}/lib/_metronic/core/components/MenuComponent.mjs +827 -827
  285. package/{esm2020 → esm2022}/lib/_metronic/core/components/_CookieComponent.mjs +52 -52
  286. package/esm2022/lib/_metronic/core/components/_DrawerComponent.mjs +288 -0
  287. package/{esm2020 → esm2022}/lib/_metronic/core/components/_ScrollComponent.mjs +252 -252
  288. package/esm2022/lib/_metronic/core/components/_ScrollTopComponent.mjs +113 -0
  289. package/esm2022/lib/_metronic/core/components/_ToggleComponent.mjs +157 -0
  290. package/{esm2020 → esm2022}/lib/_metronic/core/services/layout-init.service.mjs +155 -155
  291. package/{esm2020 → esm2022}/lib/_metronic/core/services/layout.service.mjs +150 -150
  292. package/esm2022/lib/_metronic/core/services/page-info.service.mjs +119 -0
  293. package/esm2022/lib/masterlayout-routing.module.mjs +41 -0
  294. package/{esm2020 → esm2022}/lib/masterlayout.component.mjs +118 -118
  295. package/esm2022/lib/masterlayout.module.mjs +188 -0
  296. package/{esm2020 → esm2022}/public-api.mjs +48 -48
  297. package/{fesm2020 → fesm2022}/bnsights-bbsf-admin-portal.mjs +26884 -26881
  298. package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -0
  299. package/index.d.ts +5 -5
  300. package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +8 -8
  301. package/lib/Pages/ActiveDirectories/active-directory/active-directory.component.d.ts +85 -87
  302. package/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.d.ts +97 -99
  303. package/lib/Pages/ActiveDirectories/active-directory-routing.module.d.ts +7 -7
  304. package/lib/Pages/ActiveDirectories/active-directory.module.d.ts +26 -26
  305. package/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.d.ts +13 -13
  306. package/lib/Pages/_layout/components/aside/aside.component.d.ts +24 -24
  307. package/lib/Pages/_layout/components/content/content.component.d.ts +13 -13
  308. package/lib/Pages/_layout/components/footer/footer.component.d.ts +14 -14
  309. package/lib/Pages/_layout/components/header/header.component.d.ts +24 -24
  310. package/lib/Pages/_layout/components/header/page-title/page-title.component.d.ts +22 -22
  311. package/lib/Pages/_layout/components/scripts-init/scripts-init.component.d.ts +18 -18
  312. package/lib/Pages/_layout/components/subheader/subheader.component.d.ts +17 -17
  313. package/lib/Pages/_layout/components/subheader/subheader.module.d.ts +9 -9
  314. package/lib/Pages/_layout/components/toolbar/toolbar.component.d.ts +18 -18
  315. package/lib/Pages/_layout/components/toolbar/toolbar.module.d.ts +10 -10
  316. package/lib/Pages/_layout/components/topbar/topbar.component.d.ts +44 -44
  317. package/lib/Pages/anonymouslayout/activation/activation.component.d.ts +32 -32
  318. package/lib/Pages/anonymouslayout/anonymouslayout-routing.module.d.ts +7 -7
  319. package/lib/Pages/anonymouslayout/anonymouslayout.component.d.ts +24 -24
  320. package/lib/Pages/anonymouslayout/anonymouslayout.module.d.ts +21 -21
  321. package/lib/Pages/anonymouslayout/error/error.component.d.ts +25 -25
  322. package/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.d.ts +24 -24
  323. package/lib/Pages/anonymouslayout/login/login.component.d.ts +36 -36
  324. package/lib/Pages/anonymouslayout/rest-password/rest-password.component.d.ts +32 -32
  325. package/lib/Pages/anonymouslayout/upload-license/upload-license.component.d.ts +25 -25
  326. package/lib/Pages/authentication/auth-callback/auth-callback.component.d.ts +21 -21
  327. package/lib/Pages/authentication/authentication.component.d.ts +8 -8
  328. package/lib/Pages/authentication/authentication.module.d.ts +12 -12
  329. package/lib/Pages/authentication/authentication.routing.d.ts +7 -7
  330. package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +75 -75
  331. package/lib/Pages/configurations/auth-configuration/auth-configuration.component.d.ts +57 -58
  332. package/lib/Pages/configurations/configuration/configuration.component.d.ts +127 -129
  333. package/lib/Pages/configurations/configurations.component.d.ts +8 -8
  334. package/lib/Pages/configurations/configurations.module.d.ts +24 -24
  335. package/lib/Pages/configurations/configurations.routing.d.ts +7 -7
  336. package/lib/Pages/configurations/index.d.ts +6 -6
  337. package/lib/Pages/core/auth.module.d.ts +8 -8
  338. package/lib/Pages/core/authentication/admin.guard.d.ts +9 -9
  339. package/lib/Pages/core/authentication/auth.guard.d.ts +14 -14
  340. package/lib/Pages/core/authentication/auth.service.d.ts +35 -35
  341. package/lib/Pages/departments/department/department.component.d.ts +66 -68
  342. package/lib/Pages/departments/department-info/department-info.component.d.ts +58 -60
  343. package/lib/Pages/departments/departments-routing.module.d.ts +7 -7
  344. package/lib/Pages/departments/departments.component.d.ts +8 -8
  345. package/lib/Pages/departments/departments.module.d.ts +21 -21
  346. package/lib/Pages/documents/{add/add.component.d.ts → add-document/add-document.component.d.ts} +40 -40
  347. package/lib/Pages/documents/document-master-layouts/document-master-layouts.component.d.ts +51 -53
  348. package/lib/Pages/documents/document-template-info/document-template-info.component.d.ts +67 -67
  349. package/lib/Pages/documents/document-templates/document-templates.component.d.ts +87 -89
  350. package/lib/Pages/documents/documents.component.d.ts +8 -8
  351. package/lib/Pages/documents/documents.module.d.ts +27 -27
  352. package/lib/Pages/documents/documents.routing.d.ts +7 -7
  353. package/lib/Pages/documents/{edit/edit.component.d.ts → edit-document/edit-document.component.d.ts} +42 -42
  354. package/lib/Pages/documents/edit-document-template/edit-document-template.component.d.ts +39 -39
  355. package/lib/Pages/empty-data/empty-data.component.d.ts +14 -14
  356. package/lib/Pages/empty-data/empty-data.module.d.ts +8 -8
  357. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +69 -71
  358. package/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.d.ts +23 -23
  359. package/lib/Pages/helpCenter/help-center-routing.module.d.ts +7 -7
  360. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +65 -67
  361. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +64 -66
  362. package/lib/Pages/helpCenter/help-center.module.d.ts +25 -25
  363. package/lib/Pages/helpCenter/help-centers.component.d.ts +8 -8
  364. package/lib/Pages/home/filter-pipe.d.ts +7 -7
  365. package/lib/Pages/home/home.component.d.ts +19 -19
  366. package/lib/Pages/home/home.module.d.ts +14 -14
  367. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +86 -88
  368. package/lib/Pages/impersonation-rules/impersonation-rules.module.d.ts +19 -19
  369. package/lib/Pages/jobs/jobs/jobs.component.d.ts +76 -77
  370. package/lib/Pages/jobs/jobs.module.d.ts +17 -17
  371. package/lib/Pages/license/license/license.component.d.ts +59 -59
  372. package/lib/Pages/license/license.module.d.ts +15 -15
  373. package/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.d.ts +53 -53
  374. package/lib/Pages/localizations/localizations.component.d.ts +108 -110
  375. package/lib/Pages/localizations/localizations.module.d.ts +18 -18
  376. package/lib/Pages/logs/log/log.component.d.ts +34 -34
  377. package/lib/Pages/logs/logs-routing.module.d.ts +7 -7
  378. package/lib/Pages/logs/logs.component.d.ts +8 -8
  379. package/lib/Pages/logs/logs.module.d.ts +20 -20
  380. package/lib/Pages/lookups/lookup/lookup.component.d.ts +83 -85
  381. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +58 -60
  382. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +84 -86
  383. package/lib/Pages/lookups/lookups-routing.module.d.ts +7 -7
  384. package/lib/Pages/lookups/lookups.component.d.ts +8 -8
  385. package/lib/Pages/lookups/lookups.module.d.ts +24 -24
  386. package/lib/Pages/notifications/{add/add.component.d.ts → add-notification/add-notification.component.d.ts} +33 -33
  387. package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +43 -43
  388. package/lib/Pages/notifications/{edit/edit.component.d.ts → edit-notification/edit-notification.component.d.ts} +35 -35
  389. package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +37 -37
  390. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +51 -53
  391. package/lib/Pages/notifications/notifications-routing.module.d.ts +7 -7
  392. package/lib/Pages/notifications/notifications.component.d.ts +8 -8
  393. package/lib/Pages/notifications/notifications.module.d.ts +28 -28
  394. package/lib/Pages/notifications/template-info/template-info.component.d.ts +86 -86
  395. package/lib/Pages/notifications/templates/templates.component.d.ts +100 -102
  396. package/lib/Pages/providers/provider/provider.component.d.ts +118 -120
  397. package/lib/Pages/providers/providers-routing.module.d.ts +7 -7
  398. package/lib/Pages/providers/providers.component.d.ts +8 -8
  399. package/lib/Pages/providers/providers.module.d.ts +21 -21
  400. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +73 -75
  401. package/lib/Pages/publicHolidays/public-holidays-routing.module.d.ts +7 -7
  402. package/lib/Pages/publicHolidays/public-holidays.component.d.ts +8 -8
  403. package/lib/Pages/publicHolidays/public-holidays.module.d.ts +21 -21
  404. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +56 -58
  405. package/lib/Pages/roles/permissions/permissions.component.d.ts +63 -65
  406. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +67 -69
  407. package/lib/Pages/roles/roles-routing.module.d.ts +7 -7
  408. package/lib/Pages/roles/roles.component.d.ts +8 -8
  409. package/lib/Pages/roles/roles.module.d.ts +24 -24
  410. package/lib/Pages/sectors/sector/sector.component.d.ts +62 -64
  411. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +60 -62
  412. package/lib/Pages/sectors/{department-info/department-info.component.d.ts → sectors-department-info/sectors-department-info.component.d.ts} +61 -63
  413. package/lib/Pages/sectors/sectors-routing.module.d.ts +7 -7
  414. package/lib/Pages/sectors/sectors.component.d.ts +8 -8
  415. package/lib/Pages/sectors/sectors.module.d.ts +23 -23
  416. package/lib/Pages/shared/Enums/ADType.d.ts +4 -4
  417. package/lib/Pages/shared/Enums/Enums.d.ts +47 -47
  418. package/lib/Pages/shared/Enums/ProviderType.d.ts +5 -5
  419. package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -10
  420. package/lib/Pages/shared/Enums/configuration/ConditionRHSType.d.ts +4 -4
  421. package/lib/Pages/shared/Enums/configuration/authentecation-configuration.d.ts +15 -15
  422. package/lib/Pages/shared/Pipes/survey-date.pipe.d.ts +12 -12
  423. package/lib/Pages/shared/Services/AccountService.service.d.ts +21 -21
  424. package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +18 -18
  425. package/lib/Pages/shared/Services/AnonymousLayoutService.service.d.ts +17 -17
  426. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +20 -20
  427. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +18 -18
  428. package/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.d.ts +15 -15
  429. package/lib/Pages/shared/Services/DocumentTemplateService.service.d.ts +26 -26
  430. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +15 -15
  431. package/lib/Pages/shared/Services/ErrorService.service.d.ts +8 -8
  432. package/lib/Pages/shared/Services/GlobalErrorHandler.service.d.ts +10 -10
  433. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +18 -18
  434. package/lib/Pages/shared/Services/HttpErrorInterceptor.service.d.ts +12 -12
  435. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +15 -15
  436. package/lib/Pages/shared/Services/JobsService.service.d.ts +10 -10
  437. package/lib/Pages/shared/Services/LicenseService.service.d.ts +12 -12
  438. package/lib/Pages/shared/Services/LogsService.d.ts +10 -10
  439. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +14 -14
  440. package/lib/Pages/shared/Services/LookupService.service.d.ts +25 -25
  441. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +19 -19
  442. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +15 -15
  443. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +16 -16
  444. package/lib/Pages/shared/Services/SectorService.service.d.ts +18 -18
  445. package/lib/Pages/shared/Services/TemplateService.service.d.ts +34 -34
  446. package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -10
  447. package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +19 -19
  448. package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -10
  449. package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -10
  450. package/lib/Pages/shared/Services/WorkflowService.service.d.ts +15 -15
  451. package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +15 -15
  452. package/lib/Pages/shared/Services/data.service.d.ts +9 -9
  453. package/lib/Pages/shared/Services/injectionModuleService.service.d.ts +50 -50
  454. package/lib/Pages/shared/Services/localizationsService.service .d.ts +28 -28
  455. package/lib/Pages/shared/Services/provider.service.d.ts +25 -25
  456. package/lib/Pages/shared/Services/survey-question.service.d.ts +19 -19
  457. package/lib/Pages/shared/Services/survey.service.d.ts +38 -38
  458. package/lib/Pages/shared/Services/userService.service.d.ts +29 -29
  459. package/lib/Pages/shared/base.service.d.ts +4 -4
  460. package/lib/Pages/shared/components/AdDirective.d.ts +8 -8
  461. package/lib/Pages/shared/components/external-url/external-url.component.d.ts +61 -61
  462. package/lib/Pages/shared/components/no-results/no-results.component.d.ts +10 -10
  463. package/lib/Pages/shared/components/survey/add-survey/add-survey.component.d.ts +40 -40
  464. package/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.d.ts +19 -19
  465. package/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.d.ts +19 -19
  466. package/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.d.ts +43 -43
  467. package/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.d.ts +19 -19
  468. package/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.d.ts +19 -19
  469. package/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.d.ts +19 -19
  470. package/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.d.ts +83 -83
  471. package/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.d.ts +19 -19
  472. package/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.d.ts +84 -84
  473. package/lib/Pages/shared/components/survey/survey-info/preview/preview.component.d.ts +40 -40
  474. package/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.d.ts +31 -31
  475. package/lib/Pages/shared/components/survey/survey-info/result-question/result.component.d.ts +27 -27
  476. package/lib/Pages/shared/components/survey/survey-info/survey-info.component.d.ts +119 -119
  477. package/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.d.ts +39 -39
  478. package/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.d.ts +32 -32
  479. package/lib/Pages/shared/components/survey/survey.component.d.ts +65 -65
  480. package/lib/Pages/shared/components/survey-form/survey-form.component.d.ts +41 -41
  481. package/lib/Pages/shared/components/survey-form-item/survey-form-item.component.d.ts +23 -23
  482. package/lib/Pages/shared/components/survey-layout/survey-layout.component.d.ts +8 -8
  483. package/lib/Pages/shared/config/environment.d.ts +1 -1
  484. package/lib/Pages/shared/constants.d.ts +129 -129
  485. package/lib/Pages/shared/filter/filter.component.d.ts +8 -8
  486. package/lib/Pages/shared/models/ADModels/ADMappingModel.d.ts +6 -6
  487. package/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.d.ts +28 -28
  488. package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -3
  489. package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +64 -64
  490. package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +9 -9
  491. package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +4 -4
  492. package/lib/Pages/shared/models/DocumentsModels/DocumentExportDTO.d.ts +8 -8
  493. package/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.d.ts +16 -16
  494. package/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.d.ts +13 -13
  495. package/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.d.ts +7 -7
  496. package/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.d.ts +17 -17
  497. package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +9 -9
  498. package/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.d.ts +15 -15
  499. package/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.d.ts +5 -5
  500. package/lib/Pages/shared/models/JobModels/JobCountsModel.d.ts +8 -8
  501. package/lib/Pages/shared/models/LicenseModel/LicenseModel.d.ts +5 -5
  502. package/lib/Pages/shared/models/LocalizationModels/EditResourceModel.d.ts +7 -7
  503. package/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.d.ts +9 -9
  504. package/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.d.ts +5 -5
  505. package/lib/Pages/shared/models/Lookups/LookupGroupModel.d.ts +5 -5
  506. package/lib/Pages/shared/models/Lookups/LookupItem.d.ts +13 -13
  507. package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +13 -13
  508. package/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.d.ts +9 -9
  509. package/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.d.ts +15 -15
  510. package/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.d.ts +9 -9
  511. package/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.d.ts +9 -9
  512. package/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.d.ts +9 -9
  513. package/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.d.ts +8 -8
  514. package/lib/Pages/shared/models/NotificationsModels/TemplateDTO.d.ts +22 -22
  515. package/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.d.ts +11 -11
  516. package/lib/Pages/shared/models/PermissionsModels/PermissionModel.d.ts +8 -8
  517. package/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.d.ts +10 -10
  518. package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +4 -4
  519. package/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.d.ts +6 -6
  520. package/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.d.ts +7 -7
  521. package/lib/Pages/shared/models/ProviderModels/ProviderAttributeModel.d.ts +7 -7
  522. package/lib/Pages/shared/models/ProviderModels/ProviderModel.d.ts +13 -13
  523. package/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.d.ts +6 -6
  524. package/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.d.ts +15 -15
  525. package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +4 -4
  526. package/lib/Pages/shared/models/SectorModels/SectorModel.d.ts +6 -6
  527. package/lib/Pages/shared/models/SurveyModels/DeleteSurveyDTO.d.ts +3 -3
  528. package/lib/Pages/shared/models/SurveyModels/add-survey-submissio.d.ts +21 -21
  529. package/lib/Pages/shared/models/SurveyModels/add-survey.d.ts +18 -18
  530. package/lib/Pages/shared/models/SurveyModels/model.d.ts +3 -3
  531. package/lib/Pages/shared/models/SurveyModels/survey-field-options.d.ts +24 -24
  532. package/lib/Pages/shared/models/SurveyModels/survey-filed-value.d.ts +22 -22
  533. package/lib/Pages/shared/models/SurveyModels/survey-form-options.d.ts +8 -8
  534. package/lib/Pages/shared/models/SurveyModels/survey-publish.d.ts +15 -15
  535. package/lib/Pages/shared/models/SurveyModels/survey-question-option.d.ts +9 -9
  536. package/lib/Pages/shared/models/SurveyModels/survey-question.d.ts +21 -21
  537. package/lib/Pages/shared/models/SurveyModels/survey-utils.d.ts +5 -5
  538. package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -10
  539. package/lib/Pages/shared/models/UserModels/AddUserModel.d.ts +33 -33
  540. package/lib/Pages/shared/models/UserModels/DropdownsResponseModel.d.ts +9 -9
  541. package/lib/Pages/shared/models/UserModels/EditUserModel.d.ts +25 -25
  542. package/lib/Pages/shared/models/UserModels/IdentityModel.d.ts +9 -9
  543. package/lib/Pages/shared/models/UserModels/UserSearchParamDTO.d.ts +8 -8
  544. package/lib/Pages/shared/models/UserModels/UsersIDRequestModel.d.ts +3 -3
  545. package/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.d.ts +9 -9
  546. package/lib/Pages/shared/models/WorkflowModels/WFActivityModel.d.ts +40 -40
  547. package/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.d.ts +13 -13
  548. package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -13
  549. package/lib/Pages/shared/models/WorkflowModels/WFCreationModel.d.ts +10 -10
  550. package/lib/Pages/shared/models/WorkflowModels/WFVariableModel.d.ts +23 -23
  551. package/lib/Pages/shared/models/user.registration.d.ts +6 -6
  552. package/lib/Pages/shared/modules/public-survey.module.d.ts +15 -15
  553. package/lib/Pages/shared/modules/survey-routing.module.d.ts +7 -7
  554. package/lib/Pages/shared/modules/survey.module.d.ts +35 -35
  555. package/lib/Pages/shared/shared.module.d.ts +8 -8
  556. package/lib/Pages/shared/stylesbundle.service.d.ts +9 -9
  557. package/lib/Pages/start/index/index.component.d.ts +15 -15
  558. package/lib/Pages/start/start-routing.module.d.ts +7 -7
  559. package/lib/Pages/start/start.module.d.ts +11 -11
  560. package/lib/Pages/users/users.component.d.ts +138 -139
  561. package/lib/Pages/users/users.module.d.ts +18 -18
  562. package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -77
  563. package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +82 -82
  564. package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -81
  565. package/lib/Pages/workflows/tabs/tabs.component.d.ts +126 -128
  566. package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -41
  567. package/lib/Pages/workflows/workflow/workflow.component.d.ts +54 -55
  568. package/lib/Pages/workflows/workflows-routing.module.d.ts +7 -7
  569. package/lib/Pages/workflows/workflows.component.d.ts +8 -8
  570. package/lib/Pages/workflows/workflows.module.d.ts +27 -27
  571. package/lib/_metronic/configs/default-layout.config.d.ts +139 -139
  572. package/lib/_metronic/core/_utils/DomHelpers.d.ts +26 -26
  573. package/lib/_metronic/core/_utils/ElementAnimateUtil.d.ts +13 -13
  574. package/lib/_metronic/core/_utils/EventHandlerUtil.d.ts +20 -20
  575. package/lib/_metronic/core/_utils/_DOMEventHandlerUtil.d.ts +6 -6
  576. package/lib/_metronic/core/_utils/_DataUtil.d.ts +8 -8
  577. package/lib/_metronic/core/_utils/_ElementStyleUtil.d.ts +5 -5
  578. package/lib/_metronic/core/_utils/_TypesHelpers.d.ts +10 -10
  579. package/lib/_metronic/core/_utils/models/OffsetModel.d.ts +4 -4
  580. package/lib/_metronic/core/_utils/models/ViewPortModel.d.ts +4 -4
  581. package/lib/_metronic/core/components/MenuComponent.d.ts +88 -88
  582. package/lib/_metronic/core/components/_CookieComponent.d.ts +25 -25
  583. package/lib/_metronic/core/components/_DrawerComponent.d.ts +49 -49
  584. package/lib/_metronic/core/components/_ScrollComponent.d.ts +31 -31
  585. package/lib/_metronic/core/components/_ScrollTopComponent.d.ts +24 -24
  586. package/lib/_metronic/core/components/_ToggleComponent.d.ts +36 -36
  587. package/lib/_metronic/core/services/layout-init.service.d.ts +18 -18
  588. package/lib/_metronic/core/services/layout.service.d.ts +38 -38
  589. package/lib/_metronic/core/services/page-info.service.d.ts +32 -32
  590. package/lib/masterlayout-routing.module.d.ts +11 -13
  591. package/lib/masterlayout.component.d.ts +63 -63
  592. package/lib/masterlayout.module.d.ts +34 -34
  593. package/package.json +25 -30
  594. package/public-api.d.ts +41 -41
  595. package/src/lib/assets/images/menu/Tools.svg +10 -4
  596. package/src/lib/assets/images/menu/authentication.svg +9 -0
  597. package/src/lib/assets/sass/style-rtl.scss +3 -3
  598. package/src/lib/assets/sass/style.scss +3 -3
  599. package/bnsights-bbsf-admin-portal-1.1.2.tgz +0 -0
  600. package/esm2020/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +0 -421
  601. package/esm2020/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +0 -528
  602. package/esm2020/lib/Pages/ActiveDirectories/active-directory.module.mjs +0 -108
  603. package/esm2020/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +0 -23
  604. package/esm2020/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +0 -100
  605. package/esm2020/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +0 -330
  606. package/esm2020/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +0 -157
  607. package/esm2020/lib/Pages/configurations/configuration/configuration.component.mjs +0 -801
  608. package/esm2020/lib/Pages/configurations/configurations.module.mjs +0 -104
  609. package/esm2020/lib/Pages/core/authentication/admin.guard.mjs +0 -17
  610. package/esm2020/lib/Pages/core/authentication/auth.service.mjs +0 -147
  611. package/esm2020/lib/Pages/departments/department/department.component.mjs +0 -220
  612. package/esm2020/lib/Pages/departments/department-info/department-info.component.mjs +0 -185
  613. package/esm2020/lib/Pages/departments/departments.module.mjs +0 -94
  614. package/esm2020/lib/Pages/documents/add/add.component.mjs +0 -136
  615. package/esm2020/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +0 -148
  616. package/esm2020/lib/Pages/documents/document-templates/document-templates.component.mjs +0 -437
  617. package/esm2020/lib/Pages/documents/documents.module.mjs +0 -114
  618. package/esm2020/lib/Pages/documents/documents.routing.mjs +0 -37
  619. package/esm2020/lib/Pages/documents/edit/edit.component.mjs +0 -169
  620. package/esm2020/lib/Pages/helpCenter/help-center/help-center.component.mjs +0 -294
  621. package/esm2020/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +0 -43
  622. package/esm2020/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +0 -242
  623. package/esm2020/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +0 -243
  624. package/esm2020/lib/Pages/helpCenter/help-center.module.mjs +0 -98
  625. package/esm2020/lib/Pages/home/home.component.mjs +0 -153
  626. package/esm2020/lib/Pages/home/home.module.mjs +0 -48
  627. package/esm2020/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +0 -443
  628. package/esm2020/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +0 -95
  629. package/esm2020/lib/Pages/jobs/jobs/jobs.component.mjs +0 -223
  630. package/esm2020/lib/Pages/jobs/jobs.module.mjs +0 -87
  631. package/esm2020/lib/Pages/license/license.module.mjs +0 -71
  632. package/esm2020/lib/Pages/localizations/localizations.component.mjs +0 -516
  633. package/esm2020/lib/Pages/localizations/localizations.module.mjs +0 -79
  634. package/esm2020/lib/Pages/logs/logs.module.mjs +0 -87
  635. package/esm2020/lib/Pages/lookups/lookup/lookup.component.mjs +0 -367
  636. package/esm2020/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +0 -187
  637. package/esm2020/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +0 -297
  638. package/esm2020/lib/Pages/lookups/lookups.module.mjs +0 -100
  639. package/esm2020/lib/Pages/notifications/add/add.component.mjs +0 -104
  640. package/esm2020/lib/Pages/notifications/edit/edit.component.mjs +0 -133
  641. package/esm2020/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +0 -148
  642. package/esm2020/lib/Pages/notifications/notifications-routing.module.mjs +0 -39
  643. package/esm2020/lib/Pages/notifications/notifications.module.mjs +0 -101
  644. package/esm2020/lib/Pages/notifications/templates/templates.component.mjs +0 -495
  645. package/esm2020/lib/Pages/providers/provider/provider.component.mjs +0 -615
  646. package/esm2020/lib/Pages/providers/providers.module.mjs +0 -91
  647. package/esm2020/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +0 -334
  648. package/esm2020/lib/Pages/publicHolidays/public-holidays.module.mjs +0 -94
  649. package/esm2020/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +0 -187
  650. package/esm2020/lib/Pages/roles/permissions/permissions.component.mjs +0 -226
  651. package/esm2020/lib/Pages/roles/permissionsets/permissionsets.component.mjs +0 -277
  652. package/esm2020/lib/Pages/roles/roles.module.mjs +0 -105
  653. package/esm2020/lib/Pages/sectors/department-info/department-info.component.mjs +0 -187
  654. package/esm2020/lib/Pages/sectors/sector/sector.component.mjs +0 -193
  655. package/esm2020/lib/Pages/sectors/sector-info/sector-info.component.mjs +0 -180
  656. package/esm2020/lib/Pages/sectors/sectors.module.mjs +0 -96
  657. package/esm2020/lib/Pages/shared/Enums/WFVariableDataType.mjs +0 -14
  658. package/esm2020/lib/Pages/shared/Services/injectionModuleService.service.mjs +0 -163
  659. package/esm2020/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +0 -192
  660. package/esm2020/lib/Pages/shared/components/survey-form/survey-form.component.mjs +0 -696
  661. package/esm2020/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +0 -84
  662. package/esm2020/lib/Pages/shared/constants.mjs +0 -130
  663. package/esm2020/lib/Pages/shared/models/SurveyModels/survey-utils.mjs +0 -8
  664. package/esm2020/lib/Pages/shared/modules/public-survey.module.mjs +0 -68
  665. package/esm2020/lib/Pages/shared/modules/survey.module.mjs +0 -126
  666. package/esm2020/lib/Pages/shared/shared.module.mjs +0 -31
  667. package/esm2020/lib/Pages/users/users.component.mjs +0 -806
  668. package/esm2020/lib/Pages/users/users.module.mjs +0 -86
  669. package/esm2020/lib/Pages/workflows/tabs/tabs.component.mjs +0 -793
  670. package/esm2020/lib/Pages/workflows/workflow/workflow.component.mjs +0 -209
  671. package/esm2020/lib/Pages/workflows/workflows.module.mjs +0 -103
  672. package/esm2020/lib/_metronic/core/_utils/EventHandlerUtil.mjs +0 -90
  673. package/esm2020/lib/_metronic/core/_utils/_DOMEventHandlerUtil.mjs +0 -49
  674. package/esm2020/lib/_metronic/core/_utils/_DataUtil.mjs +0 -48
  675. package/esm2020/lib/_metronic/core/components/_DrawerComponent.mjs +0 -290
  676. package/esm2020/lib/_metronic/core/components/_ScrollTopComponent.mjs +0 -113
  677. package/esm2020/lib/_metronic/core/components/_ToggleComponent.mjs +0 -157
  678. package/esm2020/lib/_metronic/core/services/page-info.service.mjs +0 -119
  679. package/esm2020/lib/masterlayout-routing.module.mjs +0 -45
  680. package/esm2020/lib/masterlayout.module.mjs +0 -188
  681. package/fesm2015/bnsights-bbsf-admin-portal.mjs +0 -27293
  682. package/fesm2015/bnsights-bbsf-admin-portal.mjs.map +0 -1
  683. package/fesm2020/bnsights-bbsf-admin-portal.mjs.map +0 -1
  684. package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +0 -12
@@ -0,0 +1,615 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { CheckBoxOptions, ControlLayout, DropdownOptions, FilterItem, FilterType, InputType, PagingOptions, RadioButtonOptions, TextAreaOptions, TextBoxOptions, RadioButtonItem, FormOptions, ConfirmationModalOptions, PagingActionMode, PhoneOptions } from '@bnsights/bbsf-controls';
4
+ import { ProviderModel } from '../../shared/models/ProviderModels/ProviderModel';
5
+ import { ProviderAttributeModel } from '../../shared/models/ProviderModels/ProviderAttributeModel';
6
+ import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
7
+ import { saveAs } from 'file-saver';
8
+ import { ProviderType } from '../../shared/Enums/ProviderType';
9
+ import { EmailProviderTesterModel } from '../../shared/models/ProviderModels/EmailProviderTesterModel';
10
+ import { SMSProviderTesterModel } from '../../shared/models/ProviderModels/SMSProviderTesterModel';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "../../shared/Services/provider.service";
13
+ import * as i2 from "@ng-bootstrap/ng-bootstrap";
14
+ import * as i3 from "@bnsights/bbsf-utilities";
15
+ import * as i4 from "../../../_metronic/core/services/page-info.service";
16
+ import * as i5 from "@angular/common";
17
+ import * as i6 from "@angular/forms";
18
+ import * as i7 from "ng-block-ui";
19
+ import * as i8 from "@bnsights/bbsf-controls";
20
+ import * as i9 from "@angular/material/menu";
21
+ import * as i10 from "ng-inline-svg-2";
22
+ import * as i11 from "../../empty-data/empty-data.component";
23
+ export class ProviderComponent {
24
+ constructor(ProviderService, modalService, authService, bbsfTranslateService, utilityService, pageInfoService, requestHandlerService) {
25
+ this.ProviderService = ProviderService;
26
+ this.modalService = modalService;
27
+ this.authService = authService;
28
+ this.bbsfTranslateService = bbsfTranslateService;
29
+ this.utilityService = utilityService;
30
+ this.pageInfoService = pageInfoService;
31
+ this.requestHandlerService = requestHandlerService;
32
+ //Page requirements
33
+ this.ShowPageContent = false;
34
+ this.ApiUrl = "/api/admin/Provider/";
35
+ //Filter and paging components
36
+ this.ProviderForm = new FormGroup({});
37
+ this.IsFilterLoaded = false;
38
+ this.IsFilterDataLoaded = false;
39
+ this.ProviderPagingResult = [];
40
+ this.clientSidePagingResult = [];
41
+ //Required lists
42
+ this.ProviderTypesFilterList = [];
43
+ this.SortingFilterList = [];
44
+ this.TypesList = [];
45
+ this.LoadedProviders = [];
46
+ this.OrganizationsList = [];
47
+ //Provider attributes
48
+ this.ProviderAttributesOptions = [];
49
+ this.ProviderAttributesCount = 0;
50
+ this.IsAttributesLoaded = false;
51
+ this.showNoAttributesError = false;
52
+ //Add Model Controls
53
+ this.AddProviderForm = new FormGroup({});
54
+ ////Edit Model Controls
55
+ this.EditProviderForm = new FormGroup({});
56
+ this.EditProviderAttributesOptions = [];
57
+ this.EditProviderAttributesCount = 0;
58
+ this.deleteControlLoaded = false;
59
+ //Select Default Providers
60
+ this.DefaultProviderForm = new FormGroup({});
61
+ this.DefaultProviders = [];
62
+ //Test Provider functions
63
+ this.emailProviderType = ProviderType.Emails;
64
+ this.smsProviderType = ProviderType.SMS;
65
+ //Test Email Model controls
66
+ this.testEmailForm = new FormGroup({});
67
+ //Test SMS Model controls
68
+ this.testSMSForm = new FormGroup({});
69
+ this.getAddProviderModel = () => {
70
+ let paramArray = [];
71
+ let ResultModel = this.AddProviderForm.value;
72
+ let AddModel = new ProviderModel();
73
+ AddModel.ProviderName = ResultModel.ProviderName;
74
+ AddModel.Description = ResultModel.Description;
75
+ AddModel.OrganizationID_GUID = ResultModel.OrganizationID_GUID;
76
+ AddModel.ProviderTypeItemID_GUID = this.AddProviderTypeItemID_GUID;
77
+ AddModel.TypeFullName = ResultModel.TypeFullName;
78
+ for (let j = 0; j < this.ProviderAttributesCount; j++) {
79
+ let addAttributeName = ResultModel["AddAttributeName" + j];
80
+ if (addAttributeName == undefined)
81
+ continue;
82
+ let addAttributeValue = ResultModel["AddAttributeValue" + j];
83
+ let addAttributeEncrypted = ResultModel["AddAttributeEncrypted" + j];
84
+ let providerAttr = new ProviderAttributeModel();
85
+ providerAttr.Name = addAttributeName;
86
+ providerAttr.Value = addAttributeValue;
87
+ providerAttr.IsEncrypted = addAttributeEncrypted;
88
+ AddModel.ProviderAttributes.push(providerAttr);
89
+ }
90
+ paramArray.push(AddModel);
91
+ return paramArray;
92
+ };
93
+ this.getAddProviderFunction = (AddModel) => {
94
+ if (AddModel.ProviderAttributes.length > 0) {
95
+ this.showNoAttributesError = false;
96
+ return this.ProviderService.AddProvider(AddModel);
97
+ }
98
+ else {
99
+ this.showNoAttributesError = true;
100
+ return;
101
+ }
102
+ };
103
+ this.getEditProviderModel = () => {
104
+ let paramArray = [];
105
+ let ResultModel = this.EditProviderForm.value;
106
+ let EditModel = new ProviderModel();
107
+ EditModel.ID_GUID = this.ProviderId;
108
+ EditModel.ProviderName = ResultModel.ProviderName; //(##1)
109
+ EditModel.Description = ResultModel.Description;
110
+ EditModel.TypeFullName = ResultModel.TypeFullName;
111
+ EditModel.ProviderTypeItemID_GUID = this.EditProviderTypeItemID_GUID;
112
+ EditModel.OrganizationID_GUID = this.EditProviderOrganizationID_GUID;
113
+ for (let j = 0; j < this.EditProviderAttributesCount; j++) {
114
+ let editAttributeName = ResultModel["EditAttributeName" + j];
115
+ if (editAttributeName == undefined)
116
+ continue;
117
+ let editAttributeValue = ResultModel["EditAttributeValue" + j];
118
+ let editAttributeEncrypted = ResultModel["EditAttributeEncrypted" + j];
119
+ let providerAttr = new ProviderAttributeModel();
120
+ providerAttr.Name = editAttributeName;
121
+ providerAttr.Value = editAttributeValue;
122
+ providerAttr.IsEncrypted = editAttributeEncrypted;
123
+ EditModel.ProviderAttributes.push(providerAttr);
124
+ }
125
+ paramArray.push(EditModel);
126
+ return paramArray;
127
+ };
128
+ this.getEditProviderFunction = (EditModel) => {
129
+ if (EditModel.ProviderAttributes.length > 0) {
130
+ this.showNoAttributesError = false;
131
+ return this.ProviderService.EditProvider(EditModel);
132
+ }
133
+ else {
134
+ this.showNoAttributesError = true;
135
+ return;
136
+ }
137
+ };
138
+ this.deleteProvider = (id) => {
139
+ return this.ProviderService.DeleteProvider(id);
140
+ };
141
+ this.getDefaultProviderModel = () => {
142
+ let paramArray = [];
143
+ let ResultModel = this.DefaultProviderForm.value;
144
+ let defaultProvidersModel = [];
145
+ for (let i = 0; i < this.DefaultProviders.length; i++) {
146
+ let providerID = this.DefaultProviders[i].ID;
147
+ let selectedDefProviderID = ResultModel["providerOption_" + providerID];
148
+ let defProvideModel = {
149
+ ProviderTypeItemID_GUID: providerID,
150
+ SelectedProviderID_GUID: selectedDefProviderID,
151
+ ProviderTypeItemName: "",
152
+ Providers: []
153
+ };
154
+ defaultProvidersModel.push(defProvideModel);
155
+ }
156
+ paramArray.push(defaultProvidersModel);
157
+ return paramArray;
158
+ };
159
+ this.getDefaultProviderFunction = (DefaultProviderModel) => {
160
+ return this.ProviderService.SubmitDefaultProviders(DefaultProviderModel);
161
+ };
162
+ this.getTestEmailModel = () => {
163
+ let paramArray = [];
164
+ let resultModel = this.testEmailForm.value;
165
+ let testEmailModel = new EmailProviderTesterModel();
166
+ testEmailModel.ProviderID = this.testEmailProviderId;
167
+ testEmailModel.ProviderName = this.testEmailProviderName;
168
+ testEmailModel.ToEmail = resultModel.emailTo;
169
+ testEmailModel.Subject = resultModel.emailSubject;
170
+ testEmailModel.Body = resultModel.emailBody;
171
+ paramArray.push(testEmailModel);
172
+ return paramArray;
173
+ };
174
+ this.getTestEmailFunction = (testEmailModel) => {
175
+ return this.ProviderService.TestEmail(testEmailModel);
176
+ };
177
+ this.getTestSMSModel = () => {
178
+ let paramArray = [];
179
+ let resultModel = this.testSMSForm.value;
180
+ let testSMSModel = new SMSProviderTesterModel();
181
+ let internationalNumber = null;
182
+ if (resultModel.smsTo != null) {
183
+ internationalNumber = resultModel.smsTo.internationalNumber;
184
+ internationalNumber = internationalNumber.replace(/\s/g, "");
185
+ }
186
+ testSMSModel.ProviderID = this.testSMSProviderId;
187
+ testSMSModel.ProviderName = this.testSMSProviderName;
188
+ testSMSModel.ToMobileNumber = internationalNumber;
189
+ testSMSModel.Message = resultModel.smsBody;
190
+ paramArray.push(testSMSModel);
191
+ return paramArray;
192
+ };
193
+ this.getTestSMSFunction = (testSMSModel) => {
194
+ return this.ProviderService.TestSMS(testSMSModel);
195
+ };
196
+ }
197
+ async ngOnInit() {
198
+ this.ShowPageContent = true;
199
+ //Page header (breadcrumb and title)
200
+ PageInfoService.PageTitle = this.utilityService.getResourceValue("ServiceProviders");
201
+ PageInfoService.PageBreadcrumbs = [
202
+ { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
203
+ { title: '', path: '', isSeparator: true, isActive: false }
204
+ ];
205
+ this.pageInfoService.calculateTitle();
206
+ this.pageInfoService.calculateBreadcrumbs();
207
+ //on lang changed
208
+ this.bbsfTranslateService.onLangChange.subscribe((event) => {
209
+ this.ShowPageContent = false;
210
+ this.ngOnInit();
211
+ });
212
+ //initialize page
213
+ this.initializePage();
214
+ }
215
+ //Initialize filters and paging
216
+ initializePage() {
217
+ // TextBox init
218
+ this.searchTextBox = new TextBoxOptions();
219
+ this.searchTextBox.Name = "searchTextBox";
220
+ this.searchTextBox.Type = InputType.Text;
221
+ this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
222
+ this.searchTextBox.HideLabel = true;
223
+ this.TextInputFilter = new FilterItem();
224
+ this.TextInputFilter.FormControlName = "searchTextBox";
225
+ this.TextInputFilter.ActionParameterName = "searchText";
226
+ this.TextInputFilter.IsFormControl = true;
227
+ this.TextInputFilter.FilterType = FilterType.TextBox;
228
+ // Provider Types Filter Init
229
+ this.providerTypesFilterOption = new DropdownOptions();
230
+ this.providerTypesFilterOption.Name = "providerTypesFilterOption";
231
+ this.providerTypesFilterOption.LabelKey = "ProviderTypes";
232
+ this.providerTypesFilter = new FilterItem();
233
+ this.providerTypesFilter.FormControlName = "providerTypesFilterOption";
234
+ this.providerTypesFilter.ActionParameterName = "types";
235
+ this.providerTypesFilter.IsFormControl = true;
236
+ this.providerTypesFilter.FilterType = FilterType.DropdownList;
237
+ this.sortingFilterOption = new DropdownOptions();
238
+ this.sortingFilterOption.Name = "sortingFilterOption";
239
+ this.sortingFilterOption.LabelKey = "Sort";
240
+ this.sortingFilterOption.SingleSelection = true;
241
+ this.sortingFilterOption.Placeholder = "";
242
+ this.sortingFilter = new FilterItem();
243
+ this.sortingFilter.FormControlName = "sortingFilterOption";
244
+ this.sortingFilter.ActionParameterName = "sortID";
245
+ this.sortingFilter.IsFormControl = true;
246
+ this.sortingFilter.FilterType = FilterType.DropdownList;
247
+ this.ProviderPaging = new PagingOptions();
248
+ this.ProviderPaging.ActionPostURL = this.ApiUrl + 'GetProvidersByFilter';
249
+ this.ProviderPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
250
+ this.ProviderPaging.DropdownFiltersControlNames = ["providerTypesFilterOption", "sortingFilterOption"];
251
+ this.ProviderPaging.Filters = [this.TextInputFilter, this.providerTypesFilter, this.sortingFilter];
252
+ this.ProviderPaging.ValidationToken = this.authService.authorizationHeaderValue();
253
+ this.ProviderPaging.ResetFilterButtonName = "providerFiltersBtn";
254
+ this.IsFilterLoaded = true;
255
+ }
256
+ //Load filters lists
257
+ loadLists() {
258
+ if (!this.IsFilterDataLoaded) {
259
+ this.ProviderService.Loaddropdowns().subscribe((result) => {
260
+ let DropdownLists = result;
261
+ //this.OrganizationsList = DropdownLists.organizations;
262
+ //this.TypesList = DropdownLists.providerTypes;
263
+ this.ProviderTypesFilterList = DropdownLists.providerTypesFilter;
264
+ this.SortingFilterList = DropdownLists.sortingFilterList;
265
+ let providerTypesElement = this.providerTypesDDL;
266
+ let sortingFilterElement = this.sortingFilterDDL;
267
+ providerTypesElement.UpdateDataSource(this.ProviderTypesFilterList);
268
+ sortingFilterElement.UpdateDataSource(this.SortingFilterList);
269
+ this.IsFilterDataLoaded = true;
270
+ });
271
+ }
272
+ }
273
+ //Paging functions
274
+ setProviderListResult(result) {
275
+ this.ProviderPagingResult = result;
276
+ this.clientSidePagingResult = result;
277
+ this.ShowPageContent = true;
278
+ this.utilityService.stopBlockUI();
279
+ }
280
+ searchClientSide(searchValue) {
281
+ if (searchValue)
282
+ this.clientSidePagingResult = this.clientSidePagingResult.filter(function (item) {
283
+ return item.providerName.toLowerCase().includes(searchValue.toLowerCase());
284
+ });
285
+ else
286
+ this.clientSidePagingResult = this.ProviderPagingResult;
287
+ }
288
+ //AttributesFunction
289
+ setAddProviderAttributes(typeFullName) {
290
+ this.ProviderService.GetProviderAttributes(typeFullName).subscribe((result) => {
291
+ var resultObj = result;
292
+ //Set Provider type id on type change
293
+ this.LoadedProviders = resultObj.loadedProviders;
294
+ let selectedProviderType = this.LoadedProviders.find(obj => {
295
+ return obj.fullName === typeFullName;
296
+ });
297
+ this.AddProviderTypeItemID_GUID = selectedProviderType.providerTypeID_GUID;
298
+ //Set attributes and count
299
+ let attributes = resultObj.model;
300
+ this.ProviderAttributesOptions = [];
301
+ let data = this.getProviderAttributesOptions(attributes, true);
302
+ this.ProviderAttributesOptions = data[0];
303
+ this.ProviderAttributesCount = data[1];
304
+ this.IsAttributesLoaded = true;
305
+ });
306
+ }
307
+ setEditProviderAttributes(typeFullName) {
308
+ this.ProviderService.GetProviderAttributes(typeFullName).subscribe((result) => {
309
+ var resultObj = result;
310
+ //Set Provider type id on type change
311
+ this.LoadedProviders = resultObj.loadedProviders;
312
+ let selectedProviderType = this.LoadedProviders.find(obj => {
313
+ return obj.fullName === typeFullName;
314
+ });
315
+ this.EditProviderTypeItemID_GUID = selectedProviderType.providerTypeID_GUID;
316
+ //Set attributes and count
317
+ let attributes = resultObj.model;
318
+ this.EditProviderAttributesOptions = [];
319
+ let data = this.getProviderAttributesOptions(attributes, false);
320
+ this.EditProviderAttributesOptions = data[0];
321
+ this.EditProviderAttributesCount = data[1];
322
+ });
323
+ }
324
+ getProviderAttributesOptions(providerAttributes, isAdd) {
325
+ let attributesOptions = [];
326
+ let attributesCount = 0;
327
+ let actionIndicate = isAdd ? "Add" : "Edit";
328
+ for (let i = 0; i < providerAttributes.length; i++) {
329
+ let objectAttributeOptions = [];
330
+ let isEncrypted = providerAttributes[i].isEncrypted;
331
+ let AttributeName = new TextBoxOptions();
332
+ AttributeName.Name = actionIndicate + "AttributeName" + i;
333
+ AttributeName.HideLabel = true;
334
+ AttributeName.Type = InputType.Text;
335
+ AttributeName.Value = providerAttributes[i].name;
336
+ AttributeName.MaxLength = 100;
337
+ let AttributeValue = new TextBoxOptions();
338
+ AttributeValue.Name = actionIndicate + "AttributeValue" + i;
339
+ AttributeValue.HideLabel = true;
340
+ AttributeValue.Type = isEncrypted ? InputType.Password : InputType.Text;
341
+ AttributeValue.Value = providerAttributes[i].value;
342
+ AttributeValue.RemoveDefaultPasswordValidation = true;
343
+ AttributeValue.MaxLength = 100;
344
+ let AttributeEncrypted = new CheckBoxOptions();
345
+ AttributeEncrypted.Name = actionIndicate + "AttributeEncrypted" + i;
346
+ AttributeEncrypted.Value = providerAttributes[i].isEncrypted;
347
+ objectAttributeOptions.push(AttributeName, AttributeValue, AttributeEncrypted);
348
+ attributesOptions.push(objectAttributeOptions);
349
+ attributesCount += 1;
350
+ }
351
+ return [attributesOptions, attributesCount];
352
+ }
353
+ deleteAttribute(deletedAttribute, isAdd) {
354
+ if (isAdd) {
355
+ let deletedAttrIndex = this.ProviderAttributesOptions.indexOf(deletedAttribute);
356
+ if (deletedAttrIndex !== -1) {
357
+ this.ProviderAttributesOptions.splice(deletedAttrIndex, 1);
358
+ for (var i = 0; i < deletedAttribute.length; i++) {
359
+ this.AddProviderForm.removeControl(deletedAttribute[i].Name);
360
+ }
361
+ }
362
+ }
363
+ else {
364
+ let deletedAttrIndex = this.EditProviderAttributesOptions.indexOf(deletedAttribute);
365
+ if (deletedAttrIndex !== -1) {
366
+ this.EditProviderAttributesOptions.splice(deletedAttrIndex, 1);
367
+ for (var i = 0; i < deletedAttribute.length; i++) {
368
+ this.EditProviderForm.removeControl(deletedAttribute[i].Name);
369
+ }
370
+ }
371
+ }
372
+ }
373
+ encryptedChange(isChecked, option, isAdd) {
374
+ let valueAttributeIndicator = isAdd ? "AddAttributeValue" : "EditAttributeValue";
375
+ let realtedValueOption = option.find(obj => {
376
+ return obj.Name.startsWith(valueAttributeIndicator);
377
+ });
378
+ if (isChecked)
379
+ realtedValueOption.Type = InputType.Password;
380
+ else
381
+ realtedValueOption.Type = InputType.Text;
382
+ }
383
+ //Add provider
384
+ showAddProviderModal(addProviderModal) {
385
+ this.showNoAttributesError = false;
386
+ this.utilityService.startBlockUI();
387
+ this.ProviderService.loadAddDropdowns().subscribe((result) => {
388
+ let resultObj = result;
389
+ this.OrganizationsList = resultObj.organizations;
390
+ this.TypesList = resultObj.providerTypes;
391
+ this.ProviderAttributesOptions = [];
392
+ this.ProviderAttributesCount = 0;
393
+ this.IsAttributesLoaded = false;
394
+ this.AddProviderForm = new FormGroup({});
395
+ this.AddProviderFormOptions = new FormOptions();
396
+ this.AddProviderFormOptions.FormGroup = this.AddProviderForm;
397
+ this.AddProviderFormOptions.GetModelFunction = this.getAddProviderModel;
398
+ this.AddProviderFormOptions.ServiceSubmitFunction = this.getAddProviderFunction;
399
+ this.AddProviderFormOptions.PagingReference = this.pagingElement;
400
+ this.AddName = new TextBoxOptions();
401
+ this.AddName.Name = "ProviderName";
402
+ this.AddName.LabelKey = "ProviderName";
403
+ this.AddName.Type = InputType.Text;
404
+ this.AddName.Value = null;
405
+ this.AddName.IsRequired = true;
406
+ this.AddName.MaxLength = 100;
407
+ this.AddDescription = new TextAreaOptions();
408
+ this.AddDescription.Name = "Description";
409
+ this.AddDescription.LabelKey = "ProviderDescription";
410
+ this.AddDescription.Value = null;
411
+ this.AddDescription.MaxLength = 250;
412
+ this.AddOrganizationOptions = new DropdownOptions();
413
+ this.AddOrganizationOptions.Name = "OrganizationID_GUID";
414
+ this.AddOrganizationOptions.LabelKey = "Organization";
415
+ this.AddOrganizationOptions.DataSource = this.OrganizationsList;
416
+ this.AddOrganizationOptions.SingleSelection = true;
417
+ this.AddOrganizationOptions.AllowSearchFilter = true;
418
+ this.AddOrganizationOptions.Placeholder = "";
419
+ this.AddOrganizationOptions.IsRequired = true;
420
+ this.AddTypeOptions = new DropdownOptions();
421
+ this.AddTypeOptions.Name = "TypeFullName";
422
+ this.AddTypeOptions.LabelKey = "ProviderType";
423
+ this.AddTypeOptions.DataSource = this.TypesList;
424
+ this.AddTypeOptions.SingleSelection = true;
425
+ this.AddTypeOptions.AllowSearchFilter = true;
426
+ this.AddTypeOptions.Placeholder = "";
427
+ this.AddTypeOptions.IsRequired = true;
428
+ this.modalService.open(addProviderModal);
429
+ this.utilityService.stopBlockUI();
430
+ });
431
+ }
432
+ //Edit provider
433
+ showEditProviderModal(providerID, editProviderModal) {
434
+ this.showNoAttributesError = false;
435
+ this.ProviderId = providerID;
436
+ this.ProviderService.GetEditProviderData(providerID).subscribe((result) => {
437
+ let resultObj = result;
438
+ let provider = resultObj.model;
439
+ let lists = resultObj.lists;
440
+ this.TypesList = lists.providerTypes;
441
+ this.EditProviderForm = new FormGroup({});
442
+ this.EditProviderFormOptions = new FormOptions();
443
+ this.EditProviderFormOptions.FormGroup = this.EditProviderForm;
444
+ this.EditProviderFormOptions.GetModelFunction = this.getEditProviderModel;
445
+ this.EditProviderFormOptions.ServiceSubmitFunction = this.getEditProviderFunction;
446
+ this.EditProviderFormOptions.PagingReference = this.pagingElement;
447
+ this.EditProviderFormOptions.PagingActionMode = PagingActionMode.Update;
448
+ this.EditName = new TextBoxOptions();
449
+ this.EditName.Name = "ProviderName";
450
+ this.EditName.LabelKey = "ProviderName";
451
+ this.EditName.Type = InputType.Text;
452
+ this.EditName.IsRequired = true;
453
+ this.EditName.Value = provider.providerName;
454
+ this.EditName.MaxLength = 100;
455
+ this.EditDescription = new TextAreaOptions();
456
+ this.EditDescription.Name = "Description";
457
+ this.EditDescription.LabelKey = "Description";
458
+ this.EditDescription.Value = provider.description;
459
+ this.EditDescription.MaxLength = 250;
460
+ this.EditTypeOptions = new DropdownOptions();
461
+ this.EditTypeOptions.Name = "TypeFullName";
462
+ this.EditTypeOptions.LabelKey = "ProviderType";
463
+ this.EditTypeOptions.DataSource = this.TypesList;
464
+ this.EditTypeOptions.SingleSelection = true;
465
+ this.EditTypeOptions.AllowSearchFilter = true;
466
+ this.EditTypeOptions.Placeholder = "";
467
+ this.EditTypeOptions.IsRequired = true;
468
+ this.EditTypeOptions.SelectedItems = provider.typeFullName;
469
+ this.EditProviderTypeItemID_GUID = provider.providerTypeItemID_GUID?.toLowerCase();
470
+ this.EditProviderOrganizationID_GUID = provider.organizationID_GUID?.toLowerCase();
471
+ let editAttributesResult = this.getProviderAttributesOptions(provider.providerAttributes, false);
472
+ this.EditProviderAttributesOptions = editAttributesResult[0];
473
+ this.EditProviderAttributesCount = editAttributesResult[1];
474
+ this.modalService.open(editProviderModal);
475
+ });
476
+ }
477
+ //Delete provider
478
+ showDeleteProviderModal(providerID) {
479
+ this.deleteProviderId = providerID;
480
+ //array sent to service function
481
+ let paramArray = [];
482
+ paramArray.push(this.deleteProviderId);
483
+ this.DeleteConfirmationOptions = new ConfirmationModalOptions();
484
+ this.DeleteConfirmationOptions.ServiceSubmitFunction = this.deleteProvider;
485
+ this.DeleteConfirmationOptions.ServiceSubmitModel = paramArray;
486
+ this.DeleteConfirmationOptions.PagingReference = this.pagingElement;
487
+ this.deleteControlLoaded = true;
488
+ setTimeout(() => {
489
+ this.ConfirmationModalControl.showModal();
490
+ }, 200);
491
+ }
492
+ //Default provider
493
+ showDefaultProviderModal(defaultProviderModal) {
494
+ this.DefaultProviders = [];
495
+ this.ProviderService.GetDefaultProviders().subscribe((result) => {
496
+ let list = result;
497
+ this.DefaultProviderForm = new FormGroup({});
498
+ this.DefaultProviderFormOptions = new FormOptions();
499
+ this.DefaultProviderFormOptions.FormGroup = this.DefaultProviderForm;
500
+ this.DefaultProviderFormOptions.GetModelFunction = this.getDefaultProviderModel;
501
+ this.DefaultProviderFormOptions.ServiceSubmitFunction = this.getDefaultProviderFunction;
502
+ this.DefaultProviderFormOptions.PagingReference = this.pagingElement;
503
+ for (let i = 0; i < list.length; i++) {
504
+ let provider = list[i];
505
+ let ProviderOption = new RadioButtonOptions();
506
+ ProviderOption.Name = "providerOption_" + provider.providerTypeItemID_GUID;
507
+ ProviderOption.HideLabel = true;
508
+ ProviderOption.IsRequired = true;
509
+ ProviderOption.ViewType = ControlLayout.Horizontal;
510
+ let items = [];
511
+ for (let j = 0; j < provider.providers.length; j++) {
512
+ let providerItem = provider.providers[j];
513
+ let item = new RadioButtonItem();
514
+ item.Text = providerItem.text;
515
+ item.Value = providerItem.value;
516
+ items.push(item);
517
+ ProviderOption.Items = items;
518
+ }
519
+ let selectedProvider = provider.providers.filter((item) => { return item.selected == true; })[0];
520
+ ProviderOption.Value = {
521
+ Text: selectedProvider.text,
522
+ Value: selectedProvider.value
523
+ };
524
+ let defProvider = {
525
+ Name: provider.providerTypeItemName,
526
+ ID: provider.providerTypeItemID_GUID,
527
+ ProvidersOption: ProviderOption
528
+ };
529
+ this.DefaultProviders.push(defProvider);
530
+ }
531
+ this.modalService.open(defaultProviderModal);
532
+ });
533
+ }
534
+ //Generate provider json
535
+ generateProviderJson() {
536
+ this.ProviderService.GenerateProviderJson().subscribe((result) => {
537
+ let FileDTO = result;
538
+ const file = new Blob([FileDTO], { type: "application/json" });
539
+ let fileName = this.utilityService.getResourceValue("Providers") + ".json";
540
+ saveAs(file, fileName);
541
+ window.location.reload();
542
+ });
543
+ }
544
+ //Test Email functions
545
+ showTestEmailModal(providerID, providerName, testEMailModal) {
546
+ this.utilityService.startBlockUI();
547
+ this.testEmailProviderId = providerID;
548
+ this.testEmailProviderName = providerName;
549
+ this.testEmailForm = new FormGroup({});
550
+ this.testEmailFormOptions = new FormOptions();
551
+ this.testEmailFormOptions.FormGroup = this.testEmailForm;
552
+ this.testEmailFormOptions.GetModelFunction = this.getTestEmailModel;
553
+ this.testEmailFormOptions.ServiceSubmitFunction = this.getTestEmailFunction;
554
+ this.emailTo = new TextBoxOptions();
555
+ this.emailTo.Name = "emailTo";
556
+ this.emailTo.LabelKey = "To";
557
+ this.emailTo.Type = InputType.Email;
558
+ this.emailTo.IsRequired = true;
559
+ this.emailSubject = new TextBoxOptions();
560
+ this.emailSubject.Name = "emailSubject";
561
+ this.emailSubject.LabelKey = "EmailSubject";
562
+ this.emailSubject.Type = InputType.Text;
563
+ this.emailSubject.IsRequired = true;
564
+ this.emailBody = new TextAreaOptions();
565
+ this.emailBody.Name = "emailBody";
566
+ this.emailBody.LabelKey = "EmailBody";
567
+ this.emailBody.IsRequired = true;
568
+ this.modalService.open(testEMailModal);
569
+ this.utilityService.stopBlockUI();
570
+ }
571
+ //Test SMS functions
572
+ showTestSMSModal(providerID, providerName, testSMSModal) {
573
+ this.utilityService.startBlockUI();
574
+ this.testSMSProviderId = providerID;
575
+ this.testSMSProviderName = providerName;
576
+ this.testSMSForm = new FormGroup({});
577
+ this.testSMSFormOptions = new FormOptions();
578
+ this.testSMSFormOptions.FormGroup = this.testSMSForm;
579
+ this.testSMSFormOptions.GetModelFunction = this.getTestSMSModel;
580
+ this.testSMSFormOptions.ServiceSubmitFunction = this.getTestSMSFunction;
581
+ this.smsTo = new PhoneOptions();
582
+ this.smsTo.Name = "smsTo";
583
+ this.smsTo.LabelKey = "To";
584
+ this.smsTo.IsRequired = true;
585
+ this.smsBody = new TextAreaOptions();
586
+ this.smsBody.Name = "smsBody";
587
+ this.smsBody.LabelKey = "SMS";
588
+ this.smsBody.IsRequired = true;
589
+ this.modalService.open(testSMSModal);
590
+ this.utilityService.stopBlockUI();
591
+ }
592
+ //On destroy
593
+ ngOnDestroy() {
594
+ this.requestHandlerService.destroyHandler();
595
+ }
596
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ProviderComponent, deps: [{ token: i1.ProviderService }, { token: i2.NgbModal }, { token: i3.AuthService }, { token: i3.BBSFTranslateService }, { token: i3.UtilityService }, { token: i4.PageInfoService }, { token: i3.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
597
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: ProviderComponent, selector: "lib-provider", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ProviderPagingViewElement"], descendants: true }, { propertyName: "providerTypesDDL", first: true, predicate: ["providerTypesDDL"], descendants: true }, { propertyName: "sortingFilterDDL", first: true, predicate: ["sortingFilterDDL"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div *ngIf=\"ShowPageContent\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ProviderForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ProviderForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"ProviderForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #providerTypesDDL [options]=\"providerTypesFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #sortingFilterDDL [options]=\"sortingFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"providerFiltersBtn\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button href=\"javascript:;\" (click)=\"generateProviderJson()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\">\r\n <i class=\"fas fa-file-export me-1\"></i>\r\n {{utilityService.getResourceValue(\"GenerateProviderJson\")}}\r\n </button>\r\n\r\n <button type=\"button\" title='utilityService.getResourceValue(\"SelectDefaultProvider\")' class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showDefaultProviderModal(DefaultProviderModal)\">\r\n <i class=\"fas fa-hand-pointer me-1\"></i>\r\n {{utilityService.getResourceValue(\"SelectDefaultProvider\")}}\r\n </button>\r\n <button type=\"button\" title='utilityService.getResourceValue(\"Add\")' class=\"btn btn-sm btn-primary\" (click)=\"showAddProviderModal(AddProviderModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button> <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Default\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" *ngFor=\"let providerGroup of clientSidePagingResult\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let provider of providerGroup.providers\">\r\n <td>\r\n <div class=\"text-dark\">{{provider.providerName}}</div>\r\n <div>{{provider.description}}</div>\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-primary\" *ngIf=\"provider.isRunning;else other_content\">\r\n {{utilityService.getResourceValue(\"Running\")}}\r\n </span>\r\n <ng-template #other_content>\r\n <span class=\"badge badge-light-danger\">\r\n {{utilityService.getResourceValue(\"Stopped\")}}\r\n </span>\r\n </ng-template>\r\n\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-success fw-bolder\" *ngIf=\"provider.isDefault;else default_no\">\r\n {{utilityService.getResourceValue(\"Yes\")}}\r\n </span>\r\n <ng-template #default_no>\r\n <span class=\"badge badge-light fw-bolder\">\r\n {{utilityService.getResourceValue(\"No\")}}\r\n </span>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditProviderModal(provider.iD_GUID, EditProviderModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteProviderModal(provider.iD_GUID)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isEMail && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestEmailModal(provider.iD_GUID,provider.providerName,TestEmailModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestEmail\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isSMS && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestSMSModal(provider.iD_GUID,provider.providerName,TestSMSModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestSMS\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"providerGroup.providers.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tbody *ngIf=\"clientSidePagingResult.length == 0\">\r\n <tr>\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProviderListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ProviderPaging\" [group]=\"ProviderForm\" #ProviderPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!--end::Providers list-->\r\n</div>\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddProviderFormOptions\">\r\n\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextArea [options]=\"AddDescription\" [group]=\"AddProviderForm\">\r\n </BBSF-TextArea>\r\n <BBSF-DropdownList [options]=\"AddOrganizationOptions\" [group]=\"AddProviderForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddProviderForm\" (OnChange)=\"setAddProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n <div *ngIf=\"IsAttributesLoaded\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of ProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"AddProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseProviderModal id=\"CloseAddProviderModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Edit model -->\r\n<ng-template #EditProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditName\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescription\" [group]=\"EditProviderForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditTypeOptions\" [group]=\"EditProviderForm\" (OnChange)=\"setEditProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of EditProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"EditProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"EditProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditProviderModal id=\"CloseEditProviderModal\" type=\"button\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Default Provider Modal-->\r\n<ng-template #DefaultProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SelectDefaultProvider\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"DefaultProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let defProvider of DefaultProviders;let i=index;\">\r\n <h3 class=\"text-muted mb-4 fw-boldest\">{{defProvider.Name}}</h3>\r\n <input type=\"hidden\" value=\"{{defProvider.ID}}\" />\r\n <BBSF-RadioButton [options]=\"defProvider.ProvidersOption\" [group]=\"DefaultProviderForm\"></BBSF-RadioButton>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDefaultProviderModal id=\"CloseDefaultProviderModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test Email Modal-->\r\n<ng-template #TestEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestEmailServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testEmailFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailTo\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailSubject\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"emailBody\" [group]=\"testEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test SMS Modal-->\r\n<ng-template #TestSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestSMSServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testSMSFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"smsTo\" [group]=\"testSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"smsBody\" [group]=\"testSMSForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i6.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange", "OnBlur"] }, { kind: "component", type: i8.TextAreaComponent, selector: "BBSF-TextArea", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { kind: "component", type: i8.PhoneComponent, selector: "BBSF-Phone", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.RadioButtonComponent, selector: "BBSF-RadioButton", inputs: ["group", "options"], outputs: ["OnChange"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["OnChange"] }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i2.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i2.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i2.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i2.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i11.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
598
+ }
599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: ProviderComponent, decorators: [{
600
+ type: Component,
601
+ args: [{ selector: 'lib-provider', template: "<block-ui></block-ui>\r\n<!-- Page Content -->\r\n<div class=\"container-fluid\">\r\n <div *ngIf=\"ShowPageContent\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"ProviderForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ProviderForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{'display': ShowPageContent==true?'block':'none'}\">\r\n <button (click)=\"loadLists()\" ngbDropdownToggle href=\"javascript:;\" type=\"button\" class=\"btn btn-sm btn-light-primary me-3\" id=\"FiltersDropdown\" title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{utilityService.getResourceValue(\"Filter\")}}\r\n </button>\r\n <div *ngIf=\"IsFilterLoaded\" ngbDropdownMenu aria-labelledby=\"FiltersDropdown\" class=\" filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 \">\r\n <form [formGroup]=\"ProviderForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #providerTypesDDL [options]=\"providerTypesFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-12\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #sortingFilterDDL [options]=\"sortingFilterOption\" [group]=\"ProviderForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"providerFiltersBtn\">\r\n {{utilityService.getResourceValue(\"Reset\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <button href=\"javascript:;\" (click)=\"generateProviderJson()\" class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\">\r\n <i class=\"fas fa-file-export me-1\"></i>\r\n {{utilityService.getResourceValue(\"GenerateProviderJson\")}}\r\n </button>\r\n\r\n <button type=\"button\" title='utilityService.getResourceValue(\"SelectDefaultProvider\")' class=\"btn btn-sm btn-light-primary me-3 \" (click)=\"showDefaultProviderModal(DefaultProviderModal)\">\r\n <i class=\"fas fa-hand-pointer me-1\"></i>\r\n {{utilityService.getResourceValue(\"SelectDefaultProvider\")}}\r\n </button>\r\n <button type=\"button\" title='utilityService.getResourceValue(\"Add\")' class=\"btn btn-sm btn-primary\" (click)=\"showAddProviderModal(AddProviderModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button> <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <!-- end::Header -->\r\n <!-- begin::Body -->\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Default\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" *ngFor=\"let providerGroup of clientSidePagingResult\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let provider of providerGroup.providers\">\r\n <td>\r\n <div class=\"text-dark\">{{provider.providerName}}</div>\r\n <div>{{provider.description}}</div>\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-primary\" *ngIf=\"provider.isRunning;else other_content\">\r\n {{utilityService.getResourceValue(\"Running\")}}\r\n </span>\r\n <ng-template #other_content>\r\n <span class=\"badge badge-light-danger\">\r\n {{utilityService.getResourceValue(\"Stopped\")}}\r\n </span>\r\n </ng-template>\r\n\r\n </td>\r\n <td>\r\n <span class=\"badge badge-light-success fw-bolder\" *ngIf=\"provider.isDefault;else default_no\">\r\n {{utilityService.getResourceValue(\"Yes\")}}\r\n </span>\r\n <ng-template #default_no>\r\n <span class=\"badge badge-light fw-bolder\">\r\n {{utilityService.getResourceValue(\"No\")}}\r\n </span>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditProviderModal(provider.iD_GUID, EditProviderModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showDeleteProviderModal(provider.iD_GUID)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isEMail && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestEmailModal(provider.iD_GUID,provider.providerName,TestEmailModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestEmail\")}}</span>\r\n </a>\r\n <a *ngIf=\"provider.isSMS && provider.isRunning\" ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showTestSMSModal(provider.iD_GUID,provider.providerName,TestSMSModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"TestSMS\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"providerGroup.providers.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tbody *ngIf=\"clientSidePagingResult.length == 0\">\r\n <tr>\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setProviderListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ProviderPaging\" [group]=\"ProviderForm\" #ProviderPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n <!--end::Providers list-->\r\n</div>\r\n\r\n<!-- Add Modal -->\r\n<ng-template #AddProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddProviderFormOptions\">\r\n\r\n <BBSF-TextBox [options]=\"AddName\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextArea [options]=\"AddDescription\" [group]=\"AddProviderForm\">\r\n </BBSF-TextArea>\r\n <BBSF-DropdownList [options]=\"AddOrganizationOptions\" [group]=\"AddProviderForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddTypeOptions\" [group]=\"AddProviderForm\" (OnChange)=\"setAddProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n <div *ngIf=\"IsAttributesLoaded\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of ProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"AddProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"ProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseProviderModal id=\"CloseAddProviderModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n\r\n<!-- Edit model -->\r\n<ng-template #EditProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"Provider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditName\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"EditDescription\" [group]=\"EditProviderForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditTypeOptions\" [group]=\"EditProviderForm\" (OnChange)=\"setEditProviderAttributes($event)\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ProviderAttributeValue\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Encrypted\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of EditProviderAttributesOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditProviderForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-CheckBox [options]=\"option[2]\" [group]=\"EditProviderForm\" (OnChange)=\"encryptedChange($event,option,true)\">\r\n </BBSF-CheckBox>\r\n </td>\r\n\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteAttribute(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"EditProviderAttributesOptions.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td *ngIf=\"showNoAttributesError\" colspan=\"4\" class=\"text-danger\">\r\n {{utilityService.getResourceValue(\"AtLeastOneItemRequired\")}}\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditProviderModal id=\"CloseEditProviderModal\" type=\"button\"\r\n data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"DeleteConfirmationOptions\" id=\"ConfirmationModalControl\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n<!--Default Provider Modal-->\r\n<ng-template #DefaultProviderModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"SelectDefaultProvider\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"DefaultProviderFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let defProvider of DefaultProviders;let i=index;\">\r\n <h3 class=\"text-muted mb-4 fw-boldest\">{{defProvider.Name}}</h3>\r\n <input type=\"hidden\" value=\"{{defProvider.ID}}\" />\r\n <BBSF-RadioButton [options]=\"defProvider.ProvidersOption\" [group]=\"DefaultProviderForm\"></BBSF-RadioButton>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDefaultProviderModal id=\"CloseDefaultProviderModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test Email Modal-->\r\n<ng-template #TestEmailModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestEmailServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testEmailFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailTo\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"emailSubject\" [group]=\"testEmailForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"emailBody\" [group]=\"testEmailForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n<!--Test SMS Modal-->\r\n<ng-template #TestSMSModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"TestSMSServiceProvider\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"testSMSFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Phone [options]=\"smsTo\" [group]=\"testSMSForm\">\r\n </BBSF-Phone>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextArea [options]=\"smsBody\" [group]=\"testSMSForm\">\r\n </BBSF-TextArea>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\" class=\"btn btn-light me-3 btn-sm\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"Test\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n</ng-template>\r\n\r\n" }]
602
+ }], ctorParameters: () => [{ type: i1.ProviderService }, { type: i2.NgbModal }, { type: i3.AuthService }, { type: i3.BBSFTranslateService }, { type: i3.UtilityService }, { type: i4.PageInfoService }, { type: i3.RequestHandlerService }], propDecorators: { pagingElement: [{
603
+ type: ViewChild,
604
+ args: ['ProviderPagingViewElement', { static: false }]
605
+ }], providerTypesDDL: [{
606
+ type: ViewChild,
607
+ args: ['providerTypesDDL', { static: false }]
608
+ }], sortingFilterDDL: [{
609
+ type: ViewChild,
610
+ args: ['sortingFilterDDL', { static: false }]
611
+ }], ConfirmationModalControl: [{
612
+ type: ViewChild,
613
+ args: ['ConfirmationModalControl', { static: false }]
614
+ }] } });
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9wcm92aWRlcnMvcHJvdmlkZXIvcHJvdmlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0IsRUFBcUIsWUFBWSxFQUErQyxNQUFNLHlCQUF5QixDQUFDO0FBRXpWLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNqRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUVuRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDdkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7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RUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBbUNVLHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2hlY2tCb3hPcHRpb25zLCBDb250cm9sTGF5b3V0LCBEcm9wZG93bk9wdGlvbnMsIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIElucHV0VHlwZSwgUGFnaW5nT3B0aW9ucywgUmFkaW9CdXR0b25PcHRpb25zLCBUZXh0QXJlYU9wdGlvbnMsIFRleHRCb3hPcHRpb25zLCBSYWRpb0J1dHRvbkl0ZW0sIEZvcm1PcHRpb25zLCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIFBhZ2luZ0FjdGlvbk1vZGUsIEh0bWxFZGl0b3JPcHRpb25zLCBQaG9uZU9wdGlvbnMsIFBhZ2luZ0NvbXBvbmVudCwgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9wcm92aWRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvdmlkZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvUHJvdmlkZXJNb2RlbCc7XHJcbmltcG9ydCB7IFByb3ZpZGVyQXR0cmlidXRlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1Byb3ZpZGVyTW9kZWxzL1Byb3ZpZGVyQXR0cmlidXRlTW9kZWwnO1xyXG5pbXBvcnQgeyBEZWZhdWx0UHJvdmlkZXJNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUHJvdmlkZXJNb2RlbHMvRGVmYXVsdFByb3ZpZGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xyXG5pbXBvcnQgeyBQcm92aWRlclR5cGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvRW51bXMvUHJvdmlkZXJUeXBlJztcclxuaW1wb3J0IHsgRW1haWxQcm92aWRlclRlc3Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9FbWFpbFByb3ZpZGVyVGVzdGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBTTVNQcm92aWRlclRlc3Rlck1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Qcm92aWRlck1vZGVscy9TTVNQcm92aWRlclRlc3Rlck1vZGVsJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1wcm92aWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb3ZpZGVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvdmlkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBTaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vUHJvdmlkZXIvXCI7XHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgcHJvdmlkZXJUeXBlc0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBzb3J0aW5nRmlsdGVyT3B0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgc29ydGluZ0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBJc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzRmlsdGVyRGF0YUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFByb3ZpZGVyUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIFByb3ZpZGVyUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGNsaWVudFNpZGVQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgQFZpZXdDaGlsZCgnUHJvdmlkZXJQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9SZXF1aXJlZCBsaXN0c1xyXG4gIFByb3ZpZGVyVHlwZXNGaWx0ZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFNvcnRpbmdGaWx0ZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFR5cGVzTGlzdDogYW55W10gPSBbXTtcclxuICBMb2FkZWRQcm92aWRlcnM6IGFueVtdID0gW107XHJcbiAgT3JnYW5pemF0aW9uc0xpc3QgPSBbXTtcclxuICBAVmlld0NoaWxkKCdwcm92aWRlclR5cGVzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIHByb3ZpZGVyVHlwZXNEREw6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc29ydGluZ0ZpbHRlckRETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzb3J0aW5nRmlsdGVyRERMOiBFbGVtZW50UmVmO1xyXG5cclxuXHJcbiAgLy9Qcm92aWRlciBhdHRyaWJ1dGVzXHJcbiAgUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICBQcm92aWRlckF0dHJpYnV0ZXNDb3VudDogbnVtYmVyID0gMDtcclxuICBJc0F0dHJpYnV0ZXNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93Tm9BdHRyaWJ1dGVzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBBZGRQcm92aWRlckZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIEFkZE5hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZERlc2NyaXB0aW9uOiBUZXh0QXJlYU9wdGlvbnM7XHJcbiAgQWRkT3JnYW5pemF0aW9uT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFR5cGVPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkUHJvdmlkZXJUeXBlSXRlbUlEX0dVSUQ6IHN0cmluZztcclxuXHJcblxyXG4gIC8vLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRQcm92aWRlckZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIEVkaXROYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0RGVzY3JpcHRpb246IFRleHRBcmVhT3B0aW9ucztcclxuICBFZGl0VHlwZU9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0UHJvdmlkZXJUeXBlSXRlbUlEX0dVSUQ6IHN0cmluZztcclxuICBFZGl0UHJvdmlkZXJPcmdhbml6YXRpb25JRF9HVUlEOiBzdHJpbmc7XHJcbiAgRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM6IGFueVtdID0gW107XHJcbiAgRWRpdFByb3ZpZGVyQXR0cmlidXRlc0NvdW50OiBudW1iZXIgPSAwO1xyXG4gIFByb3ZpZGVySWQ6IHN0cmluZztcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlUHJvdmlkZXJJZDogc3RyaW5nO1xyXG4gIERlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIC8vU2VsZWN0IERlZmF1bHQgUHJvdmlkZXJzXHJcbiAgRGVmYXVsdFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIERlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zOiBGb3JtT3B0aW9uc1xyXG4gIERlZmF1bHRQcm92aWRlcnM6IGFueVtdID0gW107XHJcbiAgRGVmYXVsdFByb3ZpZGVyc1JhZGlvQnRuT3B0aW9uczogUmFkaW9CdXR0b25PcHRpb25zW107XHJcblxyXG4gIC8vVGVzdCBQcm92aWRlciBmdW5jdGlvbnNcclxuICBlbWFpbFByb3ZpZGVyVHlwZSA9IFByb3ZpZGVyVHlwZS5FbWFpbHM7XHJcbiAgc21zUHJvdmlkZXJUeXBlID0gUHJvdmlkZXJUeXBlLlNNUztcclxuICAvL1Rlc3QgRW1haWwgTW9kZWwgY29udHJvbHNcclxuICB0ZXN0RW1haWxGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgdGVzdEVtYWlsRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgZW1haWxUbzogVGV4dEJveE9wdGlvbnM7XHJcbiAgZW1haWxTdWJqZWN0OiBUZXh0Qm94T3B0aW9ucztcclxuICBlbWFpbEJvZHk6IFRleHRBcmVhT3B0aW9ucztcclxuICB0ZXN0RW1haWxQcm92aWRlcklkOiBzdHJpbmc7XHJcbiAgdGVzdEVtYWlsUHJvdmlkZXJOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8vVGVzdCBTTVMgTW9kZWwgY29udHJvbHNcclxuICB0ZXN0U01TRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHRlc3RTTVNGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICBzbXNUbzogUGhvbmVPcHRpb25zO1xyXG4gIHNtc0JvZHk6IFRleHRBcmVhT3B0aW9ucztcclxuICB0ZXN0U01TUHJvdmlkZXJJZDogc3RyaW5nO1xyXG4gIHRlc3RTTVNQcm92aWRlck5hbWU6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3JcclxuICAgIChcclxuICAgICAgcHJpdmF0ZSBQcm92aWRlclNlcnZpY2U6IFByb3ZpZGVyU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2VcclxuICAgICkgeyB9XHJcblxyXG5cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICAvL1BhZ2UgaGVhZGVyIChicmVhZGNydW1iIGFuZCB0aXRsZSlcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZXJ2aWNlUHJvdmlkZXJzXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG5cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcbiAgICAvL29uIGxhbmcgY2hhbmdlZFxyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG5cclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuICAvL0luaXRpYWxpemUgZmlsdGVycyBhbmQgcGFnaW5nXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lk5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG5cclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgLy8gUHJvdmlkZXIgVHlwZXMgRmlsdGVyIEluaXRcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbi5OYW1lID0gXCJwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uXCJcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlck9wdGlvbi5MYWJlbEtleSA9IFwiUHJvdmlkZXJUeXBlc1wiXHJcblxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlci5Gb3JtQ29udHJvbE5hbWUgPSBcInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIlxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInR5cGVzXCJcclxuICAgIHRoaXMucHJvdmlkZXJUeXBlc0ZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uTmFtZSA9IFwic29ydGluZ0ZpbHRlck9wdGlvblwiXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uTGFiZWxLZXkgPSBcIlNvcnRcIlxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyT3B0aW9uLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXJPcHRpb24uUGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzb3J0aW5nRmlsdGVyT3B0aW9uXCJcclxuICAgIHRoaXMuc29ydGluZ0ZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzb3J0SURcIlxyXG4gICAgdGhpcy5zb3J0aW5nRmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLnNvcnRpbmdGaWx0ZXIuRmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuXHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuQWN0aW9uUG9zdFVSTCA9IHRoaXMuQXBpVXJsICsgJ0dldFByb3ZpZGVyc0J5RmlsdGVyJztcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdO1xyXG4gICAgdGhpcy5Qcm92aWRlclBhZ2luZy5Ecm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJwcm92aWRlclR5cGVzRmlsdGVyT3B0aW9uXCIsIFwic29ydGluZ0ZpbHRlck9wdGlvblwiXTtcclxuICAgIHRoaXMuUHJvdmlkZXJQYWdpbmcuRmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5wcm92aWRlclR5cGVzRmlsdGVyLCB0aGlzLnNvcnRpbmdGaWx0ZXJdXHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nLlJlc2V0RmlsdGVyQnV0dG9uTmFtZSA9IFwicHJvdmlkZXJGaWx0ZXJzQnRuXCI7XHJcblxyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL0xvYWQgZmlsdGVycyBsaXN0c1xyXG4gIGxvYWRMaXN0cygpIHtcclxuICAgIGlmICghdGhpcy5Jc0ZpbHRlckRhdGFMb2FkZWQpIHtcclxuICAgICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IERyb3Bkb3duTGlzdHMgPSByZXN1bHQgYXMgYW55XHJcbiAgICAgICAgLy90aGlzLk9yZ2FuaXphdGlvbnNMaXN0ID0gRHJvcGRvd25MaXN0cy5vcmdhbml6YXRpb25zO1xyXG4gICAgICAgIC8vdGhpcy5UeXBlc0xpc3QgPSBEcm9wZG93bkxpc3RzLnByb3ZpZGVyVHlwZXM7XHJcbiAgICAgICAgdGhpcy5Qcm92aWRlclR5cGVzRmlsdGVyTGlzdCA9IERyb3Bkb3duTGlzdHMucHJvdmlkZXJUeXBlc0ZpbHRlcjtcclxuICAgICAgICB0aGlzLlNvcnRpbmdGaWx0ZXJMaXN0ID0gRHJvcGRvd25MaXN0cy5zb3J0aW5nRmlsdGVyTGlzdDtcclxuXHJcbiAgICAgICAgbGV0IHByb3ZpZGVyVHlwZXNFbGVtZW50ID0gdGhpcy5wcm92aWRlclR5cGVzRERMIGFzIGFueTtcclxuICAgICAgICBsZXQgc29ydGluZ0ZpbHRlckVsZW1lbnQgPSB0aGlzLnNvcnRpbmdGaWx0ZXJEREwgYXMgYW55O1xyXG5cclxuXHJcbiAgICAgICAgcHJvdmlkZXJUeXBlc0VsZW1lbnQuVXBkYXRlRGF0YVNvdXJjZSh0aGlzLlByb3ZpZGVyVHlwZXNGaWx0ZXJMaXN0KTtcclxuXHJcbiAgICAgICAgc29ydGluZ0ZpbHRlckVsZW1lbnQuVXBkYXRlRGF0YVNvdXJjZSh0aGlzLlNvcnRpbmdGaWx0ZXJMaXN0KTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMuSXNGaWx0ZXJEYXRhTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRQcm92aWRlckxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLlByb3ZpZGVyUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpXHJcbiAgfVxyXG5cclxuICBzZWFyY2hDbGllbnRTaWRlKHNlYXJjaFZhbHVlKSB7XHJcbiAgICBpZiAoc2VhcmNoVmFsdWUpXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5maWx0ZXIoXHJcbiAgICAgICAgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgIHJldHVybiBpdGVtLnByb3ZpZGVyTmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuUHJvdmlkZXJQYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvL0F0dHJpYnV0ZXNGdW5jdGlvblxyXG4gIHNldEFkZFByb3ZpZGVyQXR0cmlidXRlcyh0eXBlRnVsbE5hbWUpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdldFByb3ZpZGVyQXR0cmlidXRlcyh0eXBlRnVsbE5hbWUpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHZhciByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICAvL1NldCBQcm92aWRlciB0eXBlIGlkIG9uIHR5cGUgY2hhbmdlXHJcbiAgICAgIHRoaXMuTG9hZGVkUHJvdmlkZXJzID0gcmVzdWx0T2JqLmxvYWRlZFByb3ZpZGVycztcclxuICAgICAgbGV0IHNlbGVjdGVkUHJvdmlkZXJUeXBlID0gdGhpcy5Mb2FkZWRQcm92aWRlcnMuZmluZChvYmogPT4ge1xyXG4gICAgICAgIHJldHVybiBvYmouZnVsbE5hbWUgPT09IHR5cGVGdWxsTmFtZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5BZGRQcm92aWRlclR5cGVJdGVtSURfR1VJRCA9IHNlbGVjdGVkUHJvdmlkZXJUeXBlLnByb3ZpZGVyVHlwZUlEX0dVSUQ7XHJcblxyXG4gICAgICAvL1NldCBhdHRyaWJ1dGVzIGFuZCBjb3VudFxyXG4gICAgICBsZXQgYXR0cmlidXRlcyA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zID0gW107XHJcbiAgICAgIGxldCBkYXRhOiBhbnkgPSB0aGlzLmdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMoYXR0cmlidXRlcywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGRhdGFbMF07XHJcbiAgICAgIHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQgPSBkYXRhWzFdO1xyXG4gICAgICB0aGlzLklzQXR0cmlidXRlc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkge1xyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UuR2V0UHJvdmlkZXJBdHRyaWJ1dGVzKHR5cGVGdWxsTmFtZSkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdmFyIHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIC8vU2V0IFByb3ZpZGVyIHR5cGUgaWQgb24gdHlwZSBjaGFuZ2VcclxuICAgICAgdGhpcy5Mb2FkZWRQcm92aWRlcnMgPSByZXN1bHRPYmoubG9hZGVkUHJvdmlkZXJzO1xyXG4gICAgICBsZXQgc2VsZWN0ZWRQcm92aWRlclR5cGUgPSB0aGlzLkxvYWRlZFByb3ZpZGVycy5maW5kKG9iaiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5mdWxsTmFtZSA9PT0gdHlwZUZ1bGxOYW1lXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlclR5cGVJdGVtSURfR1VJRCA9IHNlbGVjdGVkUHJvdmlkZXJUeXBlLnByb3ZpZGVyVHlwZUlEX0dVSUQ7XHJcblxyXG4gICAgICAvL1NldCBhdHRyaWJ1dGVzIGFuZCBjb3VudFxyXG4gICAgICBsZXQgYXR0cmlidXRlcyA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IFtdO1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0gdGhpcy5nZXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zKGF0dHJpYnV0ZXMsIGZhbHNlKTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGRhdGFbMF07XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyQXR0cmlidXRlc0NvdW50ID0gZGF0YVsxXTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMocHJvdmlkZXJBdHRyaWJ1dGVzOiBhbnlbXSwgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBhdHRyaWJ1dGVzT3B0aW9uczogYW55W10gPSBbXTtcclxuICAgIGxldCBhdHRyaWJ1dGVzQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgYWN0aW9uSW5kaWNhdGU6IHN0cmluZyA9IGlzQWRkID8gXCJBZGRcIiA6IFwiRWRpdFwiO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm92aWRlckF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIGxldCBvYmplY3RBdHRyaWJ1dGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgICBsZXQgaXNFbmNyeXB0ZWQ6IGJvb2xlYW4gPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0uaXNFbmNyeXB0ZWQ7XHJcblxyXG4gICAgICBsZXQgQXR0cmlidXRlTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiQXR0cmlidXRlTmFtZVwiICsgaTtcclxuICAgICAgQXR0cmlidXRlTmFtZS5IaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgQXR0cmlidXRlTmFtZS5WYWx1ZSA9IHByb3ZpZGVyQXR0cmlidXRlc1tpXS5uYW1lO1xyXG4gICAgICBBdHRyaWJ1dGVOYW1lLk1heExlbmd0aCA9IDEwMDtcclxuXHJcblxyXG4gICAgICBsZXQgQXR0cmlidXRlVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuTmFtZSA9IGFjdGlvbkluZGljYXRlICsgXCJBdHRyaWJ1dGVWYWx1ZVwiICsgaTtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuSGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuVHlwZSA9IGlzRW5jcnlwdGVkID8gSW5wdXRUeXBlLlBhc3N3b3JkIDogSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIEF0dHJpYnV0ZVZhbHVlLlZhbHVlID0gcHJvdmlkZXJBdHRyaWJ1dGVzW2ldLnZhbHVlO1xyXG4gICAgICBBdHRyaWJ1dGVWYWx1ZS5SZW1vdmVEZWZhdWx0UGFzc3dvcmRWYWxpZGF0aW9uID0gdHJ1ZTtcclxuICAgICAgQXR0cmlidXRlVmFsdWUuTWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgbGV0IEF0dHJpYnV0ZUVuY3J5cHRlZCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgQXR0cmlidXRlRW5jcnlwdGVkLk5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiQXR0cmlidXRlRW5jcnlwdGVkXCIgKyBpO1xyXG4gICAgICBBdHRyaWJ1dGVFbmNyeXB0ZWQuVmFsdWUgPSBwcm92aWRlckF0dHJpYnV0ZXNbaV0uaXNFbmNyeXB0ZWQ7XHJcblxyXG4gICAgICBvYmplY3RBdHRyaWJ1dGVPcHRpb25zLnB1c2goQXR0cmlidXRlTmFtZSwgQXR0cmlidXRlVmFsdWUsIEF0dHJpYnV0ZUVuY3J5cHRlZCk7XHJcbiAgICAgIGF0dHJpYnV0ZXNPcHRpb25zLnB1c2gob2JqZWN0QXR0cmlidXRlT3B0aW9ucyk7XHJcbiAgICAgIGF0dHJpYnV0ZXNDb3VudCArPSAxO1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBbYXR0cmlidXRlc09wdGlvbnMsIGF0dHJpYnV0ZXNDb3VudF07XHJcbiAgfVxyXG5cclxuICBkZWxldGVBdHRyaWJ1dGUoZGVsZXRlZEF0dHJpYnV0ZTogYW55LCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGxldCBkZWxldGVkQXR0ckluZGV4OiBudW1iZXIgPSB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMuaW5kZXhPZihkZWxldGVkQXR0cmlidXRlKTtcclxuICAgICAgaWYgKGRlbGV0ZWRBdHRySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLnNwbGljZShkZWxldGVkQXR0ckluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRBdHRyaWJ1dGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtLnJlbW92ZUNvbnRyb2woZGVsZXRlZEF0dHJpYnV0ZVtpXS5OYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgZGVsZXRlZEF0dHJJbmRleDogbnVtYmVyID0gdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRBdHRyaWJ1dGUpO1xyXG4gICAgICBpZiAoZGVsZXRlZEF0dHJJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLnNwbGljZShkZWxldGVkQXR0ckluZGV4LCAxKTtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlbGV0ZWRBdHRyaWJ1dGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRBdHRyaWJ1dGVbaV0uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmNyeXB0ZWRDaGFuZ2UoaXNDaGVja2VkLCBvcHRpb24sIGlzQWRkKSB7XHJcbiAgICBsZXQgdmFsdWVBdHRyaWJ1dGVJbmRpY2F0b3IgPSBpc0FkZCA/IFwiQWRkQXR0cmlidXRlVmFsdWVcIiA6IFwiRWRpdEF0dHJpYnV0ZVZhbHVlXCI7XHJcbiAgICBsZXQgcmVhbHRlZFZhbHVlT3B0aW9uID0gb3B0aW9uLmZpbmQob2JqID0+IHtcclxuICAgICAgcmV0dXJuIG9iai5OYW1lLnN0YXJ0c1dpdGgodmFsdWVBdHRyaWJ1dGVJbmRpY2F0b3IpXHJcbiAgICB9KTtcclxuICAgIGlmIChpc0NoZWNrZWQpXHJcbiAgICAgIHJlYWx0ZWRWYWx1ZU9wdGlvbi5UeXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgZWxzZVxyXG4gICAgICByZWFsdGVkVmFsdWVPcHRpb24uVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvL0FkZCBwcm92aWRlclxyXG4gIHNob3dBZGRQcm92aWRlck1vZGFsKGFkZFByb3ZpZGVyTW9kYWwpIHtcclxuICAgIHRoaXMuc2hvd05vQXR0cmlidXRlc0Vycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5Qcm92aWRlclNlcnZpY2UubG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLk9yZ2FuaXphdGlvbnNMaXN0ID0gcmVzdWx0T2JqLm9yZ2FuaXphdGlvbnM7XHJcbiAgICAgIHRoaXMuVHlwZXNMaXN0ID0gcmVzdWx0T2JqLnByb3ZpZGVyVHlwZXM7XHJcblxyXG4gICAgICB0aGlzLlByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5Qcm92aWRlckF0dHJpYnV0ZXNDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMuSXNBdHRyaWJ1dGVzTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRQcm92aWRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuQWRkUHJvdmlkZXJGb3JtXHJcbiAgICAgIHRoaXMuQWRkUHJvdmlkZXJGb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRQcm92aWRlck1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRQcm92aWRlckZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkFkZFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICB0aGlzLkFkZE5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGROYW1lLk5hbWUgPSBcIlByb3ZpZGVyTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuTGFiZWxLZXkgPSBcIlByb3ZpZGVyTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZE5hbWUuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5NYXhMZW5ndGggPSAxMDA7XHJcblxyXG5cclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbiA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGREZXNjcmlwdGlvbi5OYW1lID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLkxhYmVsS2V5ID0gXCJQcm92aWRlckRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzY3JpcHRpb24uVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZERlc2NyaXB0aW9uLk1heExlbmd0aCA9IDI1MDtcclxuXHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLk5hbWUgPSBcIk9yZ2FuaXphdGlvbklEX0dVSURcIlxyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuTGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICAgIHRoaXMuQWRkT3JnYW5pemF0aW9uT3B0aW9ucy5EYXRhU291cmNlID0gdGhpcy5Pcmdhbml6YXRpb25zTGlzdFxyXG4gICAgICB0aGlzLkFkZE9yZ2FuaXphdGlvbk9wdGlvbnMuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5BZGRPcmdhbml6YXRpb25PcHRpb25zLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5OYW1lID0gXCJUeXBlRnVsbE5hbWVcIlxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkxhYmVsS2V5ID0gXCJQcm92aWRlclR5cGVcIlxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLlR5cGVzTGlzdFxyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVHlwZU9wdGlvbnMuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFR5cGVPcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5BZGRUeXBlT3B0aW9ucy5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihhZGRQcm92aWRlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgZ2V0QWRkUHJvdmlkZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5BZGRQcm92aWRlckZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IEFkZE1vZGVsOiBQcm92aWRlck1vZGVsID0gbmV3IFByb3ZpZGVyTW9kZWwoKTtcclxuICAgIEFkZE1vZGVsLlByb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLlByb3ZpZGVyTmFtZTtcclxuICAgIEFkZE1vZGVsLkRlc2NyaXB0aW9uID0gUmVzdWx0TW9kZWwuRGVzY3JpcHRpb247XHJcblxyXG4gICAgQWRkTW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRCA9IFJlc3VsdE1vZGVsLk9yZ2FuaXphdGlvbklEX0dVSUQ7XHJcbiAgICBBZGRNb2RlbC5Qcm92aWRlclR5cGVJdGVtSURfR1VJRCA9IHRoaXMuQWRkUHJvdmlkZXJUeXBlSXRlbUlEX0dVSUQ7XHJcbiAgICBBZGRNb2RlbC5UeXBlRnVsbE5hbWUgPSBSZXN1bHRNb2RlbC5UeXBlRnVsbE5hbWU7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuUHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ7IGorKykge1xyXG4gICAgICBsZXQgYWRkQXR0cmlidXRlTmFtZSA9IFJlc3VsdE1vZGVsW1wiQWRkQXR0cmlidXRlTmFtZVwiICsgal07XHJcbiAgICAgIGlmIChhZGRBdHRyaWJ1dGVOYW1lID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRBdHRyaWJ1dGVWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkQXR0cmlidXRlVmFsdWVcIiArIGpdO1xyXG4gICAgICBsZXQgYWRkQXR0cmlidXRlRW5jcnlwdGVkID0gUmVzdWx0TW9kZWxbXCJBZGRBdHRyaWJ1dGVFbmNyeXB0ZWRcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IHByb3ZpZGVyQXR0cjogUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCA9IG5ldyBQcm92aWRlckF0dHJpYnV0ZU1vZGVsKCk7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5OYW1lID0gYWRkQXR0cmlidXRlTmFtZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLlZhbHVlID0gYWRkQXR0cmlidXRlVmFsdWU7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5Jc0VuY3J5cHRlZCA9IGFkZEF0dHJpYnV0ZUVuY3J5cHRlZDtcclxuICAgICAgQWRkTW9kZWwuUHJvdmlkZXJBdHRyaWJ1dGVzLnB1c2gocHJvdmlkZXJBdHRyKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRBZGRQcm92aWRlckZ1bmN0aW9uID0gKEFkZE1vZGVsOiBQcm92aWRlck1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIGlmIChBZGRNb2RlbC5Qcm92aWRlckF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNob3dOb0F0dHJpYnV0ZXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gdGhpcy5Qcm92aWRlclNlcnZpY2UuQWRkUHJvdmlkZXIoQWRkTW9kZWwpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd05vQXR0cmlidXRlc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9FZGl0IHByb3ZpZGVyXHJcbiAgc2hvd0VkaXRQcm92aWRlck1vZGFsKHByb3ZpZGVySUQ6IHN0cmluZywgZWRpdFByb3ZpZGVyTW9kYWwpIHtcclxuICAgIHRoaXMuc2hvd05vQXR0cmlidXRlc0Vycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLlByb3ZpZGVySWQgPSBwcm92aWRlcklEO1xyXG5cclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdldEVkaXRQcm92aWRlckRhdGEocHJvdmlkZXJJRCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCBwcm92aWRlciA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLlR5cGVzTGlzdCA9IGxpc3RzLnByb3ZpZGVyVHlwZXM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRWRpdFByb3ZpZGVyRm9ybVxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRQcm92aWRlck1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcbiAgICAgIHRoaXMuRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlXHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0TmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLk5hbWUgPSBcIlByb3ZpZGVyTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLkxhYmVsS2V5ID0gXCJQcm92aWRlck5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuVmFsdWUgPSBwcm92aWRlci5wcm92aWRlck5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuTWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzY3JpcHRpb24gPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLk5hbWUgPSBcIkRlc2NyaXB0aW9uXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc2NyaXB0aW9uLkxhYmVsS2V5ID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5WYWx1ZSA9IHByb3ZpZGVyLmRlc2NyaXB0aW9uO1xyXG4gICAgICB0aGlzLkVkaXREZXNjcmlwdGlvbi5NYXhMZW5ndGggPSAyNTA7XHJcblxyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuTmFtZSA9IFwiVHlwZUZ1bGxOYW1lXCJcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuTGFiZWxLZXkgPSBcIlByb3ZpZGVyVHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLkRhdGFTb3VyY2UgPSB0aGlzLlR5cGVzTGlzdFxyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRUeXBlT3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLlBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0VHlwZU9wdGlvbnMuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFR5cGVPcHRpb25zLlNlbGVjdGVkSXRlbXMgPSBwcm92aWRlci50eXBlRnVsbE5hbWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlclR5cGVJdGVtSURfR1VJRCA9IHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJPcmdhbml6YXRpb25JRF9HVUlEID0gcHJvdmlkZXIub3JnYW5pemF0aW9uSURfR1VJRD8udG9Mb3dlckNhc2UoKVxyXG4gICAgICBsZXQgZWRpdEF0dHJpYnV0ZXNSZXN1bHQ6IGFueSA9IHRoaXMuZ2V0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyhwcm92aWRlci5wcm92aWRlckF0dHJpYnV0ZXMsIGZhbHNlKTtcclxuICAgICAgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucyA9IGVkaXRBdHRyaWJ1dGVzUmVzdWx0WzBdO1xyXG4gICAgICB0aGlzLkVkaXRQcm92aWRlckF0dHJpYnV0ZXNDb3VudCA9IGVkaXRBdHRyaWJ1dGVzUmVzdWx0WzFdO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGVkaXRQcm92aWRlck1vZGFsKTtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuICBnZXRFZGl0UHJvdmlkZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0UHJvdmlkZXJGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgUHJvdmlkZXJNb2RlbCgpO1xyXG5cclxuICAgIEVkaXRNb2RlbC5JRF9HVUlEID0gdGhpcy5Qcm92aWRlcklkO1xyXG4gICAgRWRpdE1vZGVsLlByb3ZpZGVyTmFtZSA9IFJlc3VsdE1vZGVsLlByb3ZpZGVyTmFtZTsgLy8oIyMxKVxyXG4gICAgRWRpdE1vZGVsLkRlc2NyaXB0aW9uID0gUmVzdWx0TW9kZWwuRGVzY3JpcHRpb25cclxuICAgIEVkaXRNb2RlbC5UeXBlRnVsbE5hbWUgPSBSZXN1bHRNb2RlbC5UeXBlRnVsbE5hbWU7XHJcbiAgICBFZGl0TW9kZWwuUHJvdmlkZXJUeXBlSXRlbUlEX0dVSUQgPSB0aGlzLkVkaXRQcm92aWRlclR5cGVJdGVtSURfR1VJRDtcclxuICAgIEVkaXRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEID0gdGhpcy5FZGl0UHJvdmlkZXJPcmdhbml6YXRpb25JRF9HVUlEO1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5FZGl0UHJvdmlkZXJBdHRyaWJ1dGVzQ291bnQ7IGorKykge1xyXG4gICAgICBsZXQgZWRpdEF0dHJpYnV0ZU5hbWUgPSBSZXN1bHRNb2RlbFtcIkVkaXRBdHRyaWJ1dGVOYW1lXCIgKyBqXTtcclxuICAgICAgaWYgKGVkaXRBdHRyaWJ1dGVOYW1lID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiRWRpdEF0dHJpYnV0ZVZhbHVlXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWQgPSBSZXN1bHRNb2RlbFtcIkVkaXRBdHRyaWJ1dGVFbmNyeXB0ZWRcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IHByb3ZpZGVyQXR0cjogUHJvdmlkZXJBdHRyaWJ1dGVNb2RlbCA9IG5ldyBQcm92aWRlckF0dHJpYnV0ZU1vZGVsKCk7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5OYW1lID0gZWRpdEF0dHJpYnV0ZU5hbWU7XHJcbiAgICAgIHByb3ZpZGVyQXR0ci5WYWx1ZSA9IGVkaXRBdHRyaWJ1dGVWYWx1ZTtcclxuICAgICAgcHJvdmlkZXJBdHRyLklzRW5jcnlwdGVkID0gZWRpdEF0dHJpYnV0ZUVuY3J5cHRlZDtcclxuICAgICAgRWRpdE1vZGVsLlByb3ZpZGVyQXR0cmlidXRlcy5wdXNoKHByb3ZpZGVyQXR0cik7XHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFByb3ZpZGVyRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIGlmIChFZGl0TW9kZWwuUHJvdmlkZXJBdHRyaWJ1dGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkVkaXRQcm92aWRlcihFZGl0TW9kZWwpXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Tm9BdHRyaWJ1dGVzRXJyb3IgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0RlbGV0ZSBwcm92aWRlclxyXG4gIHNob3dEZWxldGVQcm92aWRlck1vZGFsKHByb3ZpZGVySUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVQcm92aWRlcklkID0gcHJvdmlkZXJJRDtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVQcm92aWRlcklkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVQcm92aWRlcjtcclxuICAgIHRoaXMuRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUNvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVByb3ZpZGVyID0gKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkRlbGV0ZVByb3ZpZGVyKGlkKTtcclxuICB9XHJcblxyXG4gIC8vRGVmYXVsdCBwcm92aWRlclxyXG4gIHNob3dEZWZhdWx0UHJvdmlkZXJNb2RhbChkZWZhdWx0UHJvdmlkZXJNb2RhbCkge1xyXG4gICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJzID0gW107XHJcbiAgICB0aGlzLlByb3ZpZGVyU2VydmljZS5HZXREZWZhdWx0UHJvdmlkZXJzKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGxpc3QgPSByZXN1bHQgYXMgYW55O1xyXG5cclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuICAgICAgdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybVxyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldERlZmF1bHRQcm92aWRlck1vZGVsO1xyXG4gICAgICB0aGlzLkRlZmF1bHRQcm92aWRlckZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RGVmYXVsdFByb3ZpZGVyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVyRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgcHJvdmlkZXI6IGFueSA9IGxpc3RbaV07XHJcblxyXG4gICAgICAgIGxldCBQcm92aWRlck9wdGlvbiA9IG5ldyBSYWRpb0J1dHRvbk9wdGlvbnMoKTtcclxuICAgICAgICBQcm92aWRlck9wdGlvbi5OYW1lID0gXCJwcm92aWRlck9wdGlvbl9cIiArIHByb3ZpZGVyLnByb3ZpZGVyVHlwZUl0ZW1JRF9HVUlEO1xyXG4gICAgICAgIFByb3ZpZGVyT3B0aW9uLkhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgICAgUHJvdmlkZXJPcHRpb24uVmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgICAgbGV0IGl0ZW1zOiBSYWRpb0J1dHRvbkl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcHJvdmlkZXIucHJvdmlkZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBsZXQgcHJvdmlkZXJJdGVtID0gcHJvdmlkZXIucHJvdmlkZXJzW2pdO1xyXG4gICAgICAgICAgbGV0IGl0ZW0gPSBuZXcgUmFkaW9CdXR0b25JdGVtKCk7XHJcbiAgICAgICAgICBpdGVtLlRleHQgPSBwcm92aWRlckl0ZW0udGV4dDtcclxuICAgICAgICAgIGl0ZW0uVmFsdWUgPSBwcm92aWRlckl0ZW0udmFsdWU7XHJcbiAgICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgUHJvdmlkZXJPcHRpb24uSXRlbXMgPSBpdGVtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzZWxlY3RlZFByb3ZpZGVyID0gcHJvdmlkZXIucHJvdmlkZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5zZWxlY3RlZCA9PSB0cnVlOyB9KVswXTtcclxuICAgICAgICBQcm92aWRlck9wdGlvbi5WYWx1ZSA9IHtcclxuICAgICAgICAgIFRleHQ6IHNlbGVjdGVkUHJvdmlkZXIudGV4dCxcclxuICAgICAgICAgIFZhbHVlOiBzZWxlY3RlZFByb3ZpZGVyLnZhbHVlXHJcbiAgICAgICAgfTtcclxuXHJcblxyXG5cclxuICAgICAgICBsZXQgZGVmUHJvdmlkZXIgPSB7XHJcbiAgICAgICAgICBOYW1lOiBwcm92aWRlci5wcm92aWRlclR5cGVJdGVtTmFtZSxcclxuICAgICAgICAgIElEOiBwcm92aWRlci5wcm92aWRlclR5cGVJdGVtSURfR1VJRCxcclxuICAgICAgICAgIFByb3ZpZGVyc09wdGlvbjogUHJvdmlkZXJPcHRpb25cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdFByb3ZpZGVycy5wdXNoKGRlZlByb3ZpZGVyKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGRlZmF1bHRQcm92aWRlck1vZGFsKTtcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuICBnZXREZWZhdWx0UHJvdmlkZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJGb3JtLnZhbHVlO1xyXG4gICAgbGV0IGRlZmF1bHRQcm92aWRlcnNNb2RlbDogRGVmYXVsdFByb3ZpZGVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5EZWZhdWx0UHJvdmlkZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwcm92aWRlcklEID0gdGhpcy5EZWZhdWx0UHJvdmlkZXJzW2ldLklEO1xyXG4gICAgICBsZXQgc2VsZWN0ZWREZWZQcm92aWRlcklEID0gUmVzdWx0TW9kZWxbXCJwcm92aWRlck9wdGlvbl9cIiArIHByb3ZpZGVySURdO1xyXG4gICAgICBsZXQgZGVmUHJvdmlkZU1vZGVsOiBEZWZhdWx0UHJvdmlkZXJNb2RlbCA9IHtcclxuICAgICAgICBQcm92aWRlclR5cGVJdGVtSURfR1VJRDogcHJvdmlkZXJJRCxcclxuICAgICAgICBTZWxlY3RlZFByb3ZpZGVySURfR1VJRDogc2VsZWN0ZWREZWZQcm92aWRlcklELFxyXG4gICAgICAgIFByb3ZpZGVyVHlwZUl0ZW1OYW1lOiBcIlwiLFxyXG4gICAgICAgIFByb3ZpZGVyczogW11cclxuICAgICAgfTtcclxuICAgICAgZGVmYXVsdFByb3ZpZGVyc01vZGVsLnB1c2goZGVmUHJvdmlkZU1vZGVsKTtcclxuXHJcbiAgICB9XHJcbiAgICBwYXJhbUFycmF5LnB1c2goZGVmYXVsdFByb3ZpZGVyc01vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdFByb3ZpZGVyRnVuY3Rpb24gPSAoRGVmYXVsdFByb3ZpZGVyTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLlN1Ym1pdERlZmF1bHRQcm92aWRlcnMoRGVmYXVsdFByb3ZpZGVyTW9kZWwpXHJcbiAgfVxyXG5cclxuICAvL0dlbmVyYXRlIHByb3ZpZGVyIGpzb25cclxuICBnZW5lcmF0ZVByb3ZpZGVySnNvbigpIHtcclxuICAgIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLkdlbmVyYXRlUHJvdmlkZXJKc29uKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgQmxvYihbRmlsZURUT10sIHsgdHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyc1wiKSArIFwiLmpzb25cIjtcclxuICAgICAgc2F2ZUFzKGZpbGUsIGZpbGVOYW1lKTtcclxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgfSlcclxuICB9XHJcbiAgLy9UZXN0IEVtYWlsIGZ1bmN0aW9uc1xyXG4gIHNob3dUZXN0RW1haWxNb2RhbChwcm92aWRlcklEOiBzdHJpbmcsIHByb3ZpZGVyTmFtZTogc3RyaW5nLCB0ZXN0RU1haWxNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudGVzdEVtYWlsUHJvdmlkZXJJZCA9IHByb3ZpZGVySUQ7XHJcbiAgICB0aGlzLnRlc3RFbWFpbFByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZTtcclxuXHJcbiAgICB0aGlzLnRlc3RFbWFpbEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMudGVzdEVtYWlsRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMudGVzdEVtYWlsRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy50ZXN0RW1haWxGb3JtXHJcbiAgICB0aGlzLnRlc3RFbWFpbEZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldFRlc3RFbWFpbE1vZGVsO1xyXG4gICAgdGhpcy50ZXN0RW1haWxGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFRlc3RFbWFpbEZ1bmN0aW9uO1xyXG5cclxuXHJcbiAgICB0aGlzLmVtYWlsVG8gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1haWxUby5OYW1lID0gXCJlbWFpbFRvXCI7XHJcbiAgICB0aGlzLmVtYWlsVG8uTGFiZWxLZXkgPSBcIlRvXCI7XHJcbiAgICB0aGlzLmVtYWlsVG8uVHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgIHRoaXMuZW1haWxUby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5lbWFpbFN1YmplY3QuTmFtZSA9IFwiZW1haWxTdWJqZWN0XCI7XHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdC5MYWJlbEtleSA9IFwiRW1haWxTdWJqZWN0XCI7XHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdC5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLmVtYWlsU3ViamVjdC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmVtYWlsQm9keSA9IG5ldyBUZXh0QXJlYU9wdGlvbnMoKTtcclxuICAgIHRoaXMuZW1haWxCb2R5Lk5hbWUgPSBcImVtYWlsQm9keVwiO1xyXG4gICAgdGhpcy5lbWFpbEJvZHkuTGFiZWxLZXkgPSBcIkVtYWlsQm9keVwiO1xyXG4gICAgdGhpcy5lbWFpbEJvZHkuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0ZXN0RU1haWxNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0RW1haWxNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IHJlc3VsdE1vZGVsID0gdGhpcy50ZXN0RW1haWxGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCB0ZXN0RW1haWxNb2RlbCA9IG5ldyBFbWFpbFByb3ZpZGVyVGVzdGVyTW9kZWwoKTtcclxuXHJcbiAgICB0ZXN0RW1haWxNb2RlbC5Qcm92aWRlcklEID0gdGhpcy50ZXN0RW1haWxQcm92aWRlcklkO1xyXG4gICAgdGVzdEVtYWlsTW9kZWwuUHJvdmlkZXJOYW1lID0gdGhpcy50ZXN0RW1haWxQcm92aWRlck5hbWU7XHJcbiAgICB0ZXN0RW1haWxNb2RlbC5Ub0VtYWlsID0gcmVzdWx0TW9kZWwuZW1haWxUb1xyXG4gICAgdGVzdEVtYWlsTW9kZWwuU3ViamVjdCA9IHJlc3VsdE1vZGVsLmVtYWlsU3ViamVjdDtcclxuICAgIHRlc3RFbWFpbE1vZGVsLkJvZHkgPSByZXN1bHRNb2RlbC5lbWFpbEJvZHk7XHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKHRlc3RFbWFpbE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVzdEVtYWlsRnVuY3Rpb24gPSAodGVzdEVtYWlsTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuUHJvdmlkZXJTZXJ2aWNlLlRlc3RFbWFpbCh0ZXN0RW1haWxNb2RlbClcclxuICB9XHJcblxyXG4gIC8vVGVzdCBTTVMgZnVuY3Rpb25zXHJcbiAgc2hvd1Rlc3RTTVNNb2RhbChwcm92aWRlcklEOiBzdHJpbmcsIHByb3ZpZGVyTmFtZTogc3RyaW5nLCB0ZXN0U01TTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnRlc3RTTVNQcm92aWRlcklkID0gcHJvdmlkZXJJRDtcclxuICAgIHRoaXMudGVzdFNNU1Byb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZTtcclxuXHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLnRlc3RTTVNGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy50ZXN0U01TRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy50ZXN0U01TRm9ybVxyXG4gICAgdGhpcy50ZXN0U01TRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0VGVzdFNNU01vZGVsO1xyXG4gICAgdGhpcy50ZXN0U01TRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRUZXN0U01TRnVuY3Rpb247XHJcblxyXG5cclxuICAgIHRoaXMuc21zVG8gPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNtc1RvLk5hbWUgPSBcInNtc1RvXCI7XHJcbiAgICB0aGlzLnNtc1RvLkxhYmVsS2V5ID0gXCJUb1wiO1xyXG4gICAgdGhpcy5zbXNUby5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNtc0JvZHkgPSBuZXcgVGV4dEFyZWFPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNtc0JvZHkuTmFtZSA9IFwic21zQm9keVwiO1xyXG4gICAgdGhpcy5zbXNCb2R5LkxhYmVsS2V5ID0gXCJTTVNcIjtcclxuICAgIHRoaXMuc21zQm9keS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRlc3RTTVNNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0U01TTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCByZXN1bHRNb2RlbCA9IHRoaXMudGVzdFNNU0Zvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IHRlc3RTTVNNb2RlbCA9IG5ldyBTTVNQcm92aWRlclRlc3Rlck1vZGVsKCk7XHJcblxyXG4gICAgbGV0IGludGVybmF0aW9uYWxOdW1iZXI6IHN0cmluZyA9IG51bGw7XHJcbiAgICBpZiAocmVzdWx0TW9kZWwuc21zVG8gIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gcmVzdWx0TW9kZWwuc21zVG8uaW50ZXJuYXRpb25hbE51bWJlciBhcyBzdHJpbmc7XHJcbiAgICAgIGludGVybmF0aW9uYWxOdW1iZXIgPSBpbnRlcm5hdGlvbmFsTnVtYmVyLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0ZXN0U01TTW9kZWwuUHJvdmlkZXJJRCA9IHRoaXMudGVzdFNNU1Byb3ZpZGVySWQ7XHJcbiAgICB0ZXN0U01TTW9kZWwuUHJvdmlkZXJOYW1lID0gdGhpcy50ZXN0U01TUHJvdmlkZXJOYW1lO1xyXG4gICAgdGVzdFNNU01vZGVsLlRvTW9iaWxlTnVtYmVyID0gaW50ZXJuYXRpb25hbE51bWJlclxyXG4gICAgdGVzdFNNU01vZGVsLk1lc3NhZ2UgPSByZXN1bHRNb2RlbC5zbXNCb2R5O1xyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaCh0ZXN0U01TTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRUZXN0U01TRnVuY3Rpb24gPSAodGVzdFNNU01vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLlByb3ZpZGVyU2VydmljZS5UZXN0U01TKHRlc3RTTVNNb2RlbClcclxuICB9XHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxibG9jay11aT48L2Jsb2NrLXVpPlxyXG48IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJQcm92aWRlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpNZW51IC0tPlxyXG4gICAgICAgICAgPGRpdiBuZ2JEcm9wZG93biBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCIgW25nU3R5bGVdPVwieydkaXNwbGF5JzogU2hvd1BhZ2VDb250ZW50PT10cnVlPydibG9jayc6J25vbmUnfVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTGlzdHMoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIiBpZD1cIkZpbHRlcnNEcm9wZG93blwiIHRpdGxlPVwiRmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRmlsdGVyXCIpfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIG5nYkRyb3Bkb3duTWVudSBhcmlhLWxhYmVsbGVkYnk9XCJGaWx0ZXJzRHJvcGRvd25cIiBjbGFzcz1cIiBmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5ICB3LTI1MHB4IHctbWQtNTAwcHggZnctYm9sZCBweS0zIFwiPlxyXG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNwcm92aWRlclR5cGVzRERMIFtvcHRpb25zXT1cInByb3ZpZGVyVHlwZXNGaWx0ZXJPcHRpb25cIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI3NvcnRpbmdGaWx0ZXJEREwgW29wdGlvbnNdPVwic29ydGluZ0ZpbHRlck9wdGlvblwiIFtncm91cF09XCJQcm92aWRlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnkgcHYtcmVzZXQgYnRuLXNtXCIgbmFtZT1cInByb3ZpZGVyRmlsdGVyc0J0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b24gaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJnZW5lcmF0ZVByb3ZpZGVySnNvbigpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgYm5zaWdodHMtYnRuLWV4cG9ydFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWxlLWV4cG9ydCBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJHZW5lcmF0ZVByb3ZpZGVySnNvblwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT0ndXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbGVjdERlZmF1bHRQcm92aWRlclwiKScgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTMgXCIgKGNsaWNrKT1cInNob3dEZWZhdWx0UHJvdmlkZXJNb2RhbChEZWZhdWx0UHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaGFuZC1wb2ludGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbGVjdERlZmF1bHRQcm92aWRlclwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRpdGxlPSd1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpJyBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2hvd0FkZFByb3ZpZGVyTW9kYWwoQWRkUHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+ICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICAgIDwhLS0gYmVnaW46OkJvZHkgLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdGF0dXNcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlZmF1bHRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiAqbmdGb3I9XCJsZXQgcHJvdmlkZXJHcm91cCBvZiBjbGllbnRTaWRlUGFnaW5nUmVzdWx0XCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBwcm92aWRlciBvZiBwcm92aWRlckdyb3VwLnByb3ZpZGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1kYXJrXCI+e3twcm92aWRlci5wcm92aWRlck5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2Pnt7cHJvdmlkZXIuZGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5XCIgKm5nSWY9XCJwcm92aWRlci5pc1J1bm5pbmc7ZWxzZSBvdGhlcl9jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUnVubmluZ1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNvdGhlcl9jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTdG9wcGVkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzIGZ3LWJvbGRlclwiICpuZ0lmPVwicHJvdmlkZXIuaXNEZWZhdWx0O2Vsc2UgZGVmYXVsdF9ub1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlllc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0X25vPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQgZnctYm9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOb1wiKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW0gKGNsaWNrKT1cInNob3dFZGl0UHJvdmlkZXJNb2RhbChwcm92aWRlci5pRF9HVUlELCBFZGl0UHJvdmlkZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dEZWxldGVQcm92aWRlck1vZGFsKHByb3ZpZGVyLmlEX0dVSUQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwicHJvdmlkZXIuaXNFTWFpbCAmJiBwcm92aWRlci5pc1J1bm5pbmdcIiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Rlc3RFbWFpbE1vZGFsKHByb3ZpZGVyLmlEX0dVSUQscHJvdmlkZXIucHJvdmlkZXJOYW1lLFRlc3RFbWFpbE1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdEVtYWlsXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cInByb3ZpZGVyLmlzU01TICYmIHByb3ZpZGVyLmlzUnVubmluZ1wiIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93VGVzdFNNU01vZGFsKHByb3ZpZGVyLmlEX0dVSUQscHJvdmlkZXIucHJvdmlkZXJOYW1lLFRlc3RTTVNNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlRlc3RTTVNcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJwcm92aWRlckdyb3VwLnByb3ZpZGVycy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8dGJvZHkgKm5nSWY9XCJjbGllbnRTaWRlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0UHJvdmlkZXJMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiUHJvdmlkZXJQYWdpbmdcIiBbZ3JvdXBdPVwiUHJvdmlkZXJGb3JtXCIgI1Byb3ZpZGVyUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tZW5kOjpQcm92aWRlcnMgbGlzdC0tPlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gQWRkIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI0FkZFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyXCIpfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRQcm92aWRlckZvcm1PcHRpb25zXCI+XHJcblxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZE5hbWVcIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0QXJlYSBbb3B0aW9uc109XCJBZGREZXNjcmlwdGlvblwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgPC9CQlNGLVRleHRBcmVhPlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkT3JnYW5pemF0aW9uT3B0aW9uc1wiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFR5cGVPcHRpb25zXCIgW2dyb3VwXT1cIkFkZFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJzZXRBZGRQcm92aWRlckF0dHJpYnV0ZXMoJGV2ZW50KVwiPlxyXG4gICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiSXNBdHRyaWJ1dGVzTG9hZGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZU5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyQXR0cmlidXRlVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuY3J5cHRlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblsxXVwiIFtncm91cF09XCJBZGRQcm92aWRlckZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiQWRkUHJvdmlkZXJGb3JtXCIgKE9uQ2hhbmdlKT1cImVuY3J5cHRlZENoYW5nZSgkZXZlbnQsb3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVBdHRyaWJ1dGUob3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0lmPVwiUHJvdmlkZXJBdHRyaWJ1dGVzT3B0aW9ucy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dOb0F0dHJpYnV0ZXNFcnJvclwiIGNvbHNwYW49XCI0XCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBdExlYXN0T25lSXRlbVJlcXVpcmVkXCIpfX1cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlUHJvdmlkZXJNb2RhbCBpZD1cIkNsb3NlQWRkUHJvdmlkZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tIEVkaXQgbW9kZWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFByb3ZpZGVyRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdE5hbWVcIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cIkVkaXREZXNjcmlwdGlvblwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VHlwZU9wdGlvbnNcIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiIChPbkNoYW5nZSk9XCJzZXRFZGl0UHJvdmlkZXJBdHRyaWJ1dGVzKCRldmVudClcIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQcm92aWRlckF0dHJpYnV0ZU5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByb3ZpZGVyQXR0cmlidXRlVmFsdWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVuY3J5cHRlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgRWRpdFByb3ZpZGVyQXR0cmlidXRlc09wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiRWRpdFByb3ZpZGVyRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblsyXVwiIFtncm91cF09XCJFZGl0UHJvdmlkZXJGb3JtXCIgKE9uQ2hhbmdlKT1cImVuY3J5cHRlZENoYW5nZSgkZXZlbnQsb3B0aW9uLHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVBdHRyaWJ1dGUob3B0aW9uLGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkVkaXRQcm92aWRlckF0dHJpYnV0ZXNPcHRpb25zLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjRcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd05vQXR0cmlidXRlc0Vycm9yXCIgY29sc3Bhbj1cIjRcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkF0TGVhc3RPbmVJdGVtUmVxdWlyZWRcIil9fVxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VFZGl0UHJvdmlkZXJNb2RhbCBpZD1cIkNsb3NlRWRpdFByb3ZpZGVyTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tZGVsZXRlIE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cIkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cIkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiICNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuPCEtLURlZmF1bHQgUHJvdmlkZXIgIE1vZGFsLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRGVmYXVsdFByb3ZpZGVyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbGVjdERlZmF1bHRQcm92aWRlclwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJEZWZhdWx0UHJvdmlkZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0Zvcj1cImxldCBkZWZQcm92aWRlciBvZiBEZWZhdWx0UHJvdmlkZXJzO2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwidGV4dC1tdXRlZCBtYi00IGZ3LWJvbGRlc3RcIj57e2RlZlByb3ZpZGVyLk5hbWV9fTwvaDM+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHZhbHVlPVwie3tkZWZQcm92aWRlci5JRH19XCIgLz5cclxuICAgICAgICAgIDxCQlNGLVJhZGlvQnV0dG9uIFtvcHRpb25zXT1cImRlZlByb3ZpZGVyLlByb3ZpZGVyc09wdGlvblwiIFtncm91cF09XCJEZWZhdWx0UHJvdmlkZXJGb3JtXCI+PC9CQlNGLVJhZGlvQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZURlZmF1bHRQcm92aWRlck1vZGFsIGlkPVwiQ2xvc2VEZWZhdWx0UHJvdmlkZXJNb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBtZS0zIFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLVRlc3QgRW1haWwgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNUZXN0RW1haWxNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdEVtYWlsU2VydmljZVByb3ZpZGVyXCIpfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJ0ZXN0RW1haWxGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJlbWFpbFRvXCIgW2dyb3VwXT1cInRlc3RFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiZW1haWxTdWJqZWN0XCIgW2dyb3VwXT1cInRlc3RFbWFpbEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cImVtYWlsQm9keVwiIFtncm91cF09XCJ0ZXN0RW1haWxGb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtVGV4dEFyZWE+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJUZXN0XCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1UZXN0IFNNUyBNb2RhbC0tPlxyXG48bmctdGVtcGxhdGUgI1Rlc3RTTVNNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFNNU1NlcnZpY2VQcm92aWRlclwiKX19XHJcbiAgICAgIDwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwidGVzdFNNU0Zvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJzbXNUb1wiIFtncm91cF09XCJ0ZXN0U01TRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLVBob25lPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLVRleHRBcmVhIFtvcHRpb25zXT1cInNtc0JvZHlcIiBbZ3JvdXBdPVwidGVzdFNNU0Zvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0QXJlYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVGVzdFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG4iXX0=