@bnsights/bbsf-admin-portal 1.1.49 → 1.1.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/bnsights-bbsf-admin-portal-1.1.50.tgz +0 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +3 -3
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +1 -1
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +16 -9
- package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +3 -3
- package/esm2022/lib/Pages/_layout/components/topbar/topbar.component.mjs +15 -22
- package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/change-password/change-password.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +1 -1
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +4 -4
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +3 -3
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +167 -99
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +7 -4
- package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +1 -1
- package/esm2022/lib/Pages/departments/department/department.component.mjs +108 -30
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +96 -15
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +1 -1
- package/esm2022/lib/Pages/home/home.component.mjs +17 -6
- package/esm2022/lib/Pages/home/home.module.mjs +1 -1
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +1 -1
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +1 -1
- package/esm2022/lib/Pages/license/license/license.component.mjs +1 -1
- package/esm2022/lib/Pages/license/license.module.mjs +1 -1
- package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +1 -1
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +1 -1
- package/esm2022/lib/Pages/localizations/localizations.module.mjs +1 -1
- package/esm2022/lib/Pages/logs/log/log.component.mjs +1 -1
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +1 -1
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +1 -1
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +85 -58
- package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +55 -26
- package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +68 -16
- package/esm2022/lib/Pages/notifications/notifications.module.mjs +2 -2
- package/esm2022/lib/Pages/notifications/notifications.routing.mjs +66 -0
- package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +105 -58
- package/esm2022/lib/Pages/organization/add-organization/add-organization.component.mjs +107 -0
- package/esm2022/lib/Pages/organization/add-organization/index.mjs +2 -0
- package/esm2022/lib/Pages/organization/edit-organization/edit-organization.component.mjs +115 -0
- package/esm2022/lib/Pages/organization/edit-organization/index.mjs +2 -0
- package/esm2022/lib/Pages/organization/index.mjs +7 -0
- package/esm2022/lib/Pages/organization/list-organization/index.mjs +2 -0
- package/esm2022/lib/Pages/organization/list-organization/list-organization.component.mjs +181 -0
- package/esm2022/lib/Pages/organization/organization.component.mjs +15 -0
- package/esm2022/lib/Pages/organization/organization.module.mjs +89 -0
- package/esm2022/lib/Pages/organization/organization.routing.mjs +36 -0
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +98 -43
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +1 -1
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +3 -3
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +73 -33
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +166 -105
- package/esm2022/lib/Pages/roles/roles-routing.module.mjs +24 -7
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +83 -16
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +2 -1
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ConfigurationsService.service.mjs +4 -1
- package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +7 -3
- package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +6 -1
- package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +7 -3
- package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +7 -3
- package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +4 -1
- package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +4 -3
- package/esm2022/lib/Pages/shared/Services/WorkFlowVersionService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowInstanceService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowLogVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/injectionModuleService.service.mjs +52 -22
- package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/organization.service.mjs +36 -0
- package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/survey-question.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/survey.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/userService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/config.service.mjs +17 -0
- package/esm2022/lib/Pages/shared/constants.mjs +2 -1
- package/esm2022/lib/Pages/shared/index.mjs +14 -0
- package/esm2022/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.mjs +36 -3
- package/esm2022/lib/Pages/shared/models/DepartmentModels/DepartmentModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/LicenseModel/LicenseModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/LocalizationModels/EditResourceModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/Lookups/LookupGroupModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/Lookups/LookupItem.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/Lookups/LookupModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.mjs +9 -6
- package/esm2022/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/TemplateDTO.mjs +1 -2
- package/esm2022/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/PermissionsModels/PermissionModel.mjs +17 -3
- package/esm2022/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.mjs +17 -3
- package/esm2022/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SectorModels/SectorModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/add-survey-submissio.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-field-options.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/AddUserModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/DropdownsResponseModel.mjs +3 -1
- package/esm2022/lib/Pages/shared/models/UserModels/EditUserModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/ExportedFileDTO.mjs +3 -0
- package/esm2022/lib/Pages/shared/models/UserModels/FilteredUsersRequestModel.mjs +9 -0
- package/esm2022/lib/Pages/shared/models/UserModels/UserListingViewModel.mjs +8 -0
- package/esm2022/lib/Pages/shared/models/UserModels/UserModelDTO.mjs +41 -0
- package/esm2022/lib/Pages/shared/models/UserModels/UserSearchParamDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/UsersCountsDTO.mjs +3 -0
- package/esm2022/lib/Pages/shared/models/UserModels/index.mjs +13 -0
- package/esm2022/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/WorkflowModels/WFActivityModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/WorkflowModels/WFCreationModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/WorkflowModels/WFVariableModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/index.mjs +24 -0
- package/esm2022/lib/Pages/shared/models/organization/organization.model.mjs +15 -0
- package/esm2022/lib/Pages/shared/modules/public-survey.module.mjs +1 -1
- package/esm2022/lib/Pages/shared/modules/survey.module.mjs +1 -1
- package/esm2022/lib/Pages/users/users.component.mjs +143 -60
- package/esm2022/lib/Pages/users/users.module.mjs +1 -1
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +1 -1
- package/esm2022/lib/masterlayout.component.mjs +8 -14
- package/esm2022/lib/masterlayout.module.mjs +2 -25
- package/esm2022/lib/masterlayout.routing.mjs +43 -0
- package/fesm2022/bnsights-bbsf-admin-portal.mjs +2516 -1136
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
- package/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.d.ts +5 -2
- package/lib/Pages/_layout/components/topbar/topbar.component.d.ts +2 -8
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +21 -8
- package/lib/Pages/core/authentication/admin.guard.d.ts +3 -2
- package/lib/Pages/departments/department/department.component.d.ts +15 -3
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +16 -3
- package/lib/Pages/home/home.component.d.ts +5 -2
- package/lib/Pages/notifications/add-notification/add-notification.component.d.ts +16 -5
- package/lib/Pages/notifications/edit-notification/edit-notification.component.d.ts +15 -4
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +17 -5
- package/lib/Pages/notifications/notifications.module.d.ts +1 -1
- package/lib/Pages/notifications/templates/templates.component.d.ts +13 -3
- package/lib/Pages/organization/add-organization/add-organization.component.d.ts +36 -0
- package/lib/Pages/organization/add-organization/index.d.ts +1 -0
- package/lib/Pages/organization/edit-organization/edit-organization.component.d.ts +36 -0
- package/lib/Pages/organization/edit-organization/index.d.ts +1 -0
- package/lib/Pages/organization/index.d.ts +6 -0
- package/lib/Pages/organization/list-organization/index.d.ts +1 -0
- package/lib/Pages/organization/list-organization/list-organization.component.d.ts +59 -0
- package/lib/Pages/organization/organization.component.d.ts +8 -0
- package/lib/Pages/organization/organization.module.d.ts +24 -0
- package/lib/Pages/organization/organization.routing.d.ts +7 -0
- package/lib/Pages/providers/provider/provider.component.d.ts +17 -8
- package/lib/Pages/roles/permissions/permissions.component.d.ts +14 -5
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +21 -8
- package/lib/Pages/sectors/sector/sector.component.d.ts +12 -1
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +2 -0
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/SectorService.service.d.ts +1 -0
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +1 -1
- package/lib/Pages/shared/Services/injectionModuleService.service.d.ts +2 -0
- package/lib/Pages/shared/Services/organization.service.d.ts +17 -0
- package/lib/Pages/shared/Services/userService.service.d.ts +4 -1
- package/lib/Pages/shared/config.service.d.ts +8 -0
- package/lib/Pages/shared/constants.d.ts +1 -0
- package/lib/Pages/shared/index.d.ts +5 -0
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +32 -28
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +1 -0
- package/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.d.ts +1 -0
- package/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.d.ts +8 -6
- package/lib/Pages/shared/models/NotificationsModels/TemplateDTO.d.ts +0 -1
- package/lib/Pages/shared/models/PermissionsModels/PermissionModel.d.ts +17 -5
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.d.ts +20 -8
- package/lib/Pages/shared/models/SectorModels/SectorModel.d.ts +1 -0
- package/lib/Pages/shared/models/UserModels/DropdownsResponseModel.d.ts +2 -0
- package/lib/Pages/shared/models/UserModels/EditUserModel.d.ts +1 -0
- package/lib/Pages/shared/models/UserModels/ExportedFileDTO.d.ts +4 -0
- package/lib/Pages/shared/models/UserModels/FilteredUsersRequestModel.d.ts +7 -0
- package/lib/Pages/shared/models/UserModels/UserListingViewModel.d.ts +10 -0
- package/lib/Pages/shared/models/UserModels/UserModelDTO.d.ts +38 -0
- package/lib/Pages/shared/models/UserModels/UserSearchParamDTO.d.ts +1 -0
- package/lib/Pages/shared/models/UserModels/UsersCountsDTO.d.ts +5 -0
- package/lib/Pages/shared/models/UserModels/index.d.ts +12 -0
- package/lib/Pages/shared/models/index.d.ts +2 -0
- package/lib/Pages/shared/models/organization/organization.model.d.ts +22 -0
- package/lib/Pages/users/users.component.d.ts +17 -7
- package/lib/masterlayout.component.d.ts +1 -2
- package/lib/masterlayout.module.d.ts +1 -1
- package/package.json +7 -7
- package/src/lib/assets/images/menu/organization.svg +16 -0
- package/src/lib/assets/sass/custom-styles.scss +2 -2
- package/src/lib/assets/sass/style.scss +1 -0
- package/bnsights-bbsf-admin-portal-1.1.49.tgz +0 -0
- package/esm2022/lib/Pages/notifications/notifications-routing.module.mjs +0 -39
- package/esm2022/lib/masterlayout-routing.module.mjs +0 -41
- /package/lib/Pages/notifications/{notifications-routing.module.d.ts → notifications.routing.d.ts} +0 -0
- /package/lib/{masterlayout-routing.module.d.ts → masterlayout.routing.d.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, ViewChild } from '@angular/core';
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { Country, CustomValidation, FilterType, InputType, MultiLingualTextBoxOptions, PhoneOptions, TextBoxOptions, ToggleSlideOptions, EnglishArabicDTO, FormOptions, PagingActionMode, ProfileImageUploadOptions, ImageType } from '@bnsights/bbsf-controls';
|
|
3
|
+
import { Country, CustomValidation, FilterType, InputType, MultiLingualTextBoxOptions, PhoneOptions, TextBoxOptions, ToggleSlideOptions, EnglishArabicDTO, FormOptions, PagingActionMode, ProfileImageUploadOptions, ImageType, PermissionSets } from '@bnsights/bbsf-controls';
|
|
4
4
|
import { ControlLayout, DropdownOptions, FilterItem, PagingOptions } from '@bnsights/bbsf-controls';
|
|
5
5
|
import { AddUserModel } from '../shared/models/UserModels/AddUserModel';
|
|
6
6
|
import { EditUserModel } from '../shared/models/UserModels/EditUserModel';
|
|
@@ -39,7 +39,7 @@ export class UsersComponent {
|
|
|
39
39
|
this.IsFilterDataLoaded = false;
|
|
40
40
|
this.UserPagingResult = [];
|
|
41
41
|
this.clientSidePagingResult = [];
|
|
42
|
-
|
|
42
|
+
//#region Required lists
|
|
43
43
|
this.SelectedUserList = [];
|
|
44
44
|
this.permissionSetList = [];
|
|
45
45
|
this.permissionsList = [];
|
|
@@ -47,15 +47,19 @@ export class UsersComponent {
|
|
|
47
47
|
this.lockedStatusList = [];
|
|
48
48
|
this.departmentsList = [];
|
|
49
49
|
this.countriesList = [];
|
|
50
|
-
|
|
50
|
+
this.organizationList = [];
|
|
51
|
+
//#region Add Model Controls
|
|
51
52
|
this.AddUserForm = new FormGroup({});
|
|
52
53
|
this.AddUserFormOptions = new FormOptions;
|
|
53
|
-
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region Edit Model Controls
|
|
54
56
|
this.EditUserForm = new FormGroup({});
|
|
55
57
|
this.EditUserFormOptions = new FormOptions;
|
|
56
|
-
|
|
58
|
+
//#endregion
|
|
59
|
+
//#region Deactivate/Activate User Model Controls
|
|
57
60
|
this.ShowActivateModelData = false;
|
|
58
61
|
this.ActivatorDeactivateUserList = [];
|
|
62
|
+
//#endregion
|
|
59
63
|
//Reset Password User Model Controls
|
|
60
64
|
this.ResetPasswordUserList = [];
|
|
61
65
|
//set Password User Model Controls
|
|
@@ -75,32 +79,36 @@ export class UsersComponent {
|
|
|
75
79
|
this.showSendEmailBtn = false;
|
|
76
80
|
this.showGeneralBtns = true;
|
|
77
81
|
this.allSelected = false;
|
|
82
|
+
this.permissionSets = PermissionSets;
|
|
83
|
+
this.isMultiTenancyAllowed = false;
|
|
78
84
|
this.getAddUserModel = () => {
|
|
79
85
|
let paramArray = [];
|
|
80
86
|
let ResultModel = this.AddUserForm.value;
|
|
81
|
-
let
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
let addModel = new AddUserModel();
|
|
88
|
+
addModel.Username = ResultModel.Username;
|
|
89
|
+
addModel.Name = ResultModel.Name;
|
|
90
|
+
addModel.Nationality = ResultModel.Nationality;
|
|
91
|
+
addModel.EID = ResultModel.EID;
|
|
92
|
+
addModel.SamAccount = ResultModel.SamAccount;
|
|
93
|
+
addModel.OrganizationID_GUID = (this.isMultiTenancyAllowed && this.currentUserProfile.permissionSetSID == this.permissionSets.Admin)
|
|
94
|
+
? ResultModel[this.addUserOrganizations.name]
|
|
95
|
+
: this.currentUserProfile.organizationGUID_ID ?? Constants.OrganizationID_GUID;
|
|
88
96
|
if (ResultModel.DepartmentID_GUID != undefined)
|
|
89
|
-
|
|
97
|
+
addModel.DepartmentID_GUID = ResultModel.DepartmentID_GUID;
|
|
90
98
|
let PermissionSets = ResultModel.PermissionSets;
|
|
91
|
-
|
|
99
|
+
addModel.PermissionSets = PermissionSets;
|
|
92
100
|
let Permissions = ResultModel.Permissions;
|
|
93
|
-
|
|
94
|
-
|
|
101
|
+
addModel.Permissions = Permissions;
|
|
102
|
+
addModel.SendActivationMail = ResultModel.SendActivationMail;
|
|
95
103
|
let internationalNumber = null;
|
|
96
104
|
if (ResultModel.PhoneInputMobile != null) {
|
|
97
105
|
internationalNumber = ResultModel.PhoneInputMobile.internationalNumber;
|
|
98
106
|
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
99
107
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
paramArray.push(
|
|
108
|
+
addModel.PhoneInputMobile = internationalNumber;
|
|
109
|
+
addModel.ProfileImage = ResultModel.Image;
|
|
110
|
+
addModel.ForceUserChangePassword = ResultModel.ForceUserChangePassword;
|
|
111
|
+
paramArray.push(addModel);
|
|
104
112
|
return paramArray;
|
|
105
113
|
};
|
|
106
114
|
this.getAddUserFunction = (AddModel) => {
|
|
@@ -109,28 +117,31 @@ export class UsersComponent {
|
|
|
109
117
|
this.getEditUserModel = () => {
|
|
110
118
|
let paramArray = [];
|
|
111
119
|
let ResultModel = this.EditUserForm.value;
|
|
112
|
-
let
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
let editModel = new EditUserModel();
|
|
121
|
+
editModel.ID_GUID = this.UserId;
|
|
122
|
+
editModel.Username = ResultModel.Username;
|
|
123
|
+
editModel.Email = ResultModel.Email;
|
|
124
|
+
editModel.Name = ResultModel.Name;
|
|
125
|
+
editModel.Nationality = ResultModel.Nationality;
|
|
126
|
+
editModel.EID = ResultModel.EID;
|
|
127
|
+
editModel.SamAccount = ResultModel.SamAccount;
|
|
128
|
+
editModel.OrganizationID_GUID = (this.isMultiTenancyAllowed && this.currentUserProfile.permissionSetSID == this.permissionSets.Admin)
|
|
129
|
+
? ResultModel[this.editUserOrganization.name]
|
|
130
|
+
: this.currentUserProfile.organizationGUID_ID ?? Constants.OrganizationID_GUID;
|
|
120
131
|
if (ResultModel.DepartmentID_GUID != undefined)
|
|
121
|
-
|
|
132
|
+
editModel.DepartmentID = Number(ResultModel.DepartmentID_GUID);
|
|
122
133
|
let PermissionSets = ResultModel.PermissionSets;
|
|
123
|
-
|
|
134
|
+
editModel.PermissionSetIDs = PermissionSets;
|
|
124
135
|
let Permissions = ResultModel.Permissions;
|
|
125
|
-
|
|
136
|
+
editModel.PermissionIDs = Permissions;
|
|
126
137
|
let internationalNumber = null;
|
|
127
138
|
if (ResultModel.PhoneInputMobile != null) {
|
|
128
139
|
internationalNumber = ResultModel.PhoneInputMobile.internationalNumber;
|
|
129
140
|
internationalNumber = internationalNumber.replace(/\s/g, "");
|
|
130
141
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
paramArray.push(
|
|
142
|
+
editModel.Mobile = internationalNumber;
|
|
143
|
+
editModel.ProfileImage = ResultModel.Image;
|
|
144
|
+
paramArray.push(editModel);
|
|
134
145
|
return paramArray;
|
|
135
146
|
};
|
|
136
147
|
this.getEditUserFunction = (EditModel) => {
|
|
@@ -156,13 +167,23 @@ export class UsersComponent {
|
|
|
156
167
|
this.ShowPageContent = true;
|
|
157
168
|
PageInfoService.PageTitle = this.utilityService.getResourceValue("Users");
|
|
158
169
|
PageInfoService.PageBreadcrumbs = [
|
|
159
|
-
{
|
|
160
|
-
|
|
170
|
+
{
|
|
171
|
+
title: this.utilityService.getResourceValue("Home"),
|
|
172
|
+
path: '/Admin/Home',
|
|
173
|
+
isSeparator: false, isActive: false
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
title: '',
|
|
177
|
+
path: '',
|
|
178
|
+
isSeparator: true, isActive: false
|
|
179
|
+
}
|
|
161
180
|
];
|
|
162
181
|
this.pageInfoService.calculateTitle();
|
|
163
182
|
this.pageInfoService.calculateBreadcrumbs();
|
|
164
183
|
this.ProductionMode = this.environmentService.getProductionMode();
|
|
165
184
|
this.initializePage();
|
|
185
|
+
this.currentUserProfile = this.authService.getCurrentUser().profile;
|
|
186
|
+
this.isMultiTenancyAllowed = this.environmentService.getAllowMultiTenancy();
|
|
166
187
|
}
|
|
167
188
|
//Paging functions
|
|
168
189
|
setUsersListResult(result) {
|
|
@@ -184,7 +205,7 @@ export class UsersComponent {
|
|
|
184
205
|
else
|
|
185
206
|
this.clientSidePagingResult = this.UserPagingResult;
|
|
186
207
|
}
|
|
187
|
-
|
|
208
|
+
//#region Initialize filters and paging
|
|
188
209
|
initializePage() {
|
|
189
210
|
// Permission Sets init
|
|
190
211
|
this.permissionSetsOptions = new DropdownOptions();
|
|
@@ -209,6 +230,11 @@ export class UsersComponent {
|
|
|
209
230
|
this.departmentsOptions.labelKey = "Departments";
|
|
210
231
|
this.departmentsOptions.singleSelection = false;
|
|
211
232
|
this.departmentsOptions.allowSearchFilter = true;
|
|
233
|
+
this.organizationOptions = new DropdownOptions();
|
|
234
|
+
this.organizationOptions.name = "organization";
|
|
235
|
+
this.organizationOptions.labelKey = "Organizations";
|
|
236
|
+
this.organizationOptions.singleSelection = true;
|
|
237
|
+
this.organizationOptions.allowSearchFilter = true;
|
|
212
238
|
// TextBox init
|
|
213
239
|
this.searchTextBox = new TextBoxOptions();
|
|
214
240
|
this.searchTextBox.name = "searchTextBox";
|
|
@@ -218,40 +244,66 @@ export class UsersComponent {
|
|
|
218
244
|
this.searchTextBox.placeholder = this.utilityService.getResourceValue("SearchByNameOrEmail");
|
|
219
245
|
//Filters
|
|
220
246
|
this.TextInputFilter = new FilterItem();
|
|
221
|
-
this.TextInputFilter.formControlName =
|
|
247
|
+
this.TextInputFilter.formControlName = this.searchTextBox.name;
|
|
222
248
|
this.TextInputFilter.actionParameterName = "nameFilter";
|
|
223
249
|
this.TextInputFilter.isFormControl = true;
|
|
224
250
|
this.TextInputFilter.filterType = FilterType.TextBox;
|
|
225
251
|
this.permissionSetsFilter = new FilterItem();
|
|
226
|
-
this.permissionSetsFilter.formControlName =
|
|
252
|
+
this.permissionSetsFilter.formControlName = this.permissionSetsOptions.name;
|
|
227
253
|
this.permissionSetsFilter.actionParameterName = "PermissionSetIds";
|
|
228
254
|
this.permissionSetsFilter.isFormControl = true;
|
|
229
255
|
this.permissionSetsFilter.filterType = FilterType.DropdownList;
|
|
230
256
|
this.accountStatusFilter = new FilterItem();
|
|
231
|
-
this.accountStatusFilter.formControlName =
|
|
257
|
+
this.accountStatusFilter.formControlName = this.accountStatusOptions.name;
|
|
232
258
|
this.accountStatusFilter.actionParameterName = "accountStatusIDs";
|
|
233
259
|
this.accountStatusFilter.isFormControl = true;
|
|
234
260
|
this.accountStatusFilter.filterType = FilterType.DropdownList;
|
|
235
261
|
this.lockedStatusFilter = new FilterItem();
|
|
236
|
-
this.lockedStatusFilter.formControlName =
|
|
262
|
+
this.lockedStatusFilter.formControlName = this.lockedStatusOptions.name;
|
|
237
263
|
this.lockedStatusFilter.actionParameterName = "lockedStatusIds";
|
|
238
264
|
this.lockedStatusFilter.isFormControl = true;
|
|
239
265
|
this.lockedStatusFilter.filterType = FilterType.DropdownList;
|
|
240
266
|
this.departmentsFilter = new FilterItem();
|
|
241
|
-
this.departmentsFilter.formControlName =
|
|
267
|
+
this.departmentsFilter.formControlName = this.departmentsOptions.name;
|
|
242
268
|
this.departmentsFilter.actionParameterName = "departmentIds";
|
|
243
269
|
this.departmentsFilter.isFormControl = true;
|
|
244
270
|
this.departmentsFilter.filterType = FilterType.DropdownList;
|
|
271
|
+
if (this.isMultiTenancyAllowed && this.currentUserProfile.permissionSetSID == this.permissionSets.Admin) {
|
|
272
|
+
this.UserPaging.filters = this.UserPaging.filters ?? [];
|
|
273
|
+
this.UserPaging.dropdownFiltersControlNames = this.UserPaging.dropdownFiltersControlNames ?? [];
|
|
274
|
+
this.organizationsFilter = new FilterItem();
|
|
275
|
+
this.organizationsFilter.formControlName = this.organizationOptions.name;
|
|
276
|
+
this.organizationsFilter.actionParameterName = "organizationId";
|
|
277
|
+
this.organizationsFilter.isFormControl = true;
|
|
278
|
+
this.organizationsFilter.filterType = FilterType.DropdownList;
|
|
279
|
+
this.UserPaging.filters.push(this.organizationsFilter);
|
|
280
|
+
this.UserPaging.dropdownFiltersControlNames.push(this.organizationsFilter.formControlName);
|
|
281
|
+
}
|
|
245
282
|
this.UserPaging = new PagingOptions();
|
|
246
283
|
this.UserPaging.actionPostURL = this.ApiUrl + 'GetUsersByFilter';
|
|
247
|
-
this.UserPaging.onKeyPressFiltersControlNames = [
|
|
248
|
-
|
|
249
|
-
|
|
284
|
+
this.UserPaging.onKeyPressFiltersControlNames = [
|
|
285
|
+
this.searchTextBox.name
|
|
286
|
+
];
|
|
287
|
+
this.UserPaging.dropdownFiltersControlNames = [
|
|
288
|
+
...this.UserPaging.dropdownFiltersControlNames,
|
|
289
|
+
this.permissionSetsFilter.formControlName,
|
|
290
|
+
this.lockedStatusFilter.formControlName,
|
|
291
|
+
this.accountStatusFilter.formControlName,
|
|
292
|
+
this.departmentsFilter.formControlName,
|
|
293
|
+
];
|
|
294
|
+
this.UserPaging.filters = [
|
|
295
|
+
this.permissionSetsFilter,
|
|
296
|
+
this.lockedStatusFilter,
|
|
297
|
+
this.accountStatusFilter,
|
|
298
|
+
this.departmentsFilter,
|
|
299
|
+
this.TextInputFilter
|
|
300
|
+
];
|
|
250
301
|
this.UserPaging.validationToken = this.authService.authorizationHeaderValue();
|
|
251
302
|
this.UserPaging.resetFilterButtonName = "usersFiltersBtn";
|
|
252
303
|
this.IsFilterLoaded = true;
|
|
253
304
|
}
|
|
254
|
-
|
|
305
|
+
//#endregion
|
|
306
|
+
//#region Load lists for filters
|
|
255
307
|
loadLists() {
|
|
256
308
|
if (!this.IsFilterDataLoaded) {
|
|
257
309
|
this.userService.Loaddropdowns().subscribe((result) => {
|
|
@@ -260,19 +312,23 @@ export class UsersComponent {
|
|
|
260
312
|
this.accountStatusList = DropdownsResponseModel.accountStatus;
|
|
261
313
|
this.lockedStatusList = DropdownsResponseModel.lockedStatus;
|
|
262
314
|
this.departmentsList = DropdownsResponseModel.departments;
|
|
315
|
+
this.organizationList = DropdownsResponseModel.organizations;
|
|
263
316
|
let permissionSetElement = this.permissionSetDDL;
|
|
264
317
|
let accountStatusElement = this.accountStatusDDL;
|
|
265
318
|
let lockedStatusElement = this.lockedStatusDDL;
|
|
266
319
|
let departmentsElement = this.departmentsDDL;
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
320
|
+
let organizationsElement = this.organizationDDL;
|
|
321
|
+
permissionSetElement.updateDataSource(this.permissionSetList);
|
|
322
|
+
accountStatusElement.updateDataSource(this.accountStatusList);
|
|
323
|
+
lockedStatusElement.updateDataSource(this.lockedStatusList);
|
|
324
|
+
departmentsElement.updateDataSource(this.departmentsList);
|
|
325
|
+
organizationsElement.updateDataSource(this.organizationList);
|
|
271
326
|
this.IsFilterDataLoaded = true;
|
|
272
327
|
});
|
|
273
328
|
}
|
|
274
329
|
}
|
|
275
|
-
|
|
330
|
+
//#endregion
|
|
331
|
+
//#region Users checkboxes selection functions
|
|
276
332
|
selectAllUserList(event, Users) {
|
|
277
333
|
if (this.UserPagingResult == null) {
|
|
278
334
|
return;
|
|
@@ -336,9 +392,8 @@ export class UsersComponent {
|
|
|
336
392
|
enableButtons() {
|
|
337
393
|
//Reset all btns
|
|
338
394
|
this.disableButtons();
|
|
339
|
-
if (this.activatedUsersSelected == 0 && this.deActivatedUsersSelected == 0)
|
|
395
|
+
if (this.activatedUsersSelected == 0 && this.deActivatedUsersSelected == 0)
|
|
340
396
|
this.showGeneralBtns = true;
|
|
341
|
-
}
|
|
342
397
|
else {
|
|
343
398
|
this.showGeneralBtns = false;
|
|
344
399
|
//if only activated users
|
|
@@ -373,7 +428,8 @@ export class UsersComponent {
|
|
|
373
428
|
this.deActivatedUsersSelected = 0;
|
|
374
429
|
this.UserPagingResult.forEach(u => u.selected = false);
|
|
375
430
|
}
|
|
376
|
-
|
|
431
|
+
//#endregion
|
|
432
|
+
//#region Add User
|
|
377
433
|
showAddUserModal(addUserModal) {
|
|
378
434
|
this.utilityService.startBlockUI();
|
|
379
435
|
this.userService.LoadAddDropdowns().subscribe((result) => {
|
|
@@ -382,6 +438,7 @@ export class UsersComponent {
|
|
|
382
438
|
this.permissionSetList = DropdownsResponseModel.permessionsets;
|
|
383
439
|
this.departmentsList = DropdownsResponseModel.departments;
|
|
384
440
|
this.countriesList = DropdownsResponseModel.countries;
|
|
441
|
+
this.organizationList = DropdownsResponseModel.organizations;
|
|
385
442
|
this.AddUserForm = new FormGroup({});
|
|
386
443
|
this.AddUserFormOptions = new FormOptions();
|
|
387
444
|
this.AddUserFormOptions.formGroup = this.AddUserForm;
|
|
@@ -466,11 +523,21 @@ export class UsersComponent {
|
|
|
466
523
|
this.AddForceUserChangePassword.labelKey = "ForceUserChangePassword";
|
|
467
524
|
this.AddForceUserChangePassword.value = false;
|
|
468
525
|
this.AddForceUserChangePassword.viewType = ControlLayout.Horizontal;
|
|
526
|
+
if (this.isMultiTenancyAllowed && this.currentUserProfile.permissionSetSID == this.permissionSets.Admin) {
|
|
527
|
+
this.addUserOrganizations = new DropdownOptions();
|
|
528
|
+
this.addUserOrganizations.name = "organizationId";
|
|
529
|
+
this.addUserOrganizations.labelKey = "Organization";
|
|
530
|
+
this.addUserOrganizations.selectedItems = null;
|
|
531
|
+
this.addUserOrganizations.dataSource = this.organizationList;
|
|
532
|
+
this.addUserOrganizations.singleSelection = true;
|
|
533
|
+
this.addUserOrganizations.allowSearchFilter = true;
|
|
534
|
+
}
|
|
469
535
|
this.modalService.open(addUserModal);
|
|
470
536
|
this.utilityService.stopBlockUI();
|
|
471
537
|
});
|
|
472
538
|
}
|
|
473
|
-
|
|
539
|
+
//#endregion
|
|
540
|
+
//#region Edit User
|
|
474
541
|
showEditUserModal(userID, EditUserModal) {
|
|
475
542
|
this.utilityService.startBlockUI();
|
|
476
543
|
this.UserId = userID;
|
|
@@ -482,6 +549,7 @@ export class UsersComponent {
|
|
|
482
549
|
this.permissionsList = lists.permessions;
|
|
483
550
|
this.departmentsList = lists.departments;
|
|
484
551
|
this.countriesList = lists.countries;
|
|
552
|
+
this.organizationList = lists.organizations;
|
|
485
553
|
this.EditUserForm = new FormGroup({});
|
|
486
554
|
this.EditUserFormOptions = new FormOptions();
|
|
487
555
|
this.EditUserFormOptions.formGroup = this.EditUserForm;
|
|
@@ -535,6 +603,15 @@ export class UsersComponent {
|
|
|
535
603
|
this.EditUserDepartment.dataSource = this.departmentsList;
|
|
536
604
|
this.EditUserDepartment.singleSelection = true;
|
|
537
605
|
this.EditUserDepartment.allowSearchFilter = true;
|
|
606
|
+
if (this.isMultiTenancyAllowed && this.currentUserProfile.permissionSetSID == this.permissionSets.Admin) {
|
|
607
|
+
this.editUserOrganization = new DropdownOptions();
|
|
608
|
+
this.editUserOrganization.name = "organizationId";
|
|
609
|
+
this.editUserOrganization.labelKey = "Organization";
|
|
610
|
+
this.editUserOrganization.selectedItems = null;
|
|
611
|
+
this.editUserOrganization.dataSource = this.organizationList;
|
|
612
|
+
this.editUserOrganization.singleSelection = true;
|
|
613
|
+
this.editUserOrganization.allowSearchFilter = true;
|
|
614
|
+
}
|
|
538
615
|
this.EditUserPermissionSet = new DropdownOptions();
|
|
539
616
|
this.EditUserPermissionSet.name = "PermissionSets";
|
|
540
617
|
this.EditUserPermissionSet.labelKey = "PermissionSets";
|
|
@@ -592,7 +669,8 @@ export class UsersComponent {
|
|
|
592
669
|
}
|
|
593
670
|
});
|
|
594
671
|
}
|
|
595
|
-
|
|
672
|
+
//#endregion
|
|
673
|
+
//#region Export users excel
|
|
596
674
|
exportExcel() {
|
|
597
675
|
let filters = {};
|
|
598
676
|
filters = this.pagingElement.getFiltersValue();
|
|
@@ -606,6 +684,7 @@ export class UsersComponent {
|
|
|
606
684
|
}, (error) => {
|
|
607
685
|
});
|
|
608
686
|
}
|
|
687
|
+
//#endregion
|
|
609
688
|
//One user functions
|
|
610
689
|
//Activation and deactivation functions
|
|
611
690
|
showActivateUserModal(User, isActivateModel, ActivateUserModal) {
|
|
@@ -636,7 +715,7 @@ export class UsersComponent {
|
|
|
636
715
|
}, (error) => {
|
|
637
716
|
});
|
|
638
717
|
}
|
|
639
|
-
|
|
718
|
+
//#region Reset Password Functions
|
|
640
719
|
showResetPasswordUserModal(User, ResetPasswordUserModal) {
|
|
641
720
|
this.utilityService.startBlockUI();
|
|
642
721
|
this.ResetPasswordUserList = [];
|
|
@@ -655,6 +734,7 @@ export class UsersComponent {
|
|
|
655
734
|
}, (error) => {
|
|
656
735
|
});
|
|
657
736
|
}
|
|
737
|
+
//#endregion
|
|
658
738
|
//Send activation mail function
|
|
659
739
|
showSendActivationEmailModal(User, SendActivationEmailModal) {
|
|
660
740
|
this.utilityService.startBlockUI();
|
|
@@ -774,11 +854,11 @@ export class UsersComponent {
|
|
|
774
854
|
this.requestHandlerService.destroyHandler();
|
|
775
855
|
}
|
|
776
856
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: UsersComponent, deps: [{ token: i1.AuthService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i2.PageInfoService }, { token: i3.UserService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
777
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: UsersComponent, selector: "lib-users", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPagingViewElement"], descendants: true }, { propertyName: "permissionSetDDL", first: true, predicate: ["permissionSetDDL"], descendants: true }, { propertyName: "accountStatusDDL", first: true, predicate: ["accountStatusDDL"], descendants: true }, { propertyName: "lockedStatusDDL", first: true, predicate: ["lockedStatusDDL"], descendants: true }, { propertyName: "departmentsDDL", first: true, predicate: ["departmentsDDL"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\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]=\"UsersForm\">\r\n <!-- (OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" 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\"\r\n 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\"\r\n 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 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></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=\"usersFiltersBtn\">\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 *ngIf=\"showGeneralBtns\" href=\"javascript:;\" type=\"button\" (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\" title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{utilityService.getResourceValue(\"Export\")}}\r\n </button>\r\n <button *ngIf=\"showActivateBtn\" type=\"button\" id=\"btnActivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{utilityService.getResourceValue(\"Activate\")}}\r\n </button>\r\n <button *ngIf=\"showDeactivateBtn\" type=\"button\" id=\"btnDeactivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{utilityService.getResourceValue(\"Deactivate\")}}\r\n </button>\r\n <button *ngIf=\"showResetPassBtn\" type=\"button\" id=\"btnResetPass\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{utilityService.getResourceValue(\"ResetPassword\")}}\r\n </button>\r\n <button *ngIf=\"showSendEmailBtn\" type=\"button\" id=\"btnResendActivation\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4 , ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{utilityService.getResourceValue(\"SendActivationEmail\")}}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <!-- 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 <!-- begin::Table container -->\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 users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event,clientSidePagingResult)\" [checked]=\"allSelected\">\r\n </mat-checkbox>\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"selectAllUserList($event,UserPagingResult)\" id=\"chk_SelectAll\">-->\r\n <span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mobile\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"updateUserList($event,user)\" id=\"User-{{user.id}}\">-->\r\n <span></span>\r\n <mat-checkbox (change)=\"updateUserList($event,user)\" [(ngModel)]=\"user.selected\">\r\n </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a (click)=\"showEditUserModal(user.iD_GUID,EditUserModal)\" href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">{{user.nameStr}}</a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{user.username}}</td>\r\n <td>{{user.mobile}}</td>\r\n <td>{{user.permissionset}}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive==true\">\r\n {{utilityService.getResourceValue(\"Active\")}}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive==false&& user.activationDate!=null\">\r\n {{utilityService.getResourceValue(\"Deactivated\")}}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive==false&& user.activationDate==null\">\r\n {{utilityService.getResourceValue(\"PendingActivation\")}}\r\n </span>\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 <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem (click)=\"showEditUserModal(user.iD_GUID,EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" *ngIf=\"user.isActive\" id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user,false,ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Deactivate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnactivate\" (click)=\"showActivateUserModal(user,true,ActivateUserModal)\"\r\n *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Activate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user , ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"ResetPassword\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SetPassword\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" *ngIf=\"!user.isActive&&user.activationDate==null\"\r\n (click)=\"showSendActivationEmailModal(user , SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SendActivationEmail\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\" [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal 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\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\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(\"AddUser\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (OnChange)=\"changePermissionSet($event,true)\" [options]=\"AddUserPermissionSet\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUserModal id=\"CloseUserModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </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\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal 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(\"EditUser\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (OnChange)=\"changePermissionSet($event,false)\" [options]=\"EditUserPermissionSet\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" #CloseEditUserModal id=\"CloseEditUserModal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</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\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal 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\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Deactivate\")}}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"DeactivateConfirmation\")}}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{Name}}</td>\r\n <td>{{Email}}</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 type=\"button\" #CloseActivateUserModal id=\"CloseActivateUserModal\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal 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(\"ResetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ResetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\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-200\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-200\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{Name}}</td>\r\n <td>{{Email}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button id=\"CloseResetPasswordUserModal\" #CloseResetPasswordUserModal type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal 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(\"SetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"SetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table 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-50\"> {{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-50\"> {{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Password\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"ConfirmPassword\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{Name}}</td>\r\n <td class=\"align-middle\">{{Email}}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button id=\"ClosesetPasswordUserModal\" #ClosesetPasswordUserModal type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</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\r\n\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal 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(\"SendActivationEmail\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\">\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{user.nameStr}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseActivationEmailModal id=\"CloseActivationEmailModal\" type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"sendActivationEmailForUser()\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal 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(\"ConfirmationMessage\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ConfirmationMessage}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{user.nameStr}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==1\" (click)=\"activateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==2\" (click)=\"deactivateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==3\" (click)=\"resetUserPasswordList()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==4\" (click)=\"sendActivationEmailForUser()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "component", type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { 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.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.ProfileImageUploaderComponent, selector: "BBSF-ProfileImageUploader", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i4.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { 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: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
857
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.6", type: UsersComponent, selector: "lib-users", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["UserPagingViewElement"], descendants: true }, { propertyName: "permissionSetDDL", first: true, predicate: ["permissionSetDDL"], descendants: true }, { propertyName: "accountStatusDDL", first: true, predicate: ["accountStatusDDL"], descendants: true }, { propertyName: "lockedStatusDDL", first: true, predicate: ["lockedStatusDDL"], descendants: true }, { propertyName: "departmentsDDL", first: true, predicate: ["departmentsDDL"], descendants: true }, { propertyName: "organizationDDL", first: true, predicate: ["organizationDDL"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\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]=\"UsersForm\">\r\n <!-- (onChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{ display: ShowPageContent == true ? 'block' : 'none' }\">\r\n <button\r\n (click)=\"loadLists()\"\r\n ngbDropdownToggle\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n id=\"FiltersDropdown\"\r\n title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div\r\n *ngIf=\"IsFilterLoaded\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"FiltersDropdown\"\r\n 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 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin\">\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\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=\"usersFiltersBtn\">\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\r\n *ngIf=\"showGeneralBtns\"\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\"\r\n title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{ utilityService.getResourceValue('Export') }}\r\n </button>\r\n <button\r\n *ngIf=\"showActivateBtn\"\r\n type=\"button\"\r\n id=\"btnActivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{ utilityService.getResourceValue('Activate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showDeactivateBtn\"\r\n type=\"button\"\r\n id=\"btnDeactivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{ utilityService.getResourceValue('Deactivate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showResetPassBtn\"\r\n type=\"button\"\r\n id=\"btnResetPass\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{ utilityService.getResourceValue('ResetPassword') }}\r\n </button>\r\n <button\r\n *ngIf=\"showSendEmailBtn\"\r\n type=\"button\"\r\n id=\"btnResendActivation\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4, ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{ utilityService.getResourceValue('SendActivationEmail') }}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{ utilityService.getResourceValue('Add') }}\r\n </button>\r\n <!-- 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 <!-- begin::Table container -->\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 users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event, clientSidePagingResult)\" [checked]=\"allSelected\"> </mat-checkbox>\r\n <span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Mobile') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Roles') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Status') }}</th>\r\n <th *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\" class=\"min-w-150px\">\r\n {{ utilityService.getResourceValue('Organizations') }}\r\n </th>\r\n <th class=\"min-w-50px\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"updateUserList($event, user)\" [(ngModel)]=\"user.selected\"> </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a\r\n (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\"\r\n href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">\r\n {{ user.nameStr }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{ user.username }}</td>\r\n <td>{{ user.mobile ?? '-' }}</td>\r\n <td>{{ user.permissionset }}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive == true\">\r\n {{ utilityService.getResourceValue('Active') }}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive == false && user.activationDate != null\">\r\n {{ utilityService.getResourceValue('Deactivated') }}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive == false && user.activationDate == null\">\r\n {{ utilityService.getResourceValue('PendingActivation') }}\r\n </span>\r\n </td>\r\n <td *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\">{{ user.organizationName ?? '-' }}</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 class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n *ngIf=\"user.isActive\"\r\n id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user, false, ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Deactivate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnactivate\"\r\n (click)=\"showActivateUserModal(user, true, ActivateUserModal)\"\r\n *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Activate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user, ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('ResetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SetPassword') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n *ngIf=\"!user.isActive && user.activationDate == null\"\r\n (click)=\"showSendActivationEmailModal(user, SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\" [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal 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\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\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('AddUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"addUserOrganizations\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, true)\" [options]=\"AddUserPermissionSet\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseUserModal\r\n id=\"CloseUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (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<!-- Edit user-->\r\n<ng-template #EditUserModal 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('EditUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"editUserOrganization\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, false)\" [options]=\"EditUserPermissionSet\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n #CloseEditUserModal\r\n id=\"CloseEditUserModal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (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<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal 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\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Deactivate') }}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Activate') }}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('DeactivateConfirmation') }}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{ Name }}</td>\r\n <td>{{ Email }}</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\r\n type=\"button\"\r\n #CloseActivateUserModal\r\n id=\"CloseActivateUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal 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('ResetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ResetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\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-200\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"CloseResetPasswordUserModal\"\r\n #CloseResetPasswordUserModal\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal 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('SetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('SetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table 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-50\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Password') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('ConfirmPassword') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{ Name }}</td>\r\n <td class=\"align-middle\">{{ Email }}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"ClosesetPasswordUserModal\"\r\n #ClosesetPasswordUserModal\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (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<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal 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('SendActivationEmail') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\"></div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ 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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n #CloseActivationEmailModal\r\n id=\"CloseActivationEmailModal\"\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal 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('ConfirmationMessage') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ ConfirmationMessage }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ 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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 1\" (click)=\"activateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 2\" (click)=\"deactivateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 3\" (click)=\"resetUserPasswordList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 4\" (click)=\"sendActivationEmailForUser()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", dependencies: [{ kind: "component", type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { 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.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.ProfileImageUploaderComponent, selector: "BBSF-ProfileImageUploader", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "directive", type: i4.NgbDropdownButtonItem, selector: "button[ngbDropdownItem]" }, { 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: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
778
858
|
}
|
|
779
859
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: UsersComponent, decorators: [{
|
|
780
860
|
type: Component,
|
|
781
|
-
args: [{ selector: 'lib-users', template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\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]=\"UsersForm\">\r\n <!-- (OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" 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\"\r\n 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\"\r\n 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 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></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=\"usersFiltersBtn\">\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 *ngIf=\"showGeneralBtns\" href=\"javascript:;\" type=\"button\" (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\" title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{utilityService.getResourceValue(\"Export\")}}\r\n </button>\r\n <button *ngIf=\"showActivateBtn\" type=\"button\" id=\"btnActivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{utilityService.getResourceValue(\"Activate\")}}\r\n </button>\r\n <button *ngIf=\"showDeactivateBtn\" type=\"button\" id=\"btnDeactivate\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{utilityService.getResourceValue(\"Deactivate\")}}\r\n </button>\r\n <button *ngIf=\"showResetPassBtn\" type=\"button\" id=\"btnResetPass\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{utilityService.getResourceValue(\"ResetPassword\")}}\r\n </button>\r\n <button *ngIf=\"showSendEmailBtn\" type=\"button\" id=\"btnResendActivation\" class=\"btn btn-sm btn-light-primary me-3\" href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4 , ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{utilityService.getResourceValue(\"SendActivationEmail\")}}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n <!-- 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 <!-- begin::Table container -->\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 users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event,clientSidePagingResult)\" [checked]=\"allSelected\">\r\n </mat-checkbox>\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"selectAllUserList($event,UserPagingResult)\" id=\"chk_SelectAll\">-->\r\n <span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mobile\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Roles\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Status\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <!--<input type=\"checkbox\" class=\"form-check-input\" (change)=\"updateUserList($event,user)\" id=\"User-{{user.id}}\">-->\r\n <span></span>\r\n <mat-checkbox (change)=\"updateUserList($event,user)\" [(ngModel)]=\"user.selected\">\r\n </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a (click)=\"showEditUserModal(user.iD_GUID,EditUserModal)\" href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">{{user.nameStr}}</a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{user.username}}</td>\r\n <td>{{user.mobile}}</td>\r\n <td>{{user.permissionset}}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive==true\">\r\n {{utilityService.getResourceValue(\"Active\")}}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive==false&& user.activationDate!=null\">\r\n {{utilityService.getResourceValue(\"Deactivated\")}}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive==false&& user.activationDate==null\">\r\n {{utilityService.getResourceValue(\"PendingActivation\")}}\r\n </span>\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 <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem (click)=\"showEditUserModal(user.iD_GUID,EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" *ngIf=\"user.isActive\" id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user,false,ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Deactivate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnactivate\" (click)=\"showActivateUserModal(user,true,ActivateUserModal)\"\r\n *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"Activate\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user , ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"ResetPassword\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SetPassword\")}}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" *ngIf=\"!user.isActive&&user.activationDate==null\"\r\n (click)=\"showSendActivationEmailModal(user , SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{utilityService.getResourceValue(\"SendActivationEmail\")}}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\" [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal 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\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\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(\"AddUser\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (OnChange)=\"changePermissionSet($event,true)\" [options]=\"AddUserPermissionSet\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseUserModal id=\"CloseUserModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </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\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Edit user-->\r\n<ng-template #EditUserModal 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(\"EditUser\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (OnChange)=\"changePermissionSet($event,false)\" [options]=\"EditUserPermissionSet\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" data-dismiss=\"modal\" #CloseEditUserModal id=\"CloseEditUserModal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</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\r\n </div>\r\n</ng-template>\r\n<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal 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\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Deactivate\")}}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{utilityService.getResourceValue(\"Activate\")}}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"DeactivateConfirmation\")}}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{Name}}</td>\r\n <td>{{Email}}</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 type=\"button\" #CloseActivateUserModal id=\"CloseActivateUserModal\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal 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(\"ResetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ResetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\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-200\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-200\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{Name}}</td>\r\n <td>{{Email}}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button id=\"CloseResetPasswordUserModal\" #CloseResetPasswordUserModal type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal 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(\"SetPassword\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"SetPasswordConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table 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-50\"> {{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-50\"> {{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"Password\")}}</th>\r\n <th class=\"min-w-150\"> {{utilityService.getResourceValue(\"ConfirmPassword\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{Name}}</td>\r\n <td class=\"align-middle\">{{Email}}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button id=\"ClosesetPasswordUserModal\" #ClosesetPasswordUserModal type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</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\r\n\r\n\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal 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(\"SendActivationEmail\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"ActivateConfirmation\")}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\">\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{user.nameStr}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseActivationEmailModal id=\"CloseActivationEmailModal\" type=\"button\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}}</button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"sendActivationEmailForUser()\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal 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(\"ConfirmationMessage\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ConfirmationMessage}}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150\">{{utilityService.getResourceValue(\"Email\")}}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length>1\">{{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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{user.nameStr}}</td>\r\n\r\n <td>{{user.username}}</td>\r\n <td *ngIf=\"SelectedUserList.length>1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==1\" (click)=\"activateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==2\" (click)=\"deactivateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==3\" (click)=\"resetUserPasswordList()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType==4\" (click)=\"sendActivationEmailForUser()\" class=\"btn btn-primary btn-sm\">\r\n {{utilityService.getResourceValue(\"SaveLabel\")}}\r\n </button>\r\n\r\n </div>\r\n </div>\r\n</ng-template>" }]
|
|
861
|
+
args: [{ selector: 'lib-users', template: "<block-ui></block-ui>\r\n<div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <!-- begin::Header -->\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]=\"UsersForm\">\r\n <!-- (onChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"UsersForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <div *ngIf=\"showGeneralBtns\" ngbDropdown class=\"d-inline-block\" [ngStyle]=\"{ display: ShowPageContent == true ? 'block' : 'none' }\">\r\n <button\r\n (click)=\"loadLists()\"\r\n ngbDropdownToggle\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n id=\"FiltersDropdown\"\r\n title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div\r\n *ngIf=\"IsFilterLoaded\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"FiltersDropdown\"\r\n 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 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"UsersForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #permissionSetDDL [options]=\"permissionSetsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #accountStatusDDL [options]=\"accountStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #lockedStatusDDL [options]=\"lockedStatusOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\">\r\n <div class=\"mb-10\">\r\n <BBSF-DropdownList #departmentsDDL [options]=\"departmentsOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div *ngIf=\"isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin\">\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\" [group]=\"UsersForm\"></BBSF-DropdownList>\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=\"usersFiltersBtn\">\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\r\n *ngIf=\"showGeneralBtns\"\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n (click)=\"exportExcel()\"\r\n class=\"btn btn-sm btn-light-primary me-3 bnsights-btn-export\"\r\n title=\"Export\">\r\n <i class=\"fas fa-download me-1\"></i>\r\n {{ utilityService.getResourceValue('Export') }}\r\n </button>\r\n <button\r\n *ngIf=\"showActivateBtn\"\r\n type=\"button\"\r\n id=\"btnActivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(1, ConfirmationModal)\">\r\n <i class=\"fa fa-history\"></i> {{ utilityService.getResourceValue('Activate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showDeactivateBtn\"\r\n type=\"button\"\r\n id=\"btnDeactivate\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(2, ConfirmationModal)\">\r\n <i class=\"fa fa-power-off\"></i>{{ utilityService.getResourceValue('Deactivate') }}\r\n </button>\r\n <button\r\n *ngIf=\"showResetPassBtn\"\r\n type=\"button\"\r\n id=\"btnResetPass\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(3, ConfirmationModal)\">\r\n <i class=\"fa fa-cog\"></i>{{ utilityService.getResourceValue('ResetPassword') }}\r\n </button>\r\n <button\r\n *ngIf=\"showSendEmailBtn\"\r\n type=\"button\"\r\n id=\"btnResendActivation\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n href=\"javascript:;\"\r\n (click)=\"showConfirmationModal(4, ConfirmationModal)\">\r\n <i class=\"fa fa-envelope\"></i> {{ utilityService.getResourceValue('SendActivationEmail') }}\r\n </button>\r\n <button *ngIf=\"showGeneralBtns\" type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddUserModal(addUserModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{ utilityService.getResourceValue('Add') }}\r\n </button>\r\n <!-- 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 <!-- begin::Table container -->\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 users-table\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"w-50px\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"selectAllUserList($event, clientSidePagingResult)\" [checked]=\"allSelected\"> </mat-checkbox>\r\n <span></span>\r\n </label>\r\n </span>\r\n </th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Mobile') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Roles') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Status') }}</th>\r\n <th *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\" class=\"min-w-150px\">\r\n {{ utilityService.getResourceValue('Organizations') }}\r\n </th>\r\n <th class=\"min-w-50px\">{{ utilityService.getResourceValue('Action') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let user of clientSidePagingResult\">\r\n <td class=\"\">\r\n <span>\r\n <label class=\"form-check form-check-sm form-check-custom form-check-solid\">\r\n <mat-checkbox (change)=\"updateUserList($event, user)\" [(ngModel)]=\"user.selected\"> </mat-checkbox>\r\n </label>\r\n </span>\r\n </td>\r\n <td>\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"symbol symbol-35px\">\r\n <h6 class=\"symbol-label font-size-h5 font-weight-bold bg-light-primary ml-2 mb-0 me-3\">A</h6>\r\n </div>\r\n <div class=\"d-flex justify-content-start flex-column\">\r\n <a\r\n (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\"\r\n href=\"javascript:void(0)\"\r\n class=\"text-dark fw-bolder text-hover-primary fs-6\">\r\n {{ user.nameStr }}\r\n </a>\r\n </div>\r\n </div>\r\n </td>\r\n <td>{{ user.username }}</td>\r\n <td>{{ user.mobile ?? '-' }}</td>\r\n <td>{{ user.permissionset }}</td>\r\n <td>\r\n <span class=\"badge badge-light-success\" *ngIf=\"user.isActive == true\">\r\n {{ utilityService.getResourceValue('Active') }}\r\n </span>\r\n <span class=\"badge badge-light-danger\" *ngIf=\"user.isActive == false && user.activationDate != null\">\r\n {{ utilityService.getResourceValue('Deactivated') }}\r\n </span>\r\n <span class=\"badge badge-light-warning\" *ngIf=\"user.isActive == false && user.activationDate == null\">\r\n {{ utilityService.getResourceValue('PendingActivation') }}\r\n </span>\r\n </td>\r\n <td *ngIf=\"currentUserProfile.permissionSetSID == permissionSets.Admin\">{{ user.organizationName ?? '-' }}</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 class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <button type=\"button\" class=\"menu-item px-3\" ngbDropdownItem (click)=\"showEditUserModal(user.iD_GUID, EditUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n *ngIf=\"user.isActive\"\r\n id=\"btnDeactivate\"\r\n (click)=\"showActivateUserModal(user, false, ActivateUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Deactivate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnactivate\"\r\n (click)=\"showActivateUserModal(user, true, ActivateUserModal)\"\r\n *ngIf=\"!user.isActive\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('Activate') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n (click)=\"showResetPasswordUserModal(user, ResetPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('ResetPassword') }}</span>\r\n </button>\r\n <button ngbDropdownItem class=\"menu-item px-3\" id=\"btnResetPass\" (click)=\"showsetPasswordUserModal(user, setPasswordUserModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SetPassword') }}</span>\r\n </button>\r\n <button\r\n ngbDropdownItem\r\n class=\"menu-item px-3\"\r\n id=\"btnResetPass\"\r\n *ngIf=\"!user.isActive && user.activationDate == null\"\r\n (click)=\"showSendActivationEmailModal(user, SendActivationEmailModal)\">\r\n <span class=\"menu-link px-3\">{{ utilityService.getResourceValue('SendActivationEmail') }}</span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"6\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!-- end::Table -->\r\n </div>\r\n <!-- end::Table container -->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <!-- begin paging-->\r\n <BBSF-Paging (Items)=\"setUsersListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"UserPaging\" [group]=\"UsersForm\" #UserPagingViewElement>\r\n </BBSF-Paging>\r\n <!-- End paging-->\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- add user-->\r\n<ng-template #addUserModal 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\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\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('AddUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"AddUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddName\" [group]=\"AddUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"AddUsername\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddSamAccount\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"AddUserEID\" [group]=\"AddUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"AddUserNationality\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"addUserOrganizations\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-Phone [options]=\"AddMobileNumber\" [group]=\"AddUserForm\"></BBSF-Phone>\r\n <BBSF-DropdownList [options]=\"AddUserDepartment\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-Toggleslide [options]=\"AddSendActivationEmail\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-Toggleslide [options]=\"AddForceUserChangePassword\" [group]=\"AddUserForm\"></BBSF-Toggleslide>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, true)\" [options]=\"AddUserPermissionSet\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"AddUserPermissions\" [group]=\"AddUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"AddProfileImage\" [group]=\"AddUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseUserModal\r\n id=\"CloseUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (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<!-- Edit user-->\r\n<ng-template #EditUserModal 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('EditUser') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditUserFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditName\" [group]=\"EditUserForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-Phone [options]=\"EditMobileNumber\" [group]=\"EditUserForm\"></BBSF-Phone>\r\n <BBSF-TextBox [options]=\"EditUsername\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditEmail\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditSamAccount\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"EditUserEID\" [group]=\"EditUserForm\"></BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"EditUserNationality\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n @if (isMultiTenancyAllowed && currentUserProfile.permissionSetSID == permissionSets.Admin) {\r\n <BBSF-DropdownList [options]=\"editUserOrganization\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n }\r\n <BBSF-DropdownList [options]=\"EditUserDepartment\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList (onChange)=\"changePermissionSet($event, false)\" [options]=\"EditUserPermissionSet\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"EditUserPermissions\" [group]=\"EditUserForm\"></BBSF-DropdownList>\r\n <BBSF-ProfileImageUploader [options]=\"EditProfileImage\" [group]=\"EditUserForm\"></BBSF-ProfileImageUploader>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n #CloseEditUserModal\r\n id=\"CloseEditUserModal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (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<!-- Deactivate/Activate User Modal -->\r\n<ng-template #ActivateUserModal 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\" *ngIf=\"!ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Deactivate') }}\r\n </h1>\r\n <h1 class=\"mb-3\" *ngIf=\"ShowActivateModelData\" id=\"exampleModalLabel\">\r\n {{ utilityService.getResourceValue('Activate') }}\r\n </h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"!ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('DeactivateConfirmation') }}\r\n </div>\r\n <div class=\"fs-6 text-gray-700\" *ngIf=\"ShowActivateModelData\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div id=\"\" class=\"\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td>{{ Name }}</td>\r\n <td>{{ Email }}</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\r\n type=\"button\"\r\n #CloseActivateUserModal\r\n id=\"CloseActivateUserModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"!ShowActivateModelData\" (click)=\"deactivate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ShowActivateModelData\" (click)=\"activate()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<!-- ResetPassword User Modal -->\r\n<ng-template #ResetPasswordUserModal 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('ResetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ResetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\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-200\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-200\">{{ utilityService.getResourceValue('Email') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"text-dark\">{{ Name }}</td>\r\n <td>{{ Email }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"CloseResetPasswordUserModal\"\r\n #CloseResetPasswordUserModal\r\n type=\"button\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" (click)=\"resetPassword()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- setPassword User Modal -->\r\n<ng-template #setPasswordUserModal 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('SetPassword') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('SetPasswordConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <!-- begin::Table -->\r\n <BBSF-Form [options]=\"SetUserPasswordFormOptions\">\r\n <div class=\"table-responsive\">\r\n <table id=\"tableConfirmation\" class=\"table 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-50\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-50\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Password') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('ConfirmPassword') }}</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr class=\"trItem\">\r\n <td class=\"align-middle\">{{ Name }}</td>\r\n <td class=\"align-middle\">{{ Email }}</td>\r\n <td>\r\n <BBSF-TextBox [options]=\"Password\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"PasswordConfirmation\" [group]=\"SetUserPasswordForm\"></BBSF-TextBox>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n id=\"ClosesetPasswordUserModal\"\r\n #ClosesetPasswordUserModal\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (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<!-- Send Activation Email Modal -->\r\n<ng-template #SendActivationEmailModal 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('SendActivationEmail') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ utilityService.getResourceValue('ActivateConfirmation') }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"note note-warning text-center\"></div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ 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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon btn-sm\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n #CloseActivationEmailModal\r\n id=\"CloseActivationEmailModal\"\r\n type=\"button\"\r\n aria-label=\"Close\"\r\n class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary btn-sm\" (click)=\"sendActivationEmailForUser()\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- confirmation Message Modal -->\r\n<ng-template #ConfirmationModal 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('ConfirmationMessage') }}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-warning rounded border-warning border border-dashed mb-10 p-6\">\r\n <!--begin::Icon-->\r\n <!--begin::Svg Icon | path: icons/duotune/general/gen044.svg-->\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-warning me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n <!--end::Svg Icon-->\r\n <!--end::Icon-->\r\n <!--begin::Wrapper-->\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <!--begin::Content-->\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{ ConfirmationMessage }}\r\n </div>\r\n </div>\r\n <!--end::Content-->\r\n </div>\r\n <!--end::Wrapper-->\r\n </div>\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table id=\"tableConfirmation\" 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-150\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150\">{{ utilityService.getResourceValue('Email') }}</th>\r\n <th class=\"min-w-50\" *ngIf=\"SelectedUserList.length > 1\">{{ 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 user of SelectedUserList\" class=\"trItem\">\r\n <td class=\"text-dark\">{{ user.nameStr }}</td>\r\n\r\n <td>{{ user.username }}</td>\r\n <td *ngIf=\"SelectedUserList.length > 1\">\r\n <button type=\"button\" (click)=\"deleteUserFromList(user)\" class=\"btn btn-light-danger btn-icon\">\r\n <i class=\"fas fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseConfirmationModal id=\"CloseConfirmationModal\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">\r\n {{ utilityService.getResourceValue('CancelLabel') }}\r\n </button>\r\n\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 1\" (click)=\"activateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 2\" (click)=\"deactivateUserList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 3\" (click)=\"resetUserPasswordList()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n <button type=\"button\" *ngIf=\"ConfirmationModalType == 4\" (click)=\"sendActivationEmailForUser()\" class=\"btn btn-primary btn-sm\">\r\n {{ utilityService.getResourceValue('SaveLabel') }}\r\n </button>\r\n </div>\r\n </div>\r\n</ng-template>\r\n" }]
|
|
782
862
|
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i2.PageInfoService }, { type: i3.UserService }, { type: i4.NgbModal }, { type: i1.RequestHandlerService }], propDecorators: { pagingElement: [{
|
|
783
863
|
type: ViewChild,
|
|
784
864
|
args: ['UserPagingViewElement', { static: false }]
|
|
@@ -794,5 +874,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImpor
|
|
|
794
874
|
}], departmentsDDL: [{
|
|
795
875
|
type: ViewChild,
|
|
796
876
|
args: ['departmentsDDL', { static: false }]
|
|
877
|
+
}], organizationDDL: [{
|
|
878
|
+
type: ViewChild,
|
|
879
|
+
args: ['organizationDDL', { static: false }]
|
|
797
880
|
}] } });
|
|
798
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy91c2Vycy91c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3VzZXJzL3VzZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUF5Qix5QkFBeUIsRUFBRSxTQUFTLEVBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFDeFMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFHMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU1oRCxNQUFNLE9BQU8sY0FBYztJQXdHekIsWUFBb0IsV0FBd0IsRUFBUyxjQUE4QixFQUFVLG9CQUEwQyxF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SSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUViLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs4R0EvNkJVLGNBQWM7a0dBQWQsY0FBYywrakJDcEIzQiw2bWpDQW9uQmM7OzJGRGhtQkQsY0FBYztrQkFKMUIsU0FBUzsrQkFDRSxXQUFXO29TQTBCa0MsYUFBYTtzQkFBbkUsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBV0gsZ0JBQWdCO3NCQUFqRSxTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQWpFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNDLGVBQWU7c0JBQS9ELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNDLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvdW50cnksIEN1c3RvbVZhbGlkYXRpb24sIEZpbHRlclR5cGUsIElucHV0VHlwZSwgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMsIFBob25lT3B0aW9ucywgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9ucywgRW5nbGlzaEFyYWJpY0RUTywgRm9ybU9wdGlvbnMsIFBhZ2luZ0FjdGlvbk1vZGUsIERyb3Bkb3duTGlzdENvbXBvbmVudCwgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucywgSW1hZ2VUeXBlLCBQYWdpbmdDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgUGFnaW5nT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQWRkVXNlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Vc2VyTW9kZWxzL0FkZFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRHJvcGRvd25zUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRWRpdFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL3VzZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItdXNlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi91c2Vycy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL1VzZXJzL1wiXHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIFVzZXJzRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHBlcm1pc3Npb25TZXRzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGFjY291bnRTdGF0dXNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgbG9ja2VkU3RhdHVzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGRlcGFydG1lbnRzT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBwZXJtaXNzaW9uU2V0c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBsb2NrZWRTdGF0dXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgYWNjb3VudFN0YXR1c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBkZXBhcnRtZW50c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBJc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIElzRmlsdGVyRGF0YUxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFVzZXJQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBVc2VyUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIEBWaWV3Q2hpbGQoJ1VzZXJQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9SZXF1aXJlZCBsaXN0c1xyXG4gIFNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICBwZXJtaXNzaW9uU2V0TGlzdCA9IFtdO1xyXG4gIHBlcm1pc3Npb25zTGlzdCA9IFtdO1xyXG4gIGFjY291bnRTdGF0dXNMaXN0ID0gW107XHJcbiAgbG9ja2VkU3RhdHVzTGlzdCA9IFtdO1xyXG4gIGRlcGFydG1lbnRzTGlzdCA9IFtdO1xyXG4gIGNvdW50cmllc0xpc3QgPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZCgncGVybWlzc2lvblNldERETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZXJtaXNzaW9uU2V0RERMOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2FjY291bnRTdGF0dXNEREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgYWNjb3VudFN0YXR1c0RETDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdsb2NrZWRTdGF0dXNEREwnLCB7IHN0YXRpYzogZmFsc2UgfSkgbG9ja2VkU3RhdHVzRERMOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RlcGFydG1lbnRzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlcGFydG1lbnRzRERMOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkVXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEFkZE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zXHJcbiAgQWRkTW9iaWxlTnVtYmVyOiBQaG9uZU9wdGlvbnM7XHJcbiAgQWRkVXNlcm5hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFNhbUFjY291bnQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFVzZXJEZXBhcnRtZW50OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkU2VuZEFjdGl2YXRpb25FbWFpbDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIEFkZFVzZXJQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkVXNlclBlcm1pc3Npb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkUHJvZmlsZUltYWdlOiBQcm9maWxlSW1hZ2VVcGxvYWRPcHRpb25zO1xyXG4gIEFkZFVzZXJFSUQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFVzZXJOYXRpb25hbGl0eTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkOlRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0VXNlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0VXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEVkaXROYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG4gIEVkaXRNb2JpbGVOdW1iZXI6IFBob25lT3B0aW9ucztcclxuICBFZGl0VXNlcm5hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRFbWFpbDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFNhbUFjY291bnQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIEVkaXRVc2VyRGVwYXJ0bWVudDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRVc2VyUGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRVc2VyUGVybWlzc2lvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0UHJvZmlsZUltYWdlOiBQcm9maWxlSW1hZ2VVcGxvYWRPcHRpb25zO1xyXG4gIEVkaXRVc2VyRUlEOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0VXNlck5hdGlvbmFsaXR5OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgVXNlcklkOiBzdHJpbmc7XHJcblxyXG5cclxuICAvL0RlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNob3dBY3RpdmF0ZU1vZGVsRGF0YTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0OiBhbnlbXSA9IFtdXHJcbiAgTmFtZTogc3RyaW5nXHJcbiAgRW1haWw6IHN0cmluZ1xyXG5cclxuICAvL1Jlc2V0IFBhc3N3b3JkIFVzZXIgTW9kZWwgQ29udHJvbHNcclxuICBSZXNldFBhc3N3b3JkVXNlckxpc3Q6IGFueVtdID0gW11cclxuXHJcbiAgLy9zZXQgUGFzc3dvcmQgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNldFVzZXJQYXNzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBTZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBQYXNzd29yZDogVGV4dEJveE9wdGlvbnM7XHJcbiAgUGFzc3dvcmRDb25maXJtYXRpb246IFRleHRCb3hPcHRpb25zO1xyXG4gIGN1c3RvbVZhbGlkYXRpb246IEN1c3RvbVZhbGlkYXRpb24gPSBuZXcgQ3VzdG9tVmFsaWRhdGlvbigpO1xyXG4gIHNldFBhc3N3b3JkVXNlclRva2VuOnN0cmluZztcclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXNlcnMgc2VsZWN0aW9uXHJcbiAgYWN0aXZhdGVkVXNlcnNTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICBkZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgc2hvd0FjdGl2YXRlQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlYWN0aXZhdGVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2V0UGFzc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZXNldFBhc3NCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2VuZEVtYWlsQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dlbmVyYWxCdG5zOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVc2Vyc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKCk7XHJcblxyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG5cclxuICB9XHJcblxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldFVzZXJzTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VhcmNoQ2xpZW50U2lkZShzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQuZmlsdGVyKFxyXG4gICAgICAgIGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgICAgICByZXR1cm4gKGl0ZW0ubmFtZS5lbmdsaXNoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgaXRlbS5uYW1lLmFyYWJpYy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGl0ZW0udXNlcm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgfSlcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5Vc2VyUGFnaW5nUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy9Jbml0aWFsaXplIGZpbHRlcnMgYW5kIHBhZ2luZ1xyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG5cclxuICAgIC8vIFBlcm1pc3Npb24gU2V0cyBpbml0XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLm5hbWUgPSBcInBlcm1pc3Npb25zZXRzXCJcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMucGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIC8vIEFjY291bnQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLm5hbWUgPSBcImFjY291bnRzdGF0dXNcIlxyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzT3B0aW9ucy5sYWJlbEtleSA9IFwiQWNjb3VudFN0YXR1c1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgLy8gTG9ja2VkIFN0YXR1cyBpbml0XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMubmFtZSA9IFwibG9ja2Vkc3RhdHVzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMubGFiZWxLZXkgPSBcIkxvY2tlZFN0YXR1c1wiO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNPcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcblxyXG4gICAgLy8gZGVwYXJ0bWVudHMgaW5pdFxyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5uYW1lID0gXCJkZXBhcnRtZW50c1wiXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudHNcIlxyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcblxyXG4gICAgLy8gVGV4dEJveCBpbml0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guZXh0cmFDbGFzc2VzID0gXCJVc2Vyc1wiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gucGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVPckVtYWlsXCIpXHJcblxyXG5cclxuICAgIC8vRmlsdGVyc1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIm5hbWVGaWx0ZXJcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIlBlcm1pc3Npb25TZXRJZHNcIlxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IFwiYWNjb3VudHN0YXR1c1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiYWNjb3VudFN0YXR1c0lEc1wiXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3RcclxuXHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcImxvY2tlZHN0YXR1c1wiXHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJsb2NrZWRTdGF0dXNJZHNcIlxyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcImRlcGFydG1lbnRzXCJcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiZGVwYXJ0bWVudElkc1wiXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyLmlzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdFxyXG5cclxuXHJcbiAgICB0aGlzLlVzZXJQYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLmFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRVc2Vyc0J5RmlsdGVyJztcclxuICAgIHRoaXMuVXNlclBhZ2luZy5vbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJwZXJtaXNzaW9uc2V0c1wiLCBcImFjY291bnRzdGF0dXNcIiwgXCJsb2NrZWRzdGF0dXNcIiwgXCJkZXBhcnRtZW50c1wiXTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5maWx0ZXJzID0gW3RoaXMucGVybWlzc2lvblNldHNGaWx0ZXIsIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLCB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIsIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIsIHRoaXMuVGV4dElucHV0RmlsdGVyXVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuICAgIHRoaXMuVXNlclBhZ2luZy5yZXNldEZpbHRlckJ1dHRvbk5hbWUgPSBcInVzZXJzRmlsdGVyc0J0blwiO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvL0xvYWQgbGlzdHMgZm9yIGZpbHRlcnNcclxuICBsb2FkTGlzdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuSXNGaWx0ZXJEYXRhTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZGRyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgbGV0IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgPSByZXN1bHQgYXMgRHJvcGRvd25zUmVzcG9uc2VNb2RlbDtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5wZXJtZXNzaW9uc2V0cztcclxuICAgICAgICB0aGlzLmFjY291bnRTdGF0dXNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5hY2NvdW50U3RhdHVzO1xyXG4gICAgICAgIHRoaXMubG9ja2VkU3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwubG9ja2VkU3RhdHVzO1xyXG4gICAgICAgIHRoaXMuZGVwYXJ0bWVudHNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5kZXBhcnRtZW50cztcclxuXHJcbiAgICAgICAgbGV0IHBlcm1pc3Npb25TZXRFbGVtZW50ID0gdGhpcy5wZXJtaXNzaW9uU2V0RERMIGFzIGFueTtcclxuICAgICAgICBsZXQgYWNjb3VudFN0YXR1c0VsZW1lbnQgPSB0aGlzLmFjY291bnRTdGF0dXNEREwgYXMgYW55O1xyXG4gICAgICAgIGxldCBsb2NrZWRTdGF0dXNFbGVtZW50ID0gdGhpcy5sb2NrZWRTdGF0dXNEREwgYXMgYW55O1xyXG4gICAgICAgIGxldCBkZXBhcnRtZW50c0VsZW1lbnQgPSB0aGlzLmRlcGFydG1lbnRzRERMIGFzIGFueTtcclxuXHJcblxyXG4gICAgICAgIHBlcm1pc3Npb25TZXRFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5wZXJtaXNzaW9uU2V0TGlzdCk7XHJcblxyXG4gICAgICAgIGFjY291bnRTdGF0dXNFbGVtZW50LlVwZGF0ZURhdGFTb3VyY2UodGhpcy5hY2NvdW50U3RhdHVzTGlzdCk7XHJcblxyXG4gICAgICAgIGxvY2tlZFN0YXR1c0VsZW1lbnQuVXBkYXRlRGF0YVNvdXJjZSh0aGlzLmxvY2tlZFN0YXR1c0xpc3QpO1xyXG5cclxuICAgICAgICBkZXBhcnRtZW50c0VsZW1lbnQuVXBkYXRlRGF0YVNvdXJjZSh0aGlzLmRlcGFydG1lbnRzTGlzdCk7XHJcblxyXG5cclxuICAgICAgICB0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9Vc2VycyBjaGVja2JveGVzIHNlbGVjdGlvbiBmdW5jdGlvbnNcclxuICBzZWxlY3RBbGxVc2VyTGlzdChldmVudCwgVXNlcnM6IGFueVtdKSB7XHJcbiAgICBpZiAodGhpcy5Vc2VyUGFnaW5nUmVzdWx0ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZXZlbnQuY2hlY2tlZCk7XHJcblxyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFVzZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVc2Vyc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnB1c2godXNlcik7XHJcbiAgICAgICAgaWYgKHVzZXIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5pc0FjdGl2ZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSkubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gIWl0ZW0uaXNBY3RpdmU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID0gMDtcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyTGlzdChldmVudCwgVXNlcikge1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZpbmQodSA9PiB1LmlkID09PSBVc2VyLmlkKS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5Vc2VyUGFnaW5nUmVzdWx0ICE9IG51bGwgJiYgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmV2ZXJ5KHUgPT4gdS5zZWxlY3RlZCk7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgICAgaWYgKFVzZXIuaXNBY3RpdmUpXHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUuaWQgPT0gVXNlci5pZCkgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoVXNlci5pc0FjdGl2ZSlcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkIC09IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZUJ1dHRvbnMoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJGcm9tTGlzdCh1c2VyOiBhbnkpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5maW5kKHUgPT4gdS5pZCA9PT0gdXNlci5pZCkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHVzZXIpO1xyXG4gICAgaWYgKHVzZXIuaXNBY3RpdmUpXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZUJ1dHRvbnMoKSB7XHJcbiAgICAvL1Jlc2V0IGFsbCBidG5zXHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwICYmIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApIHtcclxuICAgICAgdGhpcy5zaG93R2VuZXJhbEJ0bnMgPSB0cnVlO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IGZhbHNlO1xyXG5cclxuICAgICAgLy9pZiBvbmx5IGFjdGl2YXRlZCB1c2Vyc1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGVhY3RpdmF0ZUJ0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApICAgICAvL2lmIG9ubHkgZGVBY3RpdmF0ZWQgdXNlcnNcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd0FjdGl2YXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZW5kRW1haWxCdG4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPiAwKSAvL2lmIGFjdGl2YXRlZCBhbmQgZGVhY3RpdmF0ZWQgdXNlcnMgc2VsZWN0ZWRcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVCdXR0b25zKCkge1xyXG4gICAgLy9SZXNldCBhbGwgYnRuc1xyXG4gICAgdGhpcy5zaG93QWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0RlYWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlbmRFbWFpbEJ0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldFVzZXJzQ291bnQoKSB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvL0FkZCBVc2VyXHJcbiAgc2hvd0FkZFVzZXJNb2RhbChhZGRVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRBZGREcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgbGV0IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgPSByZXN1bHQgYXMgRHJvcGRvd25zUmVzcG9uc2VNb2RlbDtcclxuICAgICAgLy9TZXQgcmVxdWlyZWQgbGlzdHNcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwucGVybWVzc2lvbnNldHM7XHJcbiAgICAgIHRoaXMuZGVwYXJ0bWVudHNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5kZXBhcnRtZW50cztcclxuICAgICAgdGhpcy5jb3VudHJpZXNMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5jb3VudHJpZXM7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLkFkZFVzZXJGb3JtXHJcbiAgICAgIHRoaXMuQWRkVXNlckZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJNb2RlbDtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRVc2VyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuQWRkVXNlckZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgICAgdGhpcy5BZGROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIubmFtZSA9IFwiUGhvbmVJbnB1dE1vYmlsZVwiXHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmxhYmVsS2V5ID0gXCJNb2JpbGVOdW1iZXJcIlxyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5leHRyYUNsYXNzZXMgPSBcImZvcm0tY29udHJvbCBibnNpZ2h0cy1jb250cm9sXCJcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuc2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXNcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIucGhvbmVWYWxpZGF0aW9uID0gdHJ1ZVxyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5hbGxvd1NlYXJjaCA9IHRydWVcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUubmFtZSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQudmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIlxyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmxhYmVsS2V5ID0gXCJEZXBhcnRtZW50XCJcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5kYXRhU291cmNlID0gdGhpcy5kZXBhcnRtZW50c0xpc3RcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLm5hbWUgPSBcIlNlbmRBY3RpdmF0aW9uTWFpbFwiXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbC5sYWJlbEtleSA9IFwiU2VuZEFjdGl2YXRpb25FbWFpbFwiXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbC52YWx1ZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbFxyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5uYW1lID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCJcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9uU2V0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9uU2V0LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5uYW1lID0gXCJQZXJtaXNzaW9uc1wiXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uc1wiXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5pc1JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubmFtZSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubGFiZWxLZXkgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuZGF0YVNvdXJjZSA9IHRoaXMuY291bnRyaWVzTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFVzZXJFSUQubmFtZSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC50eXBlID0gSW5wdXRUeXBlLkVJRDtcclxuICAgICAgdGhpcy5BZGRVc2VyRUlELnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlID0gbmV3IFByb2ZpbGVJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIlxyXG4gICAgICB0aGlzLkFkZFByb2ZpbGVJbWFnZS5sYWJlbFZhbHVlID0gXCJQcm9maWxlSW1hZ2VcIlxyXG4gICAgICB0aGlzLkFkZFByb2ZpbGVJbWFnZS5pc1JlcXVpcmVkID0gZmFsc2VcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsXHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlLmltYWdlVXBsb2FkQWNjZXB0c1R5cGVzID0gW0ltYWdlVHlwZS5JbWFnZVR5cGVzXVxyXG5cclxuICAgICAgdGhpcy5BZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZC5uYW1lID0gXCJGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZFwiXHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQubGFiZWxLZXkgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCJcclxuICAgICAgdGhpcy5BZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZC52YWx1ZSA9IGZhbHNlXHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWxcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oYWRkVXNlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFVzZXJGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBBZGRNb2RlbCA9IG5ldyBBZGRVc2VyTW9kZWwoKTtcclxuICAgIEFkZE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBBZGRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIEFkZE1vZGVsLk5hdGlvbmFsaXR5ID0gUmVzdWx0TW9kZWwuTmF0aW9uYWxpdHk7XHJcbiAgICBBZGRNb2RlbC5FSUQgPSBSZXN1bHRNb2RlbC5FSUQ7XHJcbiAgICBBZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuICAgIEFkZE1vZGVsLk9yZ2FuaXphdGlvbklEX0dVSUQgPSBDb25zdGFudHMuT3JnYW5pemF0aW9uSURfR1VJRDtcclxuICAgIGlmIChSZXN1bHRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCAhPSB1bmRlZmluZWQpXHJcbiAgICAgIEFkZE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEID0gUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEX0dVSUQ7XHJcblxyXG4gICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvblNldHMgYXMgc3RyaW5nW11cclxuICAgIEFkZE1vZGVsLlBlcm1pc3Npb25TZXRzID0gUGVybWlzc2lvblNldHM7XHJcbiAgICBsZXQgUGVybWlzc2lvbnMgPSBSZXN1bHRNb2RlbC5QZXJtaXNzaW9ucyBhcyBzdHJpbmdbXVxyXG4gICAgQWRkTW9kZWwuUGVybWlzc2lvbnMgPSBQZXJtaXNzaW9ucztcclxuICAgIEFkZE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbCA9IFJlc3VsdE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbDtcclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgQWRkTW9kZWwuUGhvbmVJbnB1dE1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBBZGRNb2RlbC5Qcm9maWxlSW1hZ2UgPSBSZXN1bHRNb2RlbC5JbWFnZTtcclxuICAgIEFkZE1vZGVsLkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkPVJlc3VsdE1vZGVsLkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKEFkZE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlckZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLkFkZFVzZXIoQWRkTW9kZWwpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy9FZGl0IFVzZXJcclxuICBzaG93RWRpdFVzZXJNb2RhbCh1c2VySUQ6IHN0cmluZywgRWRpdFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuVXNlcklkID0gdXNlcklEXHJcblxyXG4gICAgdGhpcy51c2VyU2VydmljZS5nZXRFZGl0VXNlcih1c2VySUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgdXNlciA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IGxpc3RzLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBsaXN0cy5jb3VudHJpZXM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLkVkaXRVc2VyRm9ybVxyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFVzZXJNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLnNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFVzZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLnBhZ2luZ0FjdGlvbk1vZGUgPSBQYWdpbmdBY3Rpb25Nb2RlLlVwZGF0ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLm9uU3VjY2Vzc0hhbmRsZXIgPSB0aGlzLm9uU3VibWl0U3VjY2VzcztcclxuXHJcbiAgICAgIGxldCBOYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgTmFtZS5lbmdsaXNoID0gdXNlci5uYW1lLmVuZ2xpc2g7XHJcbiAgICAgIE5hbWUuYXJhYmljID0gdXNlci5uYW1lLmFyYWJpYztcclxuXHJcbiAgICAgIHRoaXMuRWRpdE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUuYXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLmVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLnZhbHVlID0gTmFtZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5tYXhMZW5ndGggPSAxMDA7XHJcblxyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci52YWx1ZSA9IHVzZXIubW9iaWxlIGFzIHN0cmluZztcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLm5hbWUgPSBcIlBob25lSW5wdXRNb2JpbGVcIlxyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIubGFiZWxLZXkgPSBcIk1vYmlsZU51bWJlclwiXHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5leHRyYUNsYXNzZXMgPSBcImZvcm0tY29udHJvbCBibnNpZ2h0cy1jb250cm9sXCJcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLnNlbGVjdGVkQ291bnRyeUlTTyA9IENvdW50cnkuVW5pdGVkQXJhYkVtaXJhdGVzXHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5waG9uZVZhbGlkYXRpb24gPSB0cnVlXHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5hbGxvd1NlYXJjaCA9IHRydWVcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS52YWx1ZSA9IHVzZXIudXNlcm5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLm5hbWUgPSBcIlVzZXJuYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLmxhYmVsS2V5ID0gXCJVc2VybmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUubWF4TGVuZ3RoID0gMjU2O1xyXG5cclxuICAgICAgdGhpcy5FZGl0RW1haWwgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RW1haWwudmFsdWUgPSB1c2VyLmVtYWlsO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5uYW1lID0gXCJFbWFpbFwiO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5sYWJlbEtleSA9IFwiRW1haWxcIjtcclxuICAgICAgdGhpcy5FZGl0RW1haWwudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgdGhpcy5FZGl0RW1haWwuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudC52YWx1ZSA9IHVzZXIuc2FtQWNjb3VudDtcclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudC5uYW1lID0gXCJTYW1BY2NvdW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQubGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5FZGl0U2FtQWNjb3VudC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQubWF4TGVuZ3RoID0gMjU2O1xyXG5cclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudC5uYW1lID0gXCJEZXBhcnRtZW50SURfR1VJRFwiXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LmxhYmVsS2V5ID0gXCJEZXBhcnRtZW50XCJcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2VsZWN0ZWRJdGVtcyA9IHVzZXIuZGVwYXJ0bWVudElEX0dVSUQ/LnRvTG93ZXJDYXNlKClcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuZGF0YVNvdXJjZSA9IHRoaXMuZGVwYXJ0bWVudHNMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5uYW1lID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LnNlbGVjdGVkSXRlbXMgPSB1c2VyLnBlcm1pc3Npb25TZXRJRHMubWFwKChpdGVtKSA9PiBpdGVtLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmRhdGFTb3VyY2UgPSB0aGlzLnBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIlxyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCJcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSB1c2VyLnBlcm1pc3Npb25JRHMubWFwKChpdGVtKSA9PiBpdGVtLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uc0xpc3RcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyTmF0aW9uYWxpdHkubmFtZSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmxhYmVsS2V5ID0gXCJOYXRpb25hbGl0eVwiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyTmF0aW9uYWxpdHkudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyTmF0aW9uYWxpdHkuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnNob3dDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyTmF0aW9uYWxpdHkuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyTmF0aW9uYWxpdHkuZGF0YVNvdXJjZSA9IHRoaXMuY291bnRyaWVzTGlzdDtcclxuICAgICAgaWYgKHVzZXIubmF0aW9uYWxpdHkpXHJcbiAgICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnNlbGVjdGVkSXRlbXMgPSB1c2VyLm5hdGlvbmFsaXR5O1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRUlELm5hbWUgPSBcIkVJRFwiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRUlELmxhYmVsS2V5ID0gXCJFSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC50eXBlID0gSW5wdXRUeXBlLkVJRDtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWw7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudmFsdWUgPSB1c2VyLmVpZDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFByb2ZpbGVJbWFnZSA9IG5ldyBQcm9maWxlSW1hZ2VVcGxvYWRPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFByb2ZpbGVJbWFnZS5uYW1lID0gXCJJbWFnZVwiXHJcbiAgICAgIHRoaXMuRWRpdFByb2ZpbGVJbWFnZS5sYWJlbFZhbHVlID0gXCJQcm9maWxlSW1hZ2VcIlxyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaXNSZXF1aXJlZCA9IGZhbHNlXHJcbiAgICAgIHRoaXMuRWRpdFByb2ZpbGVJbWFnZS52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuVmVydGljYWxcclxuICAgICAgdGhpcy5FZGl0UHJvZmlsZUltYWdlLmltYWdlVXBsb2FkQWNjZXB0c1R5cGVzID0gW0ltYWdlVHlwZS5JbWFnZVR5cGVzXVxyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UudmFsdWUgPSB1c2VyLnByb2ZpbGVJbWFnZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFVzZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG4gIGdldEVkaXRVc2VyTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuRWRpdFVzZXJGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0TW9kZWwgPSBuZXcgRWRpdFVzZXJNb2RlbCgpO1xyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLlVzZXJJZDtcclxuICAgIEVkaXRNb2RlbC5Vc2VybmFtZSA9IFJlc3VsdE1vZGVsLlVzZXJuYW1lO1xyXG4gICAgRWRpdE1vZGVsLkVtYWlsID0gUmVzdWx0TW9kZWwuRW1haWw7XHJcbiAgICBFZGl0TW9kZWwuTmFtZSA9IFJlc3VsdE1vZGVsLk5hbWU7XHJcbiAgICBFZGl0TW9kZWwuTmF0aW9uYWxpdHkgPSBSZXN1bHRNb2RlbC5OYXRpb25hbGl0eTtcclxuICAgIEVkaXRNb2RlbC5FSUQgPSBSZXN1bHRNb2RlbC5FSUQ7XHJcbiAgICBFZGl0TW9kZWwuU2FtQWNjb3VudCA9IFJlc3VsdE1vZGVsLlNhbUFjY291bnQ7XHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEX0dVSUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBFZGl0TW9kZWwuRGVwYXJ0bWVudElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEKTtcclxuXHJcbiAgICBsZXQgUGVybWlzc2lvblNldHMgPSBSZXN1bHRNb2RlbC5QZXJtaXNzaW9uU2V0cyBhcyBzdHJpbmdbXVxyXG4gICAgRWRpdE1vZGVsLlBlcm1pc3Npb25TZXRJRHMgPSBQZXJtaXNzaW9uU2V0cztcclxuICAgIGxldCBQZXJtaXNzaW9ucyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25zIGFzIHN0cmluZ1tdXHJcbiAgICBFZGl0TW9kZWwuUGVybWlzc2lvbklEcyA9IFBlcm1pc3Npb25zO1xyXG5cclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgRWRpdE1vZGVsLk1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBFZGl0TW9kZWwuUHJvZmlsZUltYWdlID0gUmVzdWx0TW9kZWwuSW1hZ2U7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFVzZXJGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuRWRpdFVzZXIoRWRpdE1vZGVsKVxyXG4gIH1cclxuICBjaGFuZ2VQZXJtaXNzaW9uU2V0KGlkcywgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZFBlcm1pc3Npb25zRHJvcERvd24oaWRzKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgZGRsID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uc0xpc3QgPSBkZGw7XHJcbiAgICAgIGlmIChpc0FkZCkge1xyXG4gICAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLmRhdGFTb3VyY2UgPSB0aGlzLnBlcm1pc3Npb25zTGlzdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmRhdGFTb3VyY2UgPSB0aGlzLnBlcm1pc3Npb25zTGlzdDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vRXhwb3J0IHVzZXJzIGV4Y2VsXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgZmlsdGVycyA9IHt9O1xyXG4gICAgZmlsdGVycyA9IHRoaXMucGFnaW5nRWxlbWVudC5nZXRGaWx0ZXJzVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkV4cG9ydChmaWx0ZXJzKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgQmxvYihbRmlsZURUT10sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyB9KTtcclxuICAgICAgbGV0IGZpbGVOYW1lID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVXNlcnNcIikgKyBcIi54bHN4XCI7XHJcbiAgICAgIHNhdmVBcyhmaWxlLCBmaWxlTmFtZSk7XHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuXHJcblxyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvL09uZSB1c2VyIGZ1bmN0aW9uc1xyXG5cclxuICAvL0FjdGl2YXRpb24gYW5kIGRlYWN0aXZhdGlvbiBmdW5jdGlvbnNcclxuICBzaG93QWN0aXZhdGVVc2VyTW9kYWwoVXNlcjogYW55LCBpc0FjdGl2YXRlTW9kZWw6IGJvb2xlYW4sIEFjdGl2YXRlVXNlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCA9IFtdXHJcbiAgICB0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLlNob3dBY3RpdmF0ZU1vZGVsRGF0YSA9IGlzQWN0aXZhdGVNb2RlbFxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBY3RpdmF0ZVVzZXJNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkFjdGl2YXRlVXNlcnModGhpcy5BY3RpdmF0b3JEZWFjdGl2YXRlVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuRGVhY3RpdmF0ZVVzZXJzKHRoaXMuQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvL1Jlc2V0IFBhc3N3b3JkIGZ1bmN0aW9uXHJcbiAgc2hvd1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwoVXNlcjogYW55LCBSZXNldFBhc3N3b3JkVXNlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpXHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdCA9IFtdXHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWxcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVzZXRQYXNzd29yZFVzZXJNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0UGFzc3dvcmQoKSB7XHJcblxyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvL1NlbmQgYWN0aXZhdGlvbiBtYWlsIGZ1bmN0aW9uXHJcbiAgc2hvd1NlbmRBY3RpdmF0aW9uRW1haWxNb2RhbChVc2VyOiBhbnksIFNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKVxyXG4gICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW11cclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWxcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcigpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuU2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIodGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KVxyXG5cclxuICB9XHJcblxyXG4gIC8vU2V0IHBhc3N3b3JkIGZ1bmN0aW9uXHJcblxyXG4gIHNob3dzZXRQYXNzd29yZFVzZXJNb2RhbChVc2VyOiBhbnksIHNldFBhc3N3b3JkVXNlck1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zLmZvcm1Hcm91cCA9IHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybVxyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRTZXRQQXNzd29yZE1vZGVsO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFNldFBhc3N3b3JkRnVuY3Rpb247XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMucGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG5cclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5zZXRQYXNzd29yZFVzZXJUb2tlbj1Vc2VyLnRva2VuO1xyXG5cclxuICAgIHRoaXMuUGFzc3dvcmQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuUGFzc3dvcmQubmFtZSA9IFwiUGFzc3dvcmRcIjtcclxuICAgIHRoaXMuUGFzc3dvcmQuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmQudHlwZSA9IElucHV0VHlwZS5QYXNzd29yZDtcclxuICAgIHRoaXMuUGFzc3dvcmQuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0aW9uLmZ1bmN0aW9uQm9keSA9IChjb250cm9sKSA9PiB7XHJcbiAgICAgIGxldCBQYXNzd29yZCA9IHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybS5jb250cm9sc1tcIlBhc3N3b3JkXCJdLnZhbHVlO1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZSAhPSBQYXNzd29yZClcclxuICAgICAgICByZXR1cm4geyAnY3VzdG9tZXJFcnJvcic6IHRydWUgfTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0aW9uLm1hc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQYXNzd29yZE5vdE1hdGNoXCIpO1xyXG5cclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24ubmFtZSA9IFwiUGFzc3dvcmRDb25maXJtYXRpb25cIjtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24udHlwZSA9IElucHV0VHlwZS5QYXNzd29yZDtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLlBhc3N3b3JkQ29uZmlybWF0aW9uLmN1c3RvbVZhbGlkYXRpb24gPSBbdGhpcy5jdXN0b21WYWxpZGF0aW9uXTtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHNldFBhc3N3b3JkVXNlck1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICB9XHJcbiAgZ2V0U2V0UEFzc3dvcmRNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIFJlc3VsdE1vZGVsLnRva2VuID0gdGhpcy5zZXRQYXNzd29yZFVzZXJUb2tlbjtcclxuICAgIFJlc3VsdE1vZGVsLmlzQWRtaW5TZXQgPSB0cnVlO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKFJlc3VsdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2V0UGFzc3dvcmRGdW5jdGlvbiA9ICh1c2VyUGFzc3dvcmRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5TZXRVc2Vyc1Bhc3N3b3JkKHVzZXJQYXNzd29yZE1vZGVsKTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0U3VjY2VzcyA9IChyZXN1bHQpID0+IHtcclxuICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy9Vc2VycyBMaXN0IEZ1bmN0aW9uc1xyXG5cclxuICAvL1Nob3cgYWN0aXZhdGUsZGVhY3RpdmF0ZSxyZXNldFBhc3N3b3JkLHNlbmRhY3RpdmF0aW9uZW1haWwgbW9kYWxzXHJcbiAgc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHR5cGU6IG51bWJlciwgQ29uZmlybWF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAxOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gMVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZUNvbmZpcm1hdGlvblwiKTtcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9IDJcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSAzXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgNDpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kQWN0aXZhdGlvbk1haWxDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSA0XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb25maXJtYXRpb25Nb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuICAvL0FjdGl2YXRlIHVzZXJzIGxpc3RcclxuICBhY3RpdmF0ZVVzZXJMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5BY3RpdmF0ZVVzZXJzKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIC8vRGVhY3RpdmF0ZSB1c2VycyBsaXN0XHJcbiAgZGVhY3RpdmF0ZVVzZXJMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5EZWFjdGl2YXRlVXNlcnModGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9SZXNldCBwYXNzd29yZHMgdXNlcnMgbGlzdFxyXG4gIHJlc2V0VXNlclBhc3N3b3JkTGlzdCgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuUmVzZXRVc2Vyc1Bhc3N3b3JkKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcbjxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDwhLS0gYmVnaW46OkhlYWRlciAtLT5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWN1c3RvbS1oXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIlVzZXJzRm9ybVwiPlxyXG4gICAgICAgICAgPCEtLSAoT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dHZW5lcmFsQnRuc1wiIG5nYkRyb3Bkb3duIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiBTaG93UGFnZUNvbnRlbnQ9PXRydWU/J2Jsb2NrJzonbm9uZSd9XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTGlzdHMoKVwiIG5nYkRyb3Bkb3duVG9nZ2xlIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IG1lLTNcIlxyXG4gICAgICAgICAgICBpZD1cIkZpbHRlcnNEcm9wZG93blwiIHRpdGxlPVwiRmlsdGVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJGaWx0ZXJcIil9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiRmlsdGVyc0Ryb3Bkb3duXCJcclxuICAgICAgICAgICAgY2xhc3M9XCIgZmlsdGVyLWNvbnRhaW5lciBtZW51IG1lbnUtc3ViIG1lbnUtc3ViLWRyb3Bkb3duIG1lbnUtY29sdW1uIG1lbnUtcm91bmRlZCBtZW51LWdyYXktODAwIG1lbnUtc3RhdGUtYmctbGlnaHQtcHJpbWFyeSAgdy0yNTBweCB3LW1kLTUwMHB4IGZ3LWJvbGQgcHktMyBkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cclxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJVc2Vyc0Zvcm1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNwZXJtaXNzaW9uU2V0RERMIFtvcHRpb25zXT1cInBlcm1pc3Npb25TZXRzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2FjY291bnRTdGF0dXNEREwgW29wdGlvbnNdPVwiYWNjb3VudFN0YXR1c09wdGlvbnNcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNsb2NrZWRTdGF0dXNEREwgW29wdGlvbnNdPVwibG9ja2VkU3RhdHVzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2RlcGFydG1lbnRzRERMIFtvcHRpb25zXT1cImRlcGFydG1lbnRzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeSBwdi1yZXNldCBidG4tc21cIiBuYW1lPVwidXNlcnNGaWx0ZXJzQnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZXhwb3J0RXhjZWwoKVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtMyBibnNpZ2h0cy1idG4tZXhwb3J0XCIgdGl0bGU9XCJFeHBvcnRcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWRvd25sb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFeHBvcnRcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93QWN0aXZhdGVCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5BY3RpdmF0ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDEsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1oaXN0b3J5XCI+PC9pPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dEZWFjdGl2YXRlQnRuXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuRGVhY3RpdmF0ZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDIsIENvbmZpcm1hdGlvbk1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wb3dlci1vZmZcIj48L2k+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dSZXNldFBhc3NCdG5cIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJidG5SZXNldFBhc3NcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgzLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PC9pPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93U2VuZEVtYWlsQnRuXCIgdHlwZT1cImJ1dHRvblwiIGlkPVwiYnRuUmVzZW5kQWN0aXZhdGlvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwic2hvd0NvbmZpcm1hdGlvbk1vZGFsKDQgLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZW52ZWxvcGVcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlbmRBY3RpdmF0aW9uRW1haWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIiAoY2xpY2spPVwic2hvd0FkZFVzZXJNb2RhbChhZGRVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBlbmQ6OkhlYWRlciAtLT5cclxuICAgIDwhLS0gYmVnaW46OkJvZHkgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTNcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgY29udGFpbmVyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHVzZXJzLXRhYmxlXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidy01MHB4XCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLXNtIGZvcm0tY2hlY2stY3VzdG9tIGZvcm0tY2hlY2stc29saWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwic2VsZWN0QWxsVXNlckxpc3QoJGV2ZW50LGNsaWVudFNpZGVQYWdpbmdSZXN1bHQpXCIgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIChjaGFuZ2UpPVwic2VsZWN0QWxsVXNlckxpc3QoJGV2ZW50LFVzZXJQYWdpbmdSZXN1bHQpXCIgaWQ9XCJjaGtfU2VsZWN0QWxsXCI+LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7PHNwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW1haWxcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJNb2JpbGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJSb2xlc1wiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN0YXR1c1wiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLTxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiAoY2hhbmdlKT1cInVwZGF0ZVVzZXJMaXN0KCRldmVudCx1c2VyKVwiIGlkPVwiVXNlci17e3VzZXIuaWR9fVwiPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IChjaGFuZ2UpPVwidXBkYXRlVXNlckxpc3QoJGV2ZW50LHVzZXIpXCIgWyhuZ01vZGVsKV09XCJ1c2VyLnNlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ltYm9sLWxhYmVsIGZvbnQtc2l6ZS1oNSBmb250LXdlaWdodC1ib2xkIGJnLWxpZ2h0LXByaW1hcnkgbWwtMiBtYi0wIG1lLTNcIj5BPC9oNj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInNob3dFZGl0VXNlck1vZGFsKHVzZXIuaURfR1VJRCxFZGl0VXNlck1vZGFsKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmsgZnctYm9sZGVyIHRleHQtaG92ZXItcHJpbWFyeSBmcy02XCI+e3t1c2VyLm5hbWVTdHJ9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e3VzZXIudXNlcm5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci5tb2JpbGV9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7dXNlci5wZXJtaXNzaW9uc2V0fX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2Vzc1wiICpuZ0lmPVwidXNlci5pc0FjdGl2ZT09dHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmVcIil9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1kYW5nZXJcIiAqbmdJZj1cInVzZXIuaXNBY3RpdmU9PWZhbHNlJiYgdXNlci5hY3RpdmF0aW9uRGF0ZSE9bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlZFwiKX19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmdcIiAqbmdJZj1cInVzZXIuaXNBY3RpdmU9PWZhbHNlJiYgdXNlci5hY3RpdmF0aW9uRGF0ZT09bnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQZW5kaW5nQWN0aXZhdGlvblwiKX19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJzaG93RWRpdFVzZXJNb2RhbCh1c2VyLmlEX0dVSUQsRWRpdFVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiICpuZ0lmPVwidXNlci5pc0FjdGl2ZVwiIGlkPVwiYnRuRGVhY3RpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FjdGl2YXRlVXNlck1vZGFsKHVzZXIsZmFsc2UsQWN0aXZhdGVVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVhY3RpdmF0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0bmFjdGl2YXRlXCIgKGNsaWNrKT1cInNob3dBY3RpdmF0ZVVzZXJNb2RhbCh1c2VyLHRydWUsQWN0aXZhdGVVc2VyTW9kYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIuaXNBY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwodXNlciAsIFJlc2V0UGFzc3dvcmRVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbmdiRHJvcGRvd25JdGVtIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIiBpZD1cImJ0blJlc2V0UGFzc1wiIChjbGljayk9XCJzaG93c2V0UGFzc3dvcmRVc2VyTW9kYWwodXNlciwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2V0UGFzc3dvcmRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIiAqbmdJZj1cIiF1c2VyLmlzQWN0aXZlJiZ1c2VyLmFjdGl2YXRpb25EYXRlPT1udWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKHVzZXIgLCBTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25FbWFpbFwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwiY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNlwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICA8IS0tIGVuZDo6VGFibGUgLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tIGVuZDo6VGFibGUgY29udGFpbmVyIC0tPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgIDwhLS0gYmVnaW4gcGFnaW5nLS0+XHJcbiAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0VXNlcnNMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiVXNlclBhZ2luZ1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIiAjVXNlclBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8IS0tIEVuZCBwYWdpbmctLT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gYWRkIHVzZXItLT5cclxuPG5nLXRlbXBsYXRlICNhZGRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFVzZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiQWRkVXNlckZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiQWRkTmFtZVwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFVzZXJuYW1lXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiQWRkU2FtQWNjb3VudFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFVzZXJFSURcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFVzZXJOYXRpb25hbGl0eVwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLVBob25lIFtvcHRpb25zXT1cIkFkZE1vYmlsZU51bWJlclwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1QaG9uZT5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFVzZXJEZXBhcnRtZW50XCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiQWRkU2VuZEFjdGl2YXRpb25FbWFpbFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmRcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiY2hhbmdlUGVybWlzc2lvblNldCgkZXZlbnQsdHJ1ZSlcIiBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvblNldFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Qcm9maWxlSW1hZ2VVcGxvYWRlciBbb3B0aW9uc109XCJBZGRQcm9maWxlSW1hZ2VcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtUHJvZmlsZUltYWdlVXBsb2FkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlVXNlck1vZGFsIGlkPVwiQ2xvc2VVc2VyTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRWRpdCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFVzZXJcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFVzZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJFZGl0TW9iaWxlTnVtYmVyXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1QaG9uZT5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VXNlcm5hbWVcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdEVtYWlsXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTYW1BY2NvdW50XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRVc2VyRUlEXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJOYXRpb25hbGl0eVwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJEZXBhcnRtZW50XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiY2hhbmdlUGVybWlzc2lvblNldCgkZXZlbnQsZmFsc2UpXCIgW29wdGlvbnNdPVwiRWRpdFVzZXJQZXJtaXNzaW9uU2V0XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlclBlcm1pc3Npb25zXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyIFtvcHRpb25zXT1cIkVkaXRQcm9maWxlSW1hZ2VcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgI0Nsb3NlRWRpdFVzZXJNb2RhbCBpZD1cIkNsb3NlRWRpdFVzZXJNb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcblxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG48IS0tIERlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNBY3RpdmF0ZVVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCIhU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlYWN0aXZhdGVcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCJTaG93QWN0aXZhdGVNb2RlbERhdGFcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aXZhdGVcIil9fVxyXG4gICAgICA8L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2YXRlQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBpZD1cIlwiIGNsYXNzPVwiXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ckl0ZW1cIj5cclxuICAgICAgICAgICAgICA8dGQ+e3tOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57e0VtYWlsfX08L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI0Nsb3NlQWN0aXZhdGVVc2VyTW9kYWwgaWQ9XCJDbG9zZUFjdGl2YXRlVXNlck1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIiAoY2xpY2spPVwiZGVhY3RpdmF0ZSgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgKGNsaWNrKT1cImFjdGl2YXRlKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBSZXNldFBhc3N3b3JkIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjUmVzZXRQYXNzd29yZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZFwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUmVzZXRQYXNzd29yZENvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTIwMFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTIwMFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVtYWlsXCIpfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7TmFtZX19PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7RW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uIGlkPVwiQ2xvc2VSZXNldFBhc3N3b3JkVXNlck1vZGFsXCIgI0Nsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbCB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19PC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRQYXNzd29yZCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gc2V0UGFzc3dvcmQgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNzZXRQYXNzd29yZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2V0UGFzc3dvcmRcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNldFBhc3N3b3JkQ29uZmlybWF0aW9uXCIpfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgXCI+XHJcbiAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIj4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiPiB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFzc3dvcmRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvbmZpcm1QYXNzd29yZFwiKX19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+e3tOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPnt7RW1haWx9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJQYXNzd29yZFwiIFtncm91cF09XCJTZXRVc2VyUGFzc3dvcmRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlBhc3N3b3JkQ29uZmlybWF0aW9uXCIgW2dyb3VwXT1cIlNldFVzZXJQYXNzd29yZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uIGlkPVwiQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFwiICNDbG9zZXNldFBhc3N3b3JkVXNlck1vZGFsIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuXHJcblxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBTZW5kIEFjdGl2YXRpb24gRW1haWwgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZW5kQWN0aXZhdGlvbkVtYWlsXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RlIG5vdGUtd2FybmluZyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyXCI+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW1haWxcIil9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwXCIgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aD4xXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3VzZXIubmFtZVN0cn19PC90ZD5cclxuXHJcbiAgICAgICAgICAgIDx0ZD57e3VzZXIudXNlcm5hbWV9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIlNlbGVjdGVkVXNlckxpc3QubGVuZ3RoPjFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvbiBidG4tc21cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgPGJ1dHRvbiAjQ2xvc2VBY3RpdmF0aW9uRW1haWxNb2RhbCBpZD1cIkNsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxyXG4gICAgICAgIChjbGljayk9XCJzZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcigpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBjb25maXJtYXRpb24gTWVzc2FnZSAgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQ29uZmlybWF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNvbmZpcm1hdGlvbk1lc3NhZ2VcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7Q29uZmlybWF0aW9uTWVzc2FnZX19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICA8dGFibGUgaWQ9XCJ0YWJsZUNvbmZpcm1hdGlvblwiIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFbWFpbFwiKX19PC90aD5cclxuICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIiAqbmdJZj1cIlNlbGVjdGVkVXNlckxpc3QubGVuZ3RoPjFcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgU2VsZWN0ZWRVc2VyTGlzdFwiIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZGFya1wiPnt7dXNlci5uYW1lU3RyfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7dXNlci51c2VybmFtZX19PC90ZD5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGg+MVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkZWxldGVVc2VyRnJvbUxpc3QodXNlcilcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gI0Nsb3NlQ29uZmlybWF0aW9uTW9kYWwgaWQ9XCJDbG9zZUNvbmZpcm1hdGlvbk1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZT09MVwiIChjbGljayk9XCJhY3RpdmF0ZVVzZXJMaXN0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGU9PTJcIiAoY2xpY2spPVwiZGVhY3RpdmF0ZVVzZXJMaXN0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGU9PTNcIiAoY2xpY2spPVwicmVzZXRVc2VyUGFzc3dvcmRMaXN0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGU9PTRcIiAoY2xpY2spPVwic2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
881
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy91c2Vycy91c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3VzZXJzL3VzZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFtQixjQUFjLEVBQXlCLE1BQU0seUJBQXlCLENBQUM7QUFDeFQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFMUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQU9oRCxNQUFNLE9BQU8sY0FBYztJQXdIekIsWUFBb0IsV0FBd0IsRUFBUyxjQUE4QixFQUFV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LE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0MsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0csZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ291bnRyeSwgQ3VzdG9tVmFsaWRhdGlvbiwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGhvbmVPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGb3JtT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSwgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucywgSW1hZ2VUeXBlLCBQYWdpbmdDb21wb25lbnQsIFBlcm1pc3Npb25TZXRzLCBEcm9wZG93bkxpc3RDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IENvbnRyb2xMYXlvdXQsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgUGFnaW5nT3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQWRkVXNlck1vZGVsIH0gZnJvbSAnLi4vc2hhcmVkL21vZGVscy9Vc2VyTW9kZWxzL0FkZFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRHJvcGRvd25zUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEVkaXRVc2VyTW9kZWwgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL1VzZXJNb2RlbHMvRWRpdFVzZXJNb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL1NlcnZpY2VzL3VzZXJTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlLCBCQlNGVHJhbnNsYXRlU2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uL3NoYXJlZC9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBVc2VyTW9kZWxEVE8gfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVzZXJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdXNlcnMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFByb2R1Y3Rpb25Nb2RlOiBib29sZWFuO1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9Vc2Vycy9cIjtcclxuXHJcbiAgLy9GaWx0ZXIgYW5kIHBhZ2luZyBjb21wb25lbnRzXHJcbiAgVXNlcnNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgcGVybWlzc2lvblNldHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgYWNjb3VudFN0YXR1c09wdGlvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBsb2NrZWRTdGF0dXNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgZGVwYXJ0bWVudHNPcHRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgb3JnYW5pemF0aW9uT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBwZXJtaXNzaW9uU2V0c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBsb2NrZWRTdGF0dXNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgYWNjb3VudFN0YXR1c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBkZXBhcnRtZW50c0ZpbHRlcjogRmlsdGVySXRlbTtcclxuICBvcmdhbml6YXRpb25zRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgSXNGaWx0ZXJEYXRhTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgVXNlclBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBjbGllbnRTaWRlUGFnaW5nUmVzdWx0OiBVc2VyTW9kZWxEVE9bXSA9IFtdO1xyXG4gIFVzZXJQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgQFZpZXdDaGlsZCgnVXNlclBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIFJlcXVpcmVkIGxpc3RzXHJcbiAgU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gIHBlcm1pc3Npb25TZXRMaXN0ID0gW107XHJcbiAgcGVybWlzc2lvbnNMaXN0ID0gW107XHJcbiAgYWNjb3VudFN0YXR1c0xpc3QgPSBbXTtcclxuICBsb2NrZWRTdGF0dXNMaXN0ID0gW107XHJcbiAgZGVwYXJ0bWVudHNMaXN0ID0gW107XHJcbiAgY291bnRyaWVzTGlzdCA9IFtdO1xyXG4gIG9yZ2FuaXphdGlvbkxpc3QgPSBbXTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgncGVybWlzc2lvblNldERETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwZXJtaXNzaW9uU2V0RERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnYWNjb3VudFN0YXR1c0RETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBhY2NvdW50U3RhdHVzRERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbG9ja2VkU3RhdHVzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGxvY2tlZFN0YXR1c0RETDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2RlcGFydG1lbnRzRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRlcGFydG1lbnRzRERMOiBEcm9wZG93bkxpc3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnb3JnYW5pemF0aW9uRERMJywgeyBzdGF0aWM6IGZhbHNlIH0pIG9yZ2FuaXphdGlvbkRETDogRHJvcGRvd25MaXN0Q29tcG9uZW50O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIEFkZCBNb2RlbCBDb250cm9sc1xyXG4gIEFkZFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgQWRkVXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEFkZE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEFkZFVzZXJuYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRTYW1BY2NvdW50OiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyRGVwYXJ0bWVudDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNlbmRBY3RpdmF0aW9uRW1haWw6IFRvZ2dsZVNsaWRlT3B0aW9ucztcclxuICBBZGRVc2VyUGVybWlzc2lvblNldDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFByb2ZpbGVJbWFnZTogUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucztcclxuICBBZGRVc2VyRUlEOiBUZXh0Qm94T3B0aW9ucztcclxuICBBZGRVc2VyTmF0aW9uYWxpdHk6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIGFkZFVzZXJPcmdhbml6YXRpb25zOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdFVzZXJGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdFVzZXJGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0TmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdE1vYmlsZU51bWJlcjogUGhvbmVPcHRpb25zO1xyXG4gIEVkaXRVc2VybmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdEVtYWlsOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0U2FtQWNjb3VudDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFVzZXJEZXBhcnRtZW50OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFVzZXJQZXJtaXNzaW9uU2V0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFVzZXJQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIGVkaXRVc2VyT3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFByb2ZpbGVJbWFnZTogUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucztcclxuICBFZGl0VXNlckVJRDogVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFVzZXJOYXRpb25hbGl0eTogRHJvcGRvd25PcHRpb25zO1xyXG4gIFVzZXJJZDogc3RyaW5nO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIERlYWN0aXZhdGUvQWN0aXZhdGUgVXNlciBNb2RlbCBDb250cm9sc1xyXG4gIFNob3dBY3RpdmF0ZU1vZGVsRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdDogYW55W10gPSBbXTtcclxuICBOYW1lOiBzdHJpbmc7XHJcbiAgRW1haWw6IHN0cmluZztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9SZXNldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgUmVzZXRQYXNzd29yZFVzZXJMaXN0OiBhbnlbXSA9IFtdO1xyXG5cclxuICAvL3NldCBQYXNzd29yZCBVc2VyIE1vZGVsIENvbnRyb2xzXHJcbiAgU2V0VXNlclBhc3N3b3JkRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIFNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIFBhc3N3b3JkOiBUZXh0Qm94T3B0aW9ucztcclxuICBQYXNzd29yZENvbmZpcm1hdGlvbjogVGV4dEJveE9wdGlvbnM7XHJcbiAgY3VzdG9tVmFsaWRhdGlvbjogQ3VzdG9tVmFsaWRhdGlvbiA9IG5ldyBDdXN0b21WYWxpZGF0aW9uKCk7XHJcbiAgc2V0UGFzc3dvcmRVc2VyVG9rZW46IHN0cmluZztcclxuXHJcbiAgLy9Db25maXJtYXRpb24gIE1vZGVsIENvbnRyb2xzXHJcbiAgQ29uZmlybWF0aW9uTW9kYWxUeXBlOiBudW1iZXIgPSAwO1xyXG4gIENvbmZpcm1hdGlvbk1lc3NhZ2U6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vVXNlcnMgc2VsZWN0aW9uXHJcbiAgYWN0aXZhdGVkVXNlcnNTZWxlY3RlZDogbnVtYmVyID0gMDtcclxuICBkZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQ6IG51bWJlciA9IDA7XHJcbiAgc2hvd0FjdGl2YXRlQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0RlYWN0aXZhdGVCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2V0UGFzc0J0bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dSZXNldFBhc3NCdG46IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93U2VuZEVtYWlsQnRuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0dlbmVyYWxCdG5zOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50VXNlclByb2ZpbGU6IGFueTtcclxuICBwZXJtaXNzaW9uU2V0cyA9IFBlcm1pc3Npb25TZXRzO1xyXG4gIGlzTXVsdGlUZW5hbmN5QWxsb3dlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLFxyXG4gICAgICAgIHBhdGg6ICcvQWRtaW4vSG9tZScsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBwYXRoOiAnJyxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLlByb2R1Y3Rpb25Nb2RlID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0UHJvZHVjdGlvbk1vZGUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICAgIHRoaXMuY3VycmVudFVzZXJQcm9maWxlID0gdGhpcy5hdXRoU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnByb2ZpbGU7XHJcbiAgICB0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFsbG93TXVsdGlUZW5hbmN5KCk7XHJcbiAgfVxyXG5cclxuICAvL1BhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRVc2Vyc0xpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHNlYXJjaENsaWVudFNpZGUoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0LmZpbHRlcihcclxuICAgICAgICBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgcmV0dXJuIChpdGVtLm5hbWUuZW5nbGlzaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGl0ZW0ubmFtZS5hcmFiaWMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBpdGVtLnVzZXJuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLlVzZXJQYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gSW5pdGlhbGl6ZSBmaWx0ZXJzIGFuZCBwYWdpbmdcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuXHJcbiAgICAvLyBQZXJtaXNzaW9uIFNldHMgaW5pdFxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5uYW1lID0gXCJwZXJtaXNzaW9uc2V0c1wiO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzT3B0aW9ucy5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c09wdGlvbnMucGxhY2Vob2xkZXIgPSBcIlwiO1xyXG5cclxuICAgIC8vIEFjY291bnQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNPcHRpb25zLm5hbWUgPSBcImFjY291bnRzdGF0dXNcIjtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMubGFiZWxLZXkgPSBcIkFjY291bnRTdGF0dXNcIjtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBMb2NrZWQgU3RhdHVzIGluaXRcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5uYW1lID0gXCJsb2NrZWRzdGF0dXNcIjtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5sYWJlbEtleSA9IFwiTG9ja2VkU3RhdHVzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c09wdGlvbnMuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAvLyBkZXBhcnRtZW50cyBpbml0XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLm5hbWUgPSBcImRlcGFydG1lbnRzXCI7XHJcbiAgICB0aGlzLmRlcGFydG1lbnRzT3B0aW9ucy5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudHNcIjtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNPcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c09wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5uYW1lID0gXCJvcmdhbml6YXRpb25cIjtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5sYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uc1wiO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbk9wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gubmFtZSA9IFwic2VhcmNoVGV4dEJveFwiO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LmV4dHJhQ2xhc3NlcyA9IFwiVXNlcnNcIjtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5wbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZU9yRW1haWxcIik7XHJcblxyXG5cclxuICAgIC8vRmlsdGVyc1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5zZWFyY2hUZXh0Qm94Lm5hbWU7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJuYW1lRmlsdGVyXCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3g7XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMucGVybWlzc2lvblNldHNPcHRpb25zLm5hbWU7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIlBlcm1pc3Npb25TZXRJZHNcIjtcclxuICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXRzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5hY2NvdW50U3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMuYWNjb3VudFN0YXR1c09wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJhY2NvdW50U3RhdHVzSURzXCI7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLmFjY291bnRTdGF0dXNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMubG9ja2VkU3RhdHVzT3B0aW9ucy5uYW1lO1xyXG4gICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwibG9ja2VkU3RhdHVzSWRzXCI7XHJcbiAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMubG9ja2VkU3RhdHVzRmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLkRyb3Bkb3duTGlzdDtcclxuXHJcbiAgICB0aGlzLmRlcGFydG1lbnRzRmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5kZXBhcnRtZW50c09wdGlvbnMubmFtZTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwiZGVwYXJ0bWVudElkc1wiO1xyXG4gICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgdGhpcy5Vc2VyUGFnaW5nLmZpbHRlcnMgPSB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycyA/PyBbXTtcclxuICAgICAgdGhpcy5Vc2VyUGFnaW5nLmRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyA9IHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPz8gW107XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLm5hbWU7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5Ecm9wZG93bkxpc3Q7XHJcblxyXG4gICAgICB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycy5wdXNoKHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlcik7XHJcbiAgICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMucHVzaCh0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuVXNlclBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0VXNlcnNCeUZpbHRlcic7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmcub25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lXHJcbiAgICBdO1xyXG5cclxuICAgIHRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPSBbXHJcbiAgICAgIC4uLnRoaXMuVXNlclBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMsXHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgICB0aGlzLmxvY2tlZFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlci5mb3JtQ29udHJvbE5hbWUsXHJcbiAgICAgIHRoaXMuZGVwYXJ0bWVudHNGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLlVzZXJQYWdpbmcuZmlsdGVycyA9IFtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0c0ZpbHRlcixcclxuICAgICAgdGhpcy5sb2NrZWRTdGF0dXNGaWx0ZXIsXHJcbiAgICAgIHRoaXMuYWNjb3VudFN0YXR1c0ZpbHRlcixcclxuICAgICAgdGhpcy5kZXBhcnRtZW50c0ZpbHRlcixcclxuICAgICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXJcclxuICAgIF07XHJcblxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmcucmVzZXRGaWx0ZXJCdXR0b25OYW1lID0gXCJ1c2Vyc0ZpbHRlcnNCdG5cIjtcclxuXHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBMb2FkIGxpc3RzIGZvciBmaWx0ZXJzXHJcbiAgbG9hZExpc3RzKCkge1xyXG4gICAgaWYgKCF0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLkxvYWRkcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIGxldCBEcm9wZG93bnNSZXNwb25zZU1vZGVsID0gcmVzdWx0IGFzIERyb3Bkb3duc1Jlc3BvbnNlTW9kZWw7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwucGVybWVzc2lvbnNldHM7XHJcbiAgICAgICAgdGhpcy5hY2NvdW50U3RhdHVzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuYWNjb3VudFN0YXR1cztcclxuICAgICAgICB0aGlzLmxvY2tlZFN0YXR1c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmxvY2tlZFN0YXR1cztcclxuICAgICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IERyb3Bkb3duc1Jlc3BvbnNlTW9kZWwuZGVwYXJ0bWVudHM7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5vcmdhbml6YXRpb25zO1xyXG5cclxuICAgICAgICBsZXQgcGVybWlzc2lvblNldEVsZW1lbnQgPSB0aGlzLnBlcm1pc3Npb25TZXREREw7XHJcbiAgICAgICAgbGV0IGFjY291bnRTdGF0dXNFbGVtZW50ID0gdGhpcy5hY2NvdW50U3RhdHVzRERMO1xyXG4gICAgICAgIGxldCBsb2NrZWRTdGF0dXNFbGVtZW50ID0gdGhpcy5sb2NrZWRTdGF0dXNEREw7XHJcbiAgICAgICAgbGV0IGRlcGFydG1lbnRzRWxlbWVudCA9IHRoaXMuZGVwYXJ0bWVudHNEREw7XHJcbiAgICAgICAgbGV0IG9yZ2FuaXphdGlvbnNFbGVtZW50ID0gdGhpcy5vcmdhbml6YXRpb25EREw7XHJcblxyXG4gICAgICAgIHBlcm1pc3Npb25TZXRFbGVtZW50LnVwZGF0ZURhdGFTb3VyY2UodGhpcy5wZXJtaXNzaW9uU2V0TGlzdCk7XHJcbiAgICAgICAgYWNjb3VudFN0YXR1c0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLmFjY291bnRTdGF0dXNMaXN0KTtcclxuICAgICAgICBsb2NrZWRTdGF0dXNFbGVtZW50LnVwZGF0ZURhdGFTb3VyY2UodGhpcy5sb2NrZWRTdGF0dXNMaXN0KTtcclxuICAgICAgICBkZXBhcnRtZW50c0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLmRlcGFydG1lbnRzTGlzdCk7XHJcbiAgICAgICAgb3JnYW5pemF0aW9uc0VsZW1lbnQudXBkYXRlRGF0YVNvdXJjZSh0aGlzLm9yZ2FuaXphdGlvbkxpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLklzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBVc2VycyBjaGVja2JveGVzIHNlbGVjdGlvbiBmdW5jdGlvbnNcclxuICBzZWxlY3RBbGxVc2VyTGlzdChldmVudCwgVXNlcnM6IGFueVtdKSB7XHJcbiAgICBpZiAodGhpcy5Vc2VyUGFnaW5nUmVzdWx0ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZvckVhY2godSA9PiB1LnNlbGVjdGVkID0gZXZlbnQuY2hlY2tlZCk7XHJcblxyXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFVzZXJzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSBVc2Vyc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnB1c2godXNlcik7XHJcbiAgICAgICAgaWYgKHVzZXIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gaXRlbS5pc0FjdGl2ZTsgfSkubWFwKChpdGVtKSA9PiBpdGVtLmtleSkubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IFVzZXJzLmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gIWl0ZW0uaXNBY3RpdmU7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID0gMDtcclxuICAgICAgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPSAwO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVVc2VyTGlzdChldmVudCwgVXNlcikge1xyXG4gICAgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmZpbmQodSA9PiB1LmlkID09PSBVc2VyLmlkKS5zZWxlY3RlZCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5Vc2VyUGFnaW5nUmVzdWx0ICE9IG51bGwgJiYgdGhpcy5Vc2VyUGFnaW5nUmVzdWx0LmV2ZXJ5KHUgPT4gdS5zZWxlY3RlZCk7XHJcbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgICAgaWYgKFVzZXIuaXNBY3RpdmUpXHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkICs9IDE7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCArPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICBpZiAodmFsdWUuaWQgPT0gVXNlci5pZCkgdGhpcy5TZWxlY3RlZFVzZXJMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoVXNlci5pc0FjdGl2ZSlcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgLT0gMTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkIC09IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZUJ1dHRvbnMoKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVVzZXJGcm9tTGlzdCh1c2VyOiBhbnkpIHtcclxuICAgIHRoaXMuVXNlclBhZ2luZ1Jlc3VsdC5maW5kKHUgPT4gdS5pZCA9PT0gdXNlci5pZCkuc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHVzZXIpO1xyXG4gICAgaWYgKHVzZXIuaXNBY3RpdmUpXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCAtPSAxO1xyXG4gICAgdGhpcy5lbmFibGVCdXR0b25zKCk7XHJcbiAgICBpZiAodGhpcy5TZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZUJ1dHRvbnMoKSB7XHJcbiAgICAvL1Jlc2V0IGFsbCBidG5zXHJcbiAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwICYmIHRoaXMuZGVBY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApXHJcbiAgICAgIHRoaXMuc2hvd0dlbmVyYWxCdG5zID0gdHJ1ZTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IGZhbHNlO1xyXG5cclxuICAgICAgLy9pZiBvbmx5IGFjdGl2YXRlZCB1c2Vyc1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID4gMCAmJiB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9PSAwKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGVhY3RpdmF0ZUJ0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5hY3RpdmF0ZWRVc2Vyc1NlbGVjdGVkID09IDApICAgICAvL2lmIG9ubHkgZGVBY3RpdmF0ZWQgdXNlcnNcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd0FjdGl2YXRlQnRuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZW5kRW1haWxCdG4gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA+IDAgJiYgdGhpcy5kZUFjdGl2YXRlZFVzZXJzU2VsZWN0ZWQgPiAwKSAvL2lmIGFjdGl2YXRlZCBhbmQgZGVhY3RpdmF0ZWQgdXNlcnMgc2VsZWN0ZWRcclxuICAgICAge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jlc2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U2V0UGFzc0J0biA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVCdXR0b25zKCkge1xyXG4gICAgLy9SZXNldCBhbGwgYnRuc1xyXG4gICAgdGhpcy5zaG93QWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0RlYWN0aXZhdGVCdG4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd1NlbmRFbWFpbEJ0biA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93UmVzZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTZXRQYXNzQnRuID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dHZW5lcmFsQnRucyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNldFVzZXJzQ291bnQoKSB7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuYWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLmRlQWN0aXZhdGVkVXNlcnNTZWxlY3RlZCA9IDA7XHJcbiAgICB0aGlzLlVzZXJQYWdpbmdSZXN1bHQuZm9yRWFjaCh1ID0+IHUuc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gQWRkIFVzZXJcclxuICBzaG93QWRkVXNlck1vZGFsKGFkZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuTG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblxyXG4gICAgICBsZXQgRHJvcGRvd25zUmVzcG9uc2VNb2RlbCA9IHJlc3VsdCBhcyBEcm9wZG93bnNSZXNwb25zZU1vZGVsO1xyXG4gICAgICAvL1NldCByZXF1aXJlZCBsaXN0c1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRMaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5wZXJtZXNzaW9uc2V0cztcclxuICAgICAgdGhpcy5kZXBhcnRtZW50c0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBEcm9wZG93bnNSZXNwb25zZU1vZGVsLmNvdW50cmllcztcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gRHJvcGRvd25zUmVzcG9uc2VNb2RlbC5vcmdhbml6YXRpb25zO1xyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5BZGRVc2VyRm9ybTtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkVXNlck1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFVzZXJGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRVc2VyRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgICAgdGhpcy5BZGROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuQWRkTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGROYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIgPSBuZXcgUGhvbmVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIubmFtZSA9IFwiUGhvbmVJbnB1dE1vYmlsZVwiO1xyXG4gICAgICB0aGlzLkFkZE1vYmlsZU51bWJlci5sYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCI7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmV4dHJhQ2xhc3NlcyA9IFwiZm9ybS1jb250cm9sIGJuc2lnaHRzLWNvbnRyb2xcIjtcclxuICAgICAgdGhpcy5BZGRNb2JpbGVOdW1iZXIuc2VsZWN0ZWRDb3VudHJ5SVNPID0gQ291bnRyeS5Vbml0ZWRBcmFiRW1pcmF0ZXM7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkTW9iaWxlTnVtYmVyLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkVXNlcm5hbWUubmFtZSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5BZGRVc2VybmFtZS50eXBlID0gSW5wdXRUeXBlLkVtYWlsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2FtQWNjb3VudCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQudmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkFkZFNhbUFjY291bnQubGFiZWxLZXkgPSBcIlNhbUFjY291bnRcIjtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5sYWJlbEtleSA9IFwiRGVwYXJ0bWVudFwiO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmRhdGFTb3VyY2UgPSB0aGlzLmRlcGFydG1lbnRzTGlzdDtcclxuICAgICAgdGhpcy5BZGRVc2VyRGVwYXJ0bWVudC5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJEZXBhcnRtZW50LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLm5hbWUgPSBcIlNlbmRBY3RpdmF0aW9uTWFpbFwiO1xyXG4gICAgICB0aGlzLkFkZFNlbmRBY3RpdmF0aW9uRW1haWwubGFiZWxLZXkgPSBcIlNlbmRBY3RpdmF0aW9uRW1haWxcIjtcclxuICAgICAgdGhpcy5BZGRTZW5kQWN0aXZhdGlvbkVtYWlsLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkU2VuZEFjdGl2YXRpb25FbWFpbC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQubmFtZSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5sYWJlbEtleSA9IFwiUGVybWlzc2lvblNldHNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uU2V0TGlzdDtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25TZXQuaXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlclBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFVzZXJQZXJtaXNzaW9ucy5pc1JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLkFkZFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubmFtZSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkubGFiZWxLZXkgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuc2hvd0NoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkVXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRVc2VyTmF0aW9uYWxpdHkuZGF0YVNvdXJjZSA9IHRoaXMuY291bnRyaWVzTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFVzZXJFSUQubmFtZSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuQWRkVXNlckVJRC50eXBlID0gSW5wdXRUeXBlLkVJRDtcclxuICAgICAgdGhpcy5BZGRVc2VyRUlELnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuXHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlID0gbmV3IFByb2ZpbGVJbWFnZVVwbG9hZE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIjtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2UubGFiZWxWYWx1ZSA9IFwiUHJvZmlsZUltYWdlXCI7XHJcbiAgICAgIHRoaXMuQWRkUHJvZmlsZUltYWdlLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkFkZFByb2ZpbGVJbWFnZS5pbWFnZVVwbG9hZEFjY2VwdHNUeXBlcyA9IFtJbWFnZVR5cGUuSW1hZ2VUeXBlc107XHJcblxyXG4gICAgICB0aGlzLkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkID0gbmV3IFRvZ2dsZVNsaWRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEZvcmNlVXNlckNoYW5nZVBhc3N3b3JkLm5hbWUgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQubGFiZWxLZXkgPSBcIkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkXCI7XHJcbiAgICAgIHRoaXMuQWRkRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQudmFsdWUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZC52aWV3VHlwZSA9IENvbnRyb2xMYXlvdXQuSG9yaXpvbnRhbDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pIHtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuYWRkVXNlck9yZ2FuaXphdGlvbnMubmFtZSA9IFwib3JnYW5pemF0aW9uSWRcIjtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLmxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIjtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYWRkVXNlck9yZ2FuaXphdGlvbnMuZGF0YVNvdXJjZSA9IHRoaXMub3JnYW5pemF0aW9uTGlzdDtcclxuICAgICAgICB0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hZGRVc2VyT3JnYW5pemF0aW9ucy5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oYWRkVXNlck1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0QWRkVXNlck1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFVzZXJGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBhZGRNb2RlbCA9IG5ldyBBZGRVc2VyTW9kZWwoKTtcclxuICAgIGFkZE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBhZGRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIGFkZE1vZGVsLk5hdGlvbmFsaXR5ID0gUmVzdWx0TW9kZWwuTmF0aW9uYWxpdHk7XHJcbiAgICBhZGRNb2RlbC5FSUQgPSBSZXN1bHRNb2RlbC5FSUQ7XHJcbiAgICBhZGRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuXHJcbiAgICBhZGRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEID0gKHRoaXMuaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIHRoaXMuY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gdGhpcy5wZXJtaXNzaW9uU2V0cy5BZG1pbilcclxuICAgICAgPyBSZXN1bHRNb2RlbFt0aGlzLmFkZFVzZXJPcmdhbml6YXRpb25zLm5hbWVdXHJcbiAgICAgIDogdGhpcy5jdXJyZW50VXNlclByb2ZpbGUub3JnYW5pemF0aW9uR1VJRF9JRCA/PyBDb25zdGFudHMuT3JnYW5pemF0aW9uSURfR1VJRDtcclxuXHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuRGVwYXJ0bWVudElEX0dVSUQgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBhZGRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCA9IFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEO1xyXG5cclxuICAgIGxldCBQZXJtaXNzaW9uU2V0cyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25TZXRzIGFzIHN0cmluZ1tdO1xyXG4gICAgYWRkTW9kZWwuUGVybWlzc2lvblNldHMgPSBQZXJtaXNzaW9uU2V0cztcclxuICAgIGxldCBQZXJtaXNzaW9ucyA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25zIGFzIHN0cmluZ1tdO1xyXG4gICAgYWRkTW9kZWwuUGVybWlzc2lvbnMgPSBQZXJtaXNzaW9ucztcclxuICAgIGFkZE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbCA9IFJlc3VsdE1vZGVsLlNlbmRBY3RpdmF0aW9uTWFpbDtcclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgYWRkTW9kZWwuUGhvbmVJbnB1dE1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBhZGRNb2RlbC5Qcm9maWxlSW1hZ2UgPSBSZXN1bHRNb2RlbC5JbWFnZTtcclxuICAgIGFkZE1vZGVsLkZvcmNlVXNlckNoYW5nZVBhc3N3b3JkID0gUmVzdWx0TW9kZWwuRm9yY2VVc2VyQ2hhbmdlUGFzc3dvcmQ7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goYWRkTW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0QWRkVXNlckZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLkFkZFVzZXIoQWRkTW9kZWwpO1xyXG4gIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IFVzZXJcclxuICBzaG93RWRpdFVzZXJNb2RhbCh1c2VySUQ6IHN0cmluZywgRWRpdFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuVXNlcklkID0gdXNlcklEO1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2UuZ2V0RWRpdFVzZXIodXNlcklEKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgbGV0IHVzZXIgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIGxldCBsaXN0cyA9IHJlc3VsdE9iai5saXN0cyBhcyBEcm9wZG93bnNSZXNwb25zZU1vZGVsO1xyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0TGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zZXRzO1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGxpc3RzLnBlcm1lc3Npb25zO1xyXG4gICAgICB0aGlzLmRlcGFydG1lbnRzTGlzdCA9IGxpc3RzLmRlcGFydG1lbnRzO1xyXG4gICAgICB0aGlzLmNvdW50cmllc0xpc3QgPSBsaXN0cy5jb3VudHJpZXM7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uTGlzdCA9IGxpc3RzLm9yZ2FuaXphdGlvbnM7XHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLkVkaXRVc2VyRm9ybTtcclxuICAgICAgdGhpcy5FZGl0VXNlckZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRVc2VyRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG4gICAgICBsZXQgTmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIE5hbWUuZW5nbGlzaCA9IHVzZXIubmFtZS5lbmdsaXNoO1xyXG4gICAgICBOYW1lLmFyYWJpYyA9IHVzZXIubmFtZS5hcmFiaWM7XHJcblxyXG4gICAgICB0aGlzLkVkaXROYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXROYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5FZGl0TmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0TmFtZS52YWx1ZSA9IE5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyID0gbmV3IFBob25lT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRNb2JpbGVOdW1iZXIudmFsdWUgPSB1c2VyLm1vYmlsZSBhcyBzdHJpbmc7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5uYW1lID0gXCJQaG9uZUlucHV0TW9iaWxlXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5sYWJlbEtleSA9IFwiTW9iaWxlTnVtYmVyXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5leHRyYUNsYXNzZXMgPSBcImZvcm0tY29udHJvbCBibnNpZ2h0cy1jb250cm9sXCI7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5zZWxlY3RlZENvdW50cnlJU08gPSBDb3VudHJ5LlVuaXRlZEFyYWJFbWlyYXRlcztcclxuICAgICAgdGhpcy5FZGl0TW9iaWxlTnVtYmVyLnBob25lVmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdE1vYmlsZU51bWJlci5hbGxvd1NlYXJjaCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUudmFsdWUgPSB1c2VyLnVzZXJuYW1lO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5uYW1lID0gXCJVc2VybmFtZVwiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VybmFtZS5sYWJlbEtleSA9IFwiVXNlcm5hbWVcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUudHlwZSA9IElucHV0VHlwZS5FbWFpbDtcclxuICAgICAgdGhpcy5FZGl0VXNlcm5hbWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJuYW1lLm1heExlbmd0aCA9IDI1NjtcclxuXHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLnZhbHVlID0gdXNlci5lbWFpbDtcclxuICAgICAgdGhpcy5FZGl0RW1haWwubmFtZSA9IFwiRW1haWxcIjtcclxuICAgICAgdGhpcy5FZGl0RW1haWwubGFiZWxLZXkgPSBcIkVtYWlsXCI7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLnR5cGUgPSBJbnB1dFR5cGUuRW1haWw7XHJcbiAgICAgIHRoaXMuRWRpdEVtYWlsLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRFbWFpbC5tYXhMZW5ndGggPSAyNTY7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQudmFsdWUgPSB1c2VyLnNhbUFjY291bnQ7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQubmFtZSA9IFwiU2FtQWNjb3VudFwiO1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50LmxhYmVsS2V5ID0gXCJTYW1BY2NvdW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFNhbUFjY291bnQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTYW1BY2NvdW50Lm1heExlbmd0aCA9IDI1NjtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRVc2VyRGVwYXJ0bWVudCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQubmFtZSA9IFwiRGVwYXJ0bWVudElEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQubGFiZWxLZXkgPSBcIkRlcGFydG1lbnRcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2VsZWN0ZWRJdGVtcyA9IHVzZXIuZGVwYXJ0bWVudElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJEZXBhcnRtZW50LmRhdGFTb3VyY2UgPSB0aGlzLmRlcGFydG1lbnRzTGlzdDtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlckRlcGFydG1lbnQuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIHRoaXMuY3VycmVudFVzZXJQcm9maWxlLnBlcm1pc3Npb25TZXRTSUQgPT0gdGhpcy5wZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5uYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24ubGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiO1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24uc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5kYXRhU291cmNlID0gdGhpcy5vcmdhbml6YXRpb25MaXN0O1xyXG4gICAgICAgIHRoaXMuZWRpdFVzZXJPcmdhbml6YXRpb24uc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmVkaXRVc2VyT3JnYW5pemF0aW9uLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25TZXQgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0Lm5hbWUgPSBcIlBlcm1pc3Npb25TZXRzXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uU2V0c1wiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5zZWxlY3RlZEl0ZW1zID0gdXNlci5wZXJtaXNzaW9uU2V0SURzLm1hcCgoaXRlbSkgPT4gaXRlbS50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25TZXQuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvblNldExpc3Q7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvblNldC5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9uU2V0LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbnNcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uc1wiO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IHVzZXIucGVybWlzc2lvbklEcy5tYXAoKGl0ZW0pID0+IGl0ZW0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uc0xpc3Q7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlclBlcm1pc3Npb25zLmlzUmVxdWlyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5Lm5hbWUgPSBcIk5hdGlvbmFsaXR5XCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5sYWJlbEtleSA9IFwiTmF0aW9uYWxpdHlcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnZpZXdUeXBlID0gQ29udHJvbExheW91dC5WZXJ0aWNhbDtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5zaG93Q2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0VXNlck5hdGlvbmFsaXR5LmRhdGFTb3VyY2UgPSB0aGlzLmNvdW50cmllc0xpc3Q7XHJcbiAgICAgIGlmICh1c2VyLm5hdGlvbmFsaXR5KVxyXG4gICAgICAgIHRoaXMuRWRpdFVzZXJOYXRpb25hbGl0eS5zZWxlY3RlZEl0ZW1zID0gdXNlci5uYXRpb25hbGl0eTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC5uYW1lID0gXCJFSURcIjtcclxuICAgICAgdGhpcy5FZGl0VXNlckVJRC5sYWJlbEtleSA9IFwiRUlEXCI7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudHlwZSA9IElucHV0VHlwZS5FSUQ7XHJcbiAgICAgIHRoaXMuRWRpdFVzZXJFSUQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRVc2VyRUlELnZhbHVlID0gdXNlci5laWQ7XHJcblxyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UgPSBuZXcgUHJvZmlsZUltYWdlVXBsb2FkT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UubmFtZSA9IFwiSW1hZ2VcIjtcclxuICAgICAgdGhpcy5FZGl0UHJvZmlsZUltYWdlLmxhYmVsVmFsdWUgPSBcIlByb2ZpbGVJbWFnZVwiO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2Uudmlld1R5cGUgPSBDb250cm9sTGF5b3V0LlZlcnRpY2FsO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UuaW1hZ2VVcGxvYWRBY2NlcHRzVHlwZXMgPSBbSW1hZ2VUeXBlLkltYWdlVHlwZXNdO1xyXG4gICAgICB0aGlzLkVkaXRQcm9maWxlSW1hZ2UudmFsdWUgPSB1c2VyLnByb2ZpbGVJbWFnZTtcclxuXHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdFVzZXJNb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgZ2V0RWRpdFVzZXJNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0VXNlckZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IGVkaXRNb2RlbCA9IG5ldyBFZGl0VXNlck1vZGVsKCk7XHJcbiAgICBlZGl0TW9kZWwuSURfR1VJRCA9IHRoaXMuVXNlcklkO1xyXG4gICAgZWRpdE1vZGVsLlVzZXJuYW1lID0gUmVzdWx0TW9kZWwuVXNlcm5hbWU7XHJcbiAgICBlZGl0TW9kZWwuRW1haWwgPSBSZXN1bHRNb2RlbC5FbWFpbDtcclxuICAgIGVkaXRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIGVkaXRNb2RlbC5OYXRpb25hbGl0eSA9IFJlc3VsdE1vZGVsLk5hdGlvbmFsaXR5O1xyXG4gICAgZWRpdE1vZGVsLkVJRCA9IFJlc3VsdE1vZGVsLkVJRDtcclxuICAgIGVkaXRNb2RlbC5TYW1BY2NvdW50ID0gUmVzdWx0TW9kZWwuU2FtQWNjb3VudDtcclxuXHJcbiAgICBlZGl0TW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRCA9ICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHRoaXMucGVybWlzc2lvblNldHMuQWRtaW4pXHJcbiAgICAgID8gUmVzdWx0TW9kZWxbdGhpcy5lZGl0VXNlck9yZ2FuaXphdGlvbi5uYW1lXVxyXG4gICAgICA6IHRoaXMuY3VycmVudFVzZXJQcm9maWxlLm9yZ2FuaXphdGlvbkdVSURfSUQgPz8gQ29uc3RhbnRzLk9yZ2FuaXphdGlvbklEX0dVSUQ7XHJcblxyXG4gICAgaWYgKFJlc3VsdE1vZGVsLkRlcGFydG1lbnRJRF9HVUlEICE9IHVuZGVmaW5lZClcclxuICAgICAgZWRpdE1vZGVsLkRlcGFydG1lbnRJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5EZXBhcnRtZW50SURfR1VJRCk7XHJcblxyXG4gICAgbGV0IFBlcm1pc3Npb25TZXRzID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvblNldHMgYXMgc3RyaW5nW107XHJcbiAgICBlZGl0TW9kZWwuUGVybWlzc2lvblNldElEcyA9IFBlcm1pc3Npb25TZXRzO1xyXG4gICAgbGV0IFBlcm1pc3Npb25zID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvbnMgYXMgc3RyaW5nW107XHJcbiAgICBlZGl0TW9kZWwuUGVybWlzc2lvbklEcyA9IFBlcm1pc3Npb25zO1xyXG5cclxuICAgIGxldCBpbnRlcm5hdGlvbmFsTnVtYmVyOiBzdHJpbmcgPSBudWxsO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBob25lSW5wdXRNb2JpbGUgIT0gbnVsbCkge1xyXG4gICAgICBpbnRlcm5hdGlvbmFsTnVtYmVyID0gUmVzdWx0TW9kZWwuUGhvbmVJbnB1dE1vYmlsZS5pbnRlcm5hdGlvbmFsTnVtYmVyIGFzIHN0cmluZztcclxuICAgICAgaW50ZXJuYXRpb25hbE51bWJlciA9IGludGVybmF0aW9uYWxOdW1iZXIucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgZWRpdE1vZGVsLk1vYmlsZSA9IGludGVybmF0aW9uYWxOdW1iZXI7XHJcbiAgICBlZGl0TW9kZWwuUHJvZmlsZUltYWdlID0gUmVzdWx0TW9kZWwuSW1hZ2U7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goZWRpdE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH07XHJcbiAgZ2V0RWRpdFVzZXJGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuRWRpdFVzZXIoRWRpdE1vZGVsKTtcclxuICB9O1xyXG4gIGNoYW5nZVBlcm1pc3Npb25TZXQoaWRzLCBpc0FkZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5Mb2FkUGVybWlzc2lvbnNEcm9wRG93bihpZHMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBkZGwgPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25zTGlzdCA9IGRkbDtcclxuICAgICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5BZGRVc2VyUGVybWlzc2lvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuRWRpdFVzZXJQZXJtaXNzaW9ucy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgICB0aGlzLkVkaXRVc2VyUGVybWlzc2lvbnMuZGF0YVNvdXJjZSA9IHRoaXMucGVybWlzc2lvbnNMaXN0O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gRXhwb3J0IHVzZXJzIGV4Y2VsXHJcbiAgZXhwb3J0RXhjZWwoKSB7XHJcbiAgICBsZXQgZmlsdGVycyA9IHt9O1xyXG4gICAgZmlsdGVycyA9IHRoaXMucGFnaW5nRWxlbWVudC5nZXRGaWx0ZXJzVmFsdWUoKTtcclxuXHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkV4cG9ydChmaWx0ZXJzKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBkZWJ1Z2dlcjtcclxuICAgICAgbGV0IEZpbGVEVE8gPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IEJsb2IoW0ZpbGVEVE9dLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcgfSk7XHJcbiAgICAgIGxldCBmaWxlTmFtZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlVzZXJzXCIpICsgXCIueGxzeFwiO1xyXG4gICAgICBzYXZlQXMoZmlsZSwgZmlsZU5hbWUpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcblxyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vT25lIHVzZXIgZnVuY3Rpb25zXHJcblxyXG4gIC8vQWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIGZ1bmN0aW9uc1xyXG4gIHNob3dBY3RpdmF0ZVVzZXJNb2RhbChVc2VyOiBhbnksIGlzQWN0aXZhdGVNb2RlbDogYm9vbGVhbiwgQWN0aXZhdGVVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5BY3RpdmF0b3JEZWFjdGl2YXRlVXNlckxpc3QucHVzaChVc2VyKTtcclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5TaG93QWN0aXZhdGVNb2RlbERhdGEgPSBpc0FjdGl2YXRlTW9kZWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFjdGl2YXRlVXNlck1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuQWN0aXZhdGVVc2Vycyh0aGlzLkFjdGl2YXRvckRlYWN0aXZhdGVVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZSgpIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuRGVhY3RpdmF0ZVVzZXJzKHRoaXMuQWN0aXZhdG9yRGVhY3RpdmF0ZVVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIFJlc2V0IFBhc3N3b3JkIEZ1bmN0aW9uc1xyXG4gIHNob3dSZXNldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgUmVzZXRQYXNzd29yZFVzZXJNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuUmVzZXRQYXNzd29yZFVzZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLlJlc2V0UGFzc3dvcmRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFJlc2V0UGFzc3dvcmRVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICByZXNldFBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5SZXNldFBhc3N3b3JkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9TZW5kIGFjdGl2YXRpb24gbWFpbCBmdW5jdGlvblxyXG4gIHNob3dTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwoVXNlcjogYW55LCBTZW5kQWN0aXZhdGlvbkVtYWlsTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdC5wdXNoKFVzZXIpO1xyXG4gICAgdGhpcy5OYW1lID0gVXNlci5uYW1lU3RyO1xyXG4gICAgdGhpcy5FbWFpbCA9IFVzZXIuZW1haWw7XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgc2VuZEFjdGl2YXRpb25FbWFpbEZvclVzZXIoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLlNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xyXG4gICAgICB0aGlzLlNlbGVjdGVkVXNlckxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5wYWdpbmdFbGVtZW50LnVwZGF0ZVBhZ2luZygpO1xyXG5cclxuICAgICAgdGhpcy5yZXNldFVzZXJzQ291bnQoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gICAgfSwgKGVycm9yKSA9PiB7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9TZXQgcGFzc3dvcmQgZnVuY3Rpb25cclxuXHJcbiAgc2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKFVzZXI6IGFueSwgc2V0UGFzc3dvcmRVc2VyTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRTZXRQQXNzd29yZE1vZGVsO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldFNldFBhc3N3b3JkRnVuY3Rpb247XHJcbiAgICB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuICAgIHRoaXMuU2V0VXNlclBhc3N3b3JkRm9ybU9wdGlvbnMucGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG4gICAgdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtT3B0aW9ucy5vblN1Y2Nlc3NIYW5kbGVyID0gdGhpcy5vblN1Ym1pdFN1Y2Nlc3M7XHJcblxyXG5cclxuICAgIHRoaXMuTmFtZSA9IFVzZXIubmFtZVN0cjtcclxuICAgIHRoaXMuRW1haWwgPSBVc2VyLmVtYWlsO1xyXG4gICAgdGhpcy5zZXRQYXNzd29yZFVzZXJUb2tlbiA9IFVzZXIudG9rZW47XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5QYXNzd29yZC5uYW1lID0gXCJQYXNzd29yZFwiO1xyXG4gICAgdGhpcy5QYXNzd29yZC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZC50eXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgdGhpcy5QYXNzd29yZC5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5ID0gKGNvbnRyb2wpID0+IHtcclxuICAgICAgbGV0IFBhc3N3b3JkID0gdGhpcy5TZXRVc2VyUGFzc3dvcmRGb3JtLmNvbnRyb2xzW1wiUGFzc3dvcmRcIl0udmFsdWU7XHJcbiAgICAgIGlmIChjb250cm9sLnZhbHVlICE9IFBhc3N3b3JkKVxyXG4gICAgICAgIHJldHVybiB7ICdjdXN0b21lckVycm9yJzogdHJ1ZSB9O1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1c3RvbVZhbGlkYXRpb24ubWFzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBhc3N3b3JkTm90TWF0Y2hcIik7XHJcblxyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5uYW1lID0gXCJQYXNzd29yZENvbmZpcm1hdGlvblwiO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi50eXBlID0gSW5wdXRUeXBlLlBhc3N3b3JkO1xyXG4gICAgdGhpcy5QYXNzd29yZENvbmZpcm1hdGlvbi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHRoaXMuUGFzc3dvcmRDb25maXJtYXRpb24uY3VzdG9tVmFsaWRhdGlvbiA9IFt0aGlzLmN1c3RvbVZhbGlkYXRpb25dO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oc2V0UGFzc3dvcmRVc2VyTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuICBnZXRTZXRQQXNzd29yZE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLlNldFVzZXJQYXNzd29yZEZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgUmVzdWx0TW9kZWwudG9rZW4gPSB0aGlzLnNldFBhc3N3b3JkVXNlclRva2VuO1xyXG4gICAgUmVzdWx0TW9kZWwuaXNBZG1pblNldCA9IHRydWU7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goUmVzdWx0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0U2V0UGFzc3dvcmRGdW5jdGlvbiA9ICh1c2VyUGFzc3dvcmRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS5TZXRVc2Vyc1Bhc3N3b3JkKHVzZXJQYXNzd29yZE1vZGVsKTtcclxuICB9O1xyXG5cclxuICBvblN1Ym1pdFN1Y2Nlc3MgPSAocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgdGhpcy5kaXNhYmxlQnV0dG9ucygpO1xyXG4gIH07XHJcblxyXG4gIC8vVXNlcnMgTGlzdCBGdW5jdGlvbnNcclxuXHJcbiAgLy9TaG93IGFjdGl2YXRlLGRlYWN0aXZhdGUscmVzZXRQYXNzd29yZCxzZW5kYWN0aXZhdGlvbmVtYWlsIG1vZGFsc1xyXG4gIHNob3dDb25maXJtYXRpb25Nb2RhbCh0eXBlOiBudW1iZXIsIENvbmZpcm1hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3RpdmF0ZUNvbmZpcm1hdGlvblwiKTtcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9IDE7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMjpcclxuICAgICAgICB0aGlzLkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWFjdGl2YXRlQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAzOlxyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTWVzc2FnZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlJlc2V0UGFzc3dvcmRDb25maXJtYXRpb25cIik7XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbFR5cGUgPSAzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDQ6XHJcbiAgICAgICAgdGhpcy5Db25maXJtYXRpb25NZXNzYWdlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VuZEFjdGl2YXRpb25NYWlsQ29uZmlybWF0aW9uXCIpO1xyXG4gICAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxUeXBlID0gNDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvbmZpcm1hdGlvbk1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuXHJcbiAgfVxyXG4gIC8vQWN0aXZhdGUgdXNlcnMgbGlzdFxyXG4gIGFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkFjdGl2YXRlVXNlcnModGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy9EZWFjdGl2YXRlIHVzZXJzIGxpc3RcclxuICBkZWFjdGl2YXRlVXNlckxpc3QoKSB7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLkRlYWN0aXZhdGVVc2Vycyh0aGlzLlNlbGVjdGVkVXNlckxpc3QpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgdGhpcy5TZWxlY3RlZFVzZXJMaXN0ID0gW107XHJcbiAgICAgIHRoaXMucGFnaW5nRWxlbWVudC51cGRhdGVQYWdpbmcoKTtcclxuXHJcbiAgICAgIHRoaXMucmVzZXRVc2Vyc0NvdW50KCk7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbnMoKTtcclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICAvL1Jlc2V0IHBhc3N3b3JkcyB1c2VycyBsaXN0XHJcbiAgcmVzZXRVc2VyUGFzc3dvcmRMaXN0KCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5SZXNldFVzZXJzUGFzc3dvcmQodGhpcy5TZWxlY3RlZFVzZXJMaXN0KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIHRoaXMuU2VsZWN0ZWRVc2VyTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2luZ0VsZW1lbnQudXBkYXRlUGFnaW5nKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0VXNlcnNDb3VudCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVCdXR0b25zKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGFuZGxlclNlcnZpY2UuZGVzdHJveUhhbmRsZXIoKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiAqbmdJZj1cIlNob3dQYWdlQ29udGVudFwiIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgPCEtLSBiZWdpbjo6SGVhZGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiVXNlcnNGb3JtXCI+XHJcbiAgICAgICAgICA8IS0tIChvbkNoYW5nZSk9XCJzZWFyY2hDbGllbnRTaWRlKCRldmVudClcIiAtLT5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgbmdiRHJvcGRvd24gY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiIFtuZ1N0eWxlXT1cInsgZGlzcGxheTogU2hvd1BhZ2VDb250ZW50ID09IHRydWUgPyAnYmxvY2snIDogJ25vbmUnIH1cIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRMaXN0cygpXCJcclxuICAgICAgICAgICAgbmdiRHJvcGRvd25Ub2dnbGVcclxuICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICAgIGlkPVwiRmlsdGVyc0Ryb3Bkb3duXCJcclxuICAgICAgICAgICAgdGl0bGU9XCJGaWx0ZXJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0ZpbHRlcicpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgIG5nYkRyb3Bkb3duTWVudVxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9XCJGaWx0ZXJzRHJvcGRvd25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZpbHRlci1jb250YWluZXIgbWVudSBtZW51LXN1YiBtZW51LXN1Yi1kcm9wZG93biBtZW51LWNvbHVtbiBtZW51LXJvdW5kZWQgbWVudS1ncmF5LTgwMCBtZW51LXN0YXRlLWJnLWxpZ2h0LXByaW1hcnkgdy0yNTBweCB3LW1kLTUwMHB4IGZ3LWJvbGQgcHktMyBkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cclxuICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJVc2Vyc0Zvcm1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNyBweS01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNwZXJtaXNzaW9uU2V0RERMIFtvcHRpb25zXT1cInBlcm1pc3Npb25TZXRzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2FjY291bnRTdGF0dXNEREwgW29wdGlvbnNdPVwiYWNjb3VudFN0YXR1c09wdGlvbnNcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0ICNsb2NrZWRTdGF0dXNEREwgW29wdGlvbnNdPVwibG9ja2VkU3RhdHVzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2RlcGFydG1lbnRzRERMIFtvcHRpb25zXT1cImRlcGFydG1lbnRzT3B0aW9uc1wiIFtncm91cF09XCJVc2Vyc0Zvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBjdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSBwZXJtaXNzaW9uU2V0cy5BZG1pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjb3JnYW5pemF0aW9uRERMIFtvcHRpb25zXT1cIm9yZ2FuaXphdGlvbk9wdGlvbnNcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnkgcHYtcmVzZXQgYnRuLXNtXCIgbmFtZT1cInVzZXJzRmlsdGVyc0J0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0JykgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJzaG93R2VuZXJhbEJ0bnNcIlxyXG4gICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zIGJuc2lnaHRzLWJ0bi1leHBvcnRcIlxyXG4gICAgICAgICAgdGl0bGU9XCJFeHBvcnRcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWRvd25sb2FkIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFeHBvcnQnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2hvd0FjdGl2YXRlQnRuXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgaWQ9XCJidG5BY3RpdmF0ZVwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoMSwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWhpc3RvcnlcIj48L2k+IHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cInNob3dEZWFjdGl2YXRlQnRuXCJcclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgaWQ9XCJidG5EZWFjdGl2YXRlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgyLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcG93ZXItb2ZmXCI+PC9pPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlYWN0aXZhdGUnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2hvd1Jlc2V0UGFzc0J0blwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInNob3dDb25maXJtYXRpb25Nb2RhbCgzLCBDb25maXJtYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29nXCI+PC9pPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwic2hvd1NlbmRFbWFpbEJ0blwiXHJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgIGlkPVwiYnRuUmVzZW5kQWN0aXZhdGlvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0LXByaW1hcnkgbWUtM1wiXHJcbiAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcclxuICAgICAgICAgIChjbGljayk9XCJzaG93Q29uZmlybWF0aW9uTW9kYWwoNCwgQ29uZmlybWF0aW9uTW9kYWwpXCI+XHJcbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlXCI+PC9pPiB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZW5kQWN0aXZhdGlvbkVtYWlsJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0dlbmVyYWxCdG5zXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgKGNsaWNrKT1cInNob3dBZGRVc2VyTW9kYWwoYWRkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcGx1cyBtZS0xXCI+PC9pPlxyXG4gICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWRkJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gZW5kOjpIZWFkZXIgLS0+XHJcbiAgICA8IS0tIGJlZ2luOjpCb2R5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDwhLS0gYmVnaW46OlRhYmxlIGNvbnRhaW5lciAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB1c2Vycy10YWJsZVwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInctNTBweFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInNlbGVjdEFsbFVzZXJMaXN0KCRldmVudCwgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdClcIiBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiPiA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAmbmJzcDs8c3Bhbj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ01vYmlsZScpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1JvbGVzJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU3RhdHVzJykgfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCAqbmdJZj1cImN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHBlcm1pc3Npb25TZXRzLkFkbWluXCIgY2xhc3M9XCJtaW4tdy0xNTBweFwiPlxyXG4gICAgICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnT3JnYW5pemF0aW9ucycpIH19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aW9uJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHVzZXIgb2YgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1zbSBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2hhbmdlKT1cInVwZGF0ZVVzZXJMaXN0KCRldmVudCwgdXNlcilcIiBbKG5nTW9kZWwpXT1cInVzZXIuc2VsZWN0ZWRcIj4gPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ltYm9sIHN5bWJvbC0zNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwic3ltYm9sLWxhYmVsIGZvbnQtc2l6ZS1oNSBmb250LXdlaWdodC1ib2xkIGJnLWxpZ2h0LXByaW1hcnkgbWwtMiBtYi0wIG1lLTNcIj5BPC9oNj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFVzZXJNb2RhbCh1c2VyLmlEX0dVSUQsIEVkaXRVc2VyTW9kYWwpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmsgZnctYm9sZGVyIHRleHQtaG92ZXItcHJpbWFyeSBmcy02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyLm5hbWVTdHIgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3sgdXNlci51c2VybmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHVzZXIubW9iaWxlID8/ICctJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IHVzZXIucGVybWlzc2lvbnNldCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlID09IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aXZlJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyXCIgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlID09IGZhbHNlICYmIHVzZXIuYWN0aXZhdGlvbkRhdGUgIT0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlZCcpIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXdhcm5pbmdcIiAqbmdJZj1cInVzZXIuaXNBY3RpdmUgPT0gZmFsc2UgJiYgdXNlci5hY3RpdmF0aW9uRGF0ZSA9PSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1BlbmRpbmdBY3RpdmF0aW9uJykgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImN1cnJlbnRVc2VyUHJvZmlsZS5wZXJtaXNzaW9uU2V0U0lEID09IHBlcm1pc3Npb25TZXRzLkFkbWluXCI+e3sgdXNlci5vcmdhbml6YXRpb25OYW1lID8/ICctJyB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgY2xhc3M9XCJtYXQtbWVudS1jb250ZW50XCIgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZW51LWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbSAoY2xpY2spPVwic2hvd0VkaXRVc2VyTW9kYWwodXNlci5pRF9HVUlELCBFZGl0VXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VkaXQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1pdGVtIHB4LTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VyLmlzQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuRGVhY3RpdmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FjdGl2YXRlVXNlck1vZGFsKHVzZXIsIGZhbHNlLCBBY3RpdmF0ZVVzZXJNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuYWN0aXZhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBY3RpdmF0ZVVzZXJNb2RhbCh1c2VyLCB0cnVlLCBBY3RpdmF0ZVVzZXJNb2RhbClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5pc0FjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVzZXRQYXNzd29yZFVzZXJNb2RhbCh1c2VyLCBSZXNldFBhc3N3b3JkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCIgaWQ9XCJidG5SZXNldFBhc3NcIiAoY2xpY2spPVwic2hvd3NldFBhc3N3b3JkVXNlck1vZGFsKHVzZXIsIHNldFBhc3N3b3JkVXNlck1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NldFBhc3N3b3JkJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgbmdiRHJvcGRvd25JdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYnRuUmVzZXRQYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIuaXNBY3RpdmUgJiYgdXNlci5hY3RpdmF0aW9uRGF0ZSA9PSBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93U2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsKHVzZXIsIFNlbmRBY3RpdmF0aW9uRW1haWxNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZW5kQWN0aXZhdGlvbkVtYWlsJykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8dHIgKm5nSWY9XCJjbGllbnRTaWRlUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI2XCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWVtcHR5LWRhdGE+PC9saWItZW1wdHktZGF0YT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwhLS0gZW5kOjpUYWJsZSAtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gZW5kOjpUYWJsZSBjb250YWluZXIgLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICA8IS0tIGJlZ2luIHBhZ2luZy0tPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldFVzZXJzTGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIlVzZXJQYWdpbmdcIiBbZ3JvdXBdPVwiVXNlcnNGb3JtXCIgI1VzZXJQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgPCEtLSBFbmQgcGFnaW5nLS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIGFkZCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYWRkVXNlck1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBZGRVc2VyJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkFkZFVzZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkFkZE5hbWVcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGRVc2VybmFtZVwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFNhbUFjY291bnRcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBZGRVc2VyRUlEXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyTmF0aW9uYWxpdHlcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICBAaWYgKGlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBjdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSBwZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJhZGRVc2VyT3JnYW5pemF0aW9uc1wiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIH1cclxuICAgICAgPEJCU0YtUGhvbmUgW29wdGlvbnNdPVwiQWRkTW9iaWxlTnVtYmVyXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVBob25lPlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkVXNlckRlcGFydG1lbnRcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJBZGRTZW5kQWN0aXZhdGlvbkVtYWlsXCIgW2dyb3VwXT1cIkFkZFVzZXJGb3JtXCI+PC9CQlNGLVRvZ2dsZXNsaWRlPlxyXG4gICAgICA8QkJTRi1Ub2dnbGVzbGlkZSBbb3B0aW9uc109XCJBZGRGb3JjZVVzZXJDaGFuZ2VQYXNzd29yZFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChvbkNoYW5nZSk9XCJjaGFuZ2VQZXJtaXNzaW9uU2V0KCRldmVudCwgdHJ1ZSlcIiBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvblNldFwiIFtncm91cF09XCJBZGRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGRVc2VyUGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICA8QkJTRi1Qcm9maWxlSW1hZ2VVcGxvYWRlciBbb3B0aW9uc109XCJBZGRQcm9maWxlSW1hZ2VcIiBbZ3JvdXBdPVwiQWRkVXNlckZvcm1cIj48L0JCU0YtUHJvZmlsZUltYWdlVXBsb2FkZXI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAjQ2xvc2VVc2VyTW9kYWxcclxuICAgICAgICAgIGlkPVwiQ2xvc2VVc2VyTW9kYWxcIlxyXG4gICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRWRpdCB1c2VyLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRWRpdFVzZXInKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdFVzZXJGb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXROYW1lXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICA8QkJTRi1QaG9uZSBbb3B0aW9uc109XCJFZGl0TW9iaWxlTnVtYmVyXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1QaG9uZT5cclxuICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJFZGl0VXNlcm5hbWVcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdEVtYWlsXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRTYW1BY2NvdW50XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRVc2VyRUlEXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdFVzZXJOYXRpb25hbGl0eVwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICBAaWYgKGlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBjdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSBwZXJtaXNzaW9uU2V0cy5BZG1pbikge1xyXG4gICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJlZGl0VXNlck9yZ2FuaXphdGlvblwiIFtncm91cF09XCJFZGl0VXNlckZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICB9XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlckRlcGFydG1lbnRcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IChvbkNoYW5nZSk9XCJjaGFuZ2VQZXJtaXNzaW9uU2V0KCRldmVudCwgZmFsc2UpXCIgW29wdGlvbnNdPVwiRWRpdFVzZXJQZXJtaXNzaW9uU2V0XCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0VXNlclBlcm1pc3Npb25zXCIgW2dyb3VwXT1cIkVkaXRVc2VyRm9ybVwiPjwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgIDxCQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyIFtvcHRpb25zXT1cIkVkaXRQcm9maWxlSW1hZ2VcIiBbZ3JvdXBdPVwiRWRpdFVzZXJGb3JtXCI+PC9CQlNGLVByb2ZpbGVJbWFnZVVwbG9hZGVyPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgI0Nsb3NlRWRpdFVzZXJNb2RhbFxyXG4gICAgICAgICAgaWQ9XCJDbG9zZUVkaXRVc2VyTW9kYWxcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcclxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDYW5jZWxMYWJlbCcpIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuPCEtLSBEZWFjdGl2YXRlL0FjdGl2YXRlIFVzZXIgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQWN0aXZhdGVVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdEZWFjdGl2YXRlJykgfX1cclxuICAgICAgPC9oMT5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiICpuZ0lmPVwiU2hvd0FjdGl2YXRlTW9kZWxEYXRhXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FjdGl2YXRlJykgfX1cclxuICAgICAgPC9oMT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5vdGljZSBkLWZsZXggYmctbGlnaHQtd2FybmluZyByb3VuZGVkIGJvcmRlci13YXJuaW5nIGJvcmRlciBib3JkZXItZGFzaGVkIG1iLTEwIHAtNlwiPlxyXG4gICAgICA8IS0tYmVnaW46Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpTdmcgSWNvbiB8IHBhdGg6IGljb25zL2R1b3R1bmUvZ2VuZXJhbC9nZW4wNDQuc3ZnLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMnR4IHN2Zy1pY29uLXdhcm5pbmcgbWUtNFwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPCEtLWVuZDo6U3ZnIEljb24tLT5cclxuICAgICAgPCEtLWVuZDo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OldyYXBwZXItLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXN0YWNrIGZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cIiFTaG93QWN0aXZhdGVNb2RlbERhdGFcIj5cclxuICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRGVhY3RpdmF0ZUNvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIiAqbmdJZj1cIlNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZUNvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgaWQ9XCJcIiBjbGFzcz1cIlwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidHJJdGVtXCI+XHJcbiAgICAgICAgICAgICAgPHRkPnt7IE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD57eyBFbWFpbCB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgI0Nsb3NlQWN0aXZhdGVVc2VyTW9kYWxcclxuICAgICAgICBpZD1cIkNsb3NlQWN0aXZhdGVVc2VyTW9kYWxcIlxyXG4gICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiIVNob3dBY3RpdmF0ZU1vZGVsRGF0YVwiIChjbGljayk9XCJkZWFjdGl2YXRlKClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJTaG93QWN0aXZhdGVNb2RlbERhdGFcIiAoY2xpY2spPVwiYWN0aXZhdGUoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjwhLS0gUmVzZXRQYXNzd29yZCBVc2VyIE1vZGFsIC0tPlxyXG48bmctdGVtcGxhdGUgI1Jlc2V0UGFzc3dvcmRVc2VyTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmQnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0UGFzc3dvcmRDb25maXJtYXRpb24nKSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6Q29udGVudC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0yMDBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdOYW1lJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0yMDBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyBOYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IEVtYWlsIH19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBpZD1cIkNsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbFwiXHJcbiAgICAgICAgI0Nsb3NlUmVzZXRQYXNzd29yZFVzZXJNb2RhbFxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRQYXNzd29yZCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gc2V0UGFzc3dvcmQgVXNlciBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNzZXRQYXNzd29yZFVzZXJNb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2V0UGFzc3dvcmQnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NldFBhc3N3b3JkQ29uZmlybWF0aW9uJykgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIlNldFVzZXJQYXNzd29yZEZvcm1PcHRpb25zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGlkPVwidGFibGVDb25maXJtYXRpb25cIiBjbGFzcz1cInRhYmxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFbWFpbCcpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdQYXNzd29yZCcpIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdDb25maXJtUGFzc3dvcmQnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPnt7IE5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPnt7IEVtYWlsIH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlBhc3N3b3JkXCIgW2dyb3VwXT1cIlNldFVzZXJQYXNzd29yZEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiUGFzc3dvcmRDb25maXJtYXRpb25cIiBbZ3JvdXBdPVwiU2V0VXNlclBhc3N3b3JkRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGlkPVwiQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFwiXHJcbiAgICAgICAgICAjQ2xvc2VzZXRQYXNzd29yZFVzZXJNb2RhbFxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBTZW5kIEFjdGl2YXRpb24gRW1haWwgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjU2VuZEFjdGl2YXRpb25FbWFpbE1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTZW5kQWN0aXZhdGlvbkVtYWlsJykgfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibm90aWNlIGQtZmxleCBiZy1saWdodC13YXJuaW5nIHJvdW5kZWQgYm9yZGVyLXdhcm5pbmcgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgIDwhLS1iZWdpbjo6SWNvbi0tPlxyXG4gICAgICA8IS0tYmVnaW46OlN2ZyBJY29uIHwgcGF0aDogaWNvbnMvZHVvdHVuZS9nZW5lcmFsL2dlbjA0NC5zdmctLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24td2FybmluZyBtZS00XCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9nZW4wNDQuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8IS0tZW5kOjpTdmcgSWNvbi0tPlxyXG4gICAgICA8IS0tZW5kOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6V3JhcHBlci0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICA8IS0tYmVnaW46OkNvbnRlbnQtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTYgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3RpdmF0ZUNvbmZpcm1hdGlvbicpIH19XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tZW5kOjpDb250ZW50LS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8IS0tZW5kOjpXcmFwcGVyLS0+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RlIG5vdGUtd2FybmluZyB0ZXh0LWNlbnRlclwiPjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGggPiAxXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aW9uJykgfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyB1c2VyLm5hbWVTdHIgfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7IHVzZXIudXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvbiBidG4tc21cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRyYXNoXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3Rib2R5PlxyXG4gICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgI0Nsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWxcclxuICAgICAgICBpZD1cIkNsb3NlQWN0aXZhdGlvbkVtYWlsTW9kYWxcIlxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgKGNsaWNrKT1cInNlbmRBY3RpdmF0aW9uRW1haWxGb3JVc2VyKClcIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBjb25maXJtYXRpb24gTWVzc2FnZSAgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQ29uZmlybWF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NvbmZpcm1hdGlvbk1lc3NhZ2UnKSB9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LXdhcm5pbmcgcm91bmRlZCBib3JkZXItd2FybmluZyBib3JkZXIgYm9yZGVyLWRhc2hlZCBtYi0xMCBwLTZcIj5cclxuICAgICAgPCEtLWJlZ2luOjpJY29uLS0+XHJcbiAgICAgIDwhLS1iZWdpbjo6U3ZnIEljb24gfCBwYXRoOiBpY29ucy9kdW90dW5lL2dlbmVyYWwvZ2VuMDQ0LnN2Zy0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTJ0eCBzdmctaWNvbi13YXJuaW5nIG1lLTRcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2dlbjA0NC5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwhLS1lbmQ6OlN2ZyBJY29uLS0+XHJcbiAgICAgIDwhLS1lbmQ6Okljb24tLT5cclxuICAgICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1zdGFjayBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgIDwhLS1iZWdpbjo6Q29udGVudC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNiB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIHt7IENvbmZpcm1hdGlvbk1lc3NhZ2UgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS1lbmQ6OkNvbnRlbnQtLT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS1lbmQ6OldyYXBwZXItLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZSBpZD1cInRhYmxlQ29uZmlybWF0aW9uXCIgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0VtYWlsJykgfX08L3RoPlxyXG4gICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MFwiICpuZ0lmPVwiU2VsZWN0ZWRVc2VyTGlzdC5sZW5ndGggPiAxXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWN0aW9uJykgfX08L3RoPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB1c2VyIG9mIFNlbGVjdGVkVXNlckxpc3RcIiBjbGFzcz1cInRySXRlbVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57eyB1c2VyLm5hbWVTdHIgfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgPHRkPnt7IHVzZXIudXNlcm5hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCJTZWxlY3RlZFVzZXJMaXN0Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlVXNlckZyb21MaXN0KHVzZXIpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LWRhbmdlciBidG4taWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgIDxidXR0b24gI0Nsb3NlQ29uZmlybWF0aW9uTW9kYWwgaWQ9XCJDbG9zZUNvbmZpcm1hdGlvbk1vZGFsXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9PSAxXCIgKGNsaWNrKT1cImFjdGl2YXRlVXNlckxpc3QoKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlxyXG4gICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1NhdmVMYWJlbCcpIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cIkNvbmZpcm1hdGlvbk1vZGFsVHlwZSA9PSAyXCIgKGNsaWNrKT1cImRlYWN0aXZhdGVVc2VyTGlzdCgpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiQ29uZmlybWF0aW9uTW9kYWxUeXBlID09IDNcIiAoY2xpY2spPVwicmVzZXRVc2VyUGFzc3dvcmRMaXN0KClcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJDb25maXJtYXRpb25Nb2RhbFR5cGUgPT0gNFwiIChjbGljayk9XCJzZW5kQWN0aXZhdGlvbkVtYWlsRm9yVXNlcigpXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|