@tuki-io/tuki-widgets 0.0.219-dev.6 → 0.0.219-dev.60
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/contact-center/cc-import/cc-import.module.d.ts +13 -0
- package/contact-center/cc-import/cc-import.service.d.ts +85 -0
- package/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.d.ts +56 -0
- package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.d.ts +77 -0
- package/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.d.ts +3 -0
- package/contact-center/cc-import/constants/cc-import.constants.d.ts +37 -0
- package/contact-center/cc-import/mock/cc-import.mock.d.ts +4 -0
- package/contact-center/cc-import/types/cc-import.d.ts +73 -0
- package/contact-center/cc-import/types/uccx.d.ts +109 -0
- package/contact-center/cc-readiness/cc-readiness.module.d.ts +3 -3
- package/contact-center/public-api.d.ts +8 -0
- package/contact-center/shared/api.endpoints.d.ts +25 -0
- package/contact-center/shared/api.service.d.ts +3 -1
- package/contact-center/shared/components/card/card.component.d.ts +13 -0
- package/contact-center/shared/dcp-api.service.d.ts +15 -0
- package/contact-center/shared/shared.module.d.ts +11 -5
- package/di2mt/api/api.endpoints.d.ts +3 -0
- package/esm2020/contact-center/cc-import/cc-import.module.mjs +45 -0
- package/esm2020/contact-center/cc-import/cc-import.service.mjs +228 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +144 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +243 -0
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +3 -0
- package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +62 -0
- package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +78 -0
- package/esm2020/contact-center/cc-import/types/cc-import.mjs +2 -0
- package/esm2020/contact-center/cc-import/types/uccx.mjs +24 -0
- package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +7 -6
- package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +5 -5
- package/esm2020/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.mjs +2 -2
- package/esm2020/contact-center/public-api.mjs +9 -1
- package/esm2020/contact-center/shared/api.endpoints.mjs +26 -1
- package/esm2020/contact-center/shared/api.service.mjs +8 -3
- package/esm2020/contact-center/shared/components/card/card.component.mjs +24 -0
- package/esm2020/contact-center/shared/dcp-api.service.mjs +26 -0
- package/esm2020/contact-center/shared/shared.module.mjs +15 -5
- package/esm2020/di2mt/api/api.endpoints.mjs +4 -1
- package/esm2020/locations/public-api.mjs +8 -0
- package/esm2020/locations/src/app.constants.mjs +18 -0
- package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +23 -0
- package/esm2020/locations/src/locations.component.mjs +398 -0
- package/esm2020/locations/src/locations.module.mjs +42 -0
- package/esm2020/locations/src/material.module.mjs +55 -0
- package/esm2020/locations/src/services/api.service.mjs +67 -0
- package/esm2020/locations/src/services/locations.service.mjs +69 -0
- package/esm2020/locations/src/types/location.mjs +2 -0
- package/esm2020/locations/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/locations/tuki-io-tuki-widgets-locations.mjs +5 -0
- package/esm2020/meetings/public-api.mjs +8 -0
- package/esm2020/meetings/src/app.constants.mjs +9 -0
- package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +107 -0
- package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +98 -0
- package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +110 -0
- package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +65 -0
- package/esm2020/meetings/src/material.module.mjs +76 -0
- package/esm2020/meetings/src/meetings.component.mjs +65 -0
- package/esm2020/meetings/src/meetings.module.mjs +51 -0
- package/esm2020/meetings/src/services/api.service.mjs +67 -0
- package/esm2020/meetings/src/services/live-meetings.service.mjs +178 -0
- package/esm2020/meetings/src/services/meeting-spaces.service.mjs +102 -0
- package/esm2020/meetings/src/types/live-meeting.mjs +2 -0
- package/esm2020/meetings/src/types/meeting-space.mjs +2 -0
- package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/meetings/tuki-io-tuki-widgets-meetings.mjs +5 -0
- package/esm2020/shared/public-api.mjs +4 -0
- package/esm2020/shared/src/ui/material.module.mjs +188 -0
- package/esm2020/shared/src/ui/shared.module.mjs +36 -0
- package/esm2020/shared/src/ui/tk-page-section/tk-page-section.component.mjs +13 -0
- package/esm2020/shared/src/ui/tk-page-section-row/tk-page-section-row.component.mjs +13 -0
- package/esm2020/shared/src/ui/ui.module.mjs +37 -0
- package/esm2020/shared/tuki-io-tuki-widgets-shared.mjs +5 -0
- package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
- package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +4 -0
- package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +60 -13
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.mjs +2 -1
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +8 -6
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +13 -9
- package/esm2020/user-device-manage/public-api.mjs +4 -1
- package/esm2020/user-device-manage/src/app.constants.mjs +9 -3
- package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +311 -0
- package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +2 -2
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +34 -17
- package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +207 -0
- package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +401 -0
- package/esm2020/user-device-manage/src/services/device.service.mjs +32 -2
- package/esm2020/user-device-manage/src/services/user.service.mjs +34 -6
- package/esm2020/user-device-manage/src/user-device-manage.module.mjs +19 -7
- package/esm2020/user-manage/src/app.constants.mjs +8 -1
- package/esm2020/user-manage/src/classes/simplified-user.mjs +19 -4
- package/esm2020/user-manage/src/device-list/device-list.component.mjs +7 -4
- package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +6 -3
- package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +9 -5
- package/esm2020/user-manage/src/material.module.mjs +21 -7
- package/esm2020/user-manage/src/services/dcp-api.service.mjs +79 -0
- package/esm2020/user-manage/src/services/site-settings.service.mjs +11 -4
- package/esm2020/user-manage/src/services/user.service.mjs +94 -19
- package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +12 -7
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +90 -39
- package/esm2020/user-manage/src/user-manage.module.mjs +14 -4
- package/esm2020/user-manage/src/user-summary/user-summary.component.mjs +30 -0
- package/esm2020/users-list/src/app.constants.mjs +2 -1
- package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
- package/esm2020/users-list/src/classes/user-list.mjs +2 -1
- package/esm2020/users-list/src/components/table-toolbar/table-toolbar.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.mjs +14 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +5 -3
- package/esm2020/users-list/src/users-list.component.mjs +100 -17
- package/esm2020/workspaces/public-api.mjs +8 -0
- package/esm2020/workspaces/src/app.constants.mjs +27 -0
- package/esm2020/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.mjs +32 -0
- package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +96 -0
- package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +66 -0
- package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
- package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +130 -0
- package/esm2020/workspaces/src/material.module.mjs +83 -0
- package/esm2020/workspaces/src/services/api-webex.service.mjs +14 -0
- package/esm2020/workspaces/src/services/api.service.mjs +67 -0
- package/esm2020/workspaces/src/services/workspace-detail.service.mjs +169 -0
- package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +59 -0
- package/esm2020/workspaces/src/services/workspaces.service.mjs +150 -0
- package/esm2020/workspaces/src/types/workspace.mjs +4 -0
- package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
- package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
- package/esm2020/workspaces/src/utils/workspace-name.mjs +8 -0
- package/esm2020/workspaces/src/workspaces.component.mjs +306 -0
- package/esm2020/workspaces/src/workspaces.module.mjs +54 -0
- package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +998 -127
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +3 -0
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs +679 -0
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +894 -0
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs +280 -0
- package/fesm2015/tuki-io-tuki-widgets-shared.mjs.map +1 -0
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +111 -32
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +1013 -48
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +380 -89
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +121 -22
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +1275 -0
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +989 -127
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +3 -0
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs +672 -0
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +902 -0
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs +280 -0
- package/fesm2020/tuki-io-tuki-widgets-shared.mjs.map +1 -0
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +104 -28
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +996 -47
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +366 -82
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +120 -22
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +1276 -0
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
- package/locations/index.d.ts +5 -0
- package/locations/public-api.d.ts +2 -0
- package/locations/src/app.constants.d.ts +10 -0
- package/locations/src/location-confirm-dialog/location-confirm-dialog.component.d.ts +15 -0
- package/locations/src/locations.component.d.ts +92 -0
- package/locations/src/locations.module.d.ts +13 -0
- package/locations/src/material.module.d.ts +12 -0
- package/locations/src/services/api.service.d.ts +18 -0
- package/locations/src/services/locations.service.d.ts +25 -0
- package/locations/src/types/location.d.ts +30 -0
- package/locations/src/utils/app-loader/app-loader.d.ts +6 -0
- package/meetings/index.d.ts +5 -0
- package/meetings/public-api.d.ts +2 -0
- package/meetings/src/app.constants.d.ts +8 -0
- package/meetings/src/components/live-meetings/live-meeting/live-meeting.component.d.ts +34 -0
- package/meetings/src/components/live-meetings/live-meetings.component.d.ts +43 -0
- package/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.d.ts +39 -0
- package/meetings/src/components/meeting-spaces/meeting-spaces.component.d.ts +27 -0
- package/meetings/src/material.module.d.ts +15 -0
- package/meetings/src/meetings.component.d.ts +29 -0
- package/meetings/src/meetings.module.d.ts +16 -0
- package/meetings/src/services/api.service.d.ts +18 -0
- package/meetings/src/services/live-meetings.service.d.ts +9 -0
- package/meetings/src/services/meeting-spaces.service.d.ts +16 -0
- package/meetings/src/types/live-meeting.d.ts +71 -0
- package/meetings/src/types/meeting-space.d.ts +52 -0
- package/meetings/src/utils/app-loader/app-loader.d.ts +6 -0
- package/package.json +33 -1
- package/shared/index.d.ts +5 -0
- package/shared/public-api.d.ts +3 -0
- package/shared/src/ui/material.module.d.ts +28 -0
- package/shared/src/ui/shared.module.d.ts +10 -0
- package/{user-device-manage/src/shared/tk-page-section/page-section.component.d.ts → shared/src/ui/tk-page-section/tk-page-section.component.d.ts} +1 -1
- package/shared/src/ui/tk-page-section-row/tk-page-section-row.component.d.ts +6 -0
- package/shared/src/ui/ui.module.d.ts +11 -0
- package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
- package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +1 -0
- package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
- package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +2 -0
- package/user-device-manage/public-api.d.ts +3 -0
- package/user-device-manage/src/app.constants.d.ts +6 -0
- package/user-device-manage/src/associate-lines/associate-lines.component.d.ts +95 -0
- package/user-device-manage/src/classes/device.d.ts +15 -0
- package/user-device-manage/src/classes/deviceProfile.d.ts +5 -0
- package/user-device-manage/src/classes/simplified-user.d.ts +1 -1
- package/user-device-manage/src/device-associated-line/device-associated-line.component.d.ts +1 -0
- package/user-device-manage/src/device-manage-widget.component.d.ts +6 -1
- package/user-device-manage/src/device-settings/device-settings.component.d.ts +53 -0
- package/user-device-manage/src/line-key-config/line-key-config.component.d.ts +84 -0
- package/user-device-manage/src/services/device.service.d.ts +6 -1
- package/user-device-manage/src/services/user.service.d.ts +2 -1
- package/user-device-manage/src/user-device-manage.module.d.ts +12 -10
- package/user-manage/src/app.constants.d.ts +7 -0
- package/user-manage/src/classes/simplified-user.d.ts +17 -1
- package/user-manage/src/device-list/device-list.component.d.ts +2 -0
- package/user-manage/src/material.module.d.ts +3 -1
- package/user-manage/src/services/dcp-api.service.d.ts +21 -0
- package/user-manage/src/services/user.service.d.ts +19 -1
- package/user-manage/src/user-calling/user-calling.component.d.ts +3 -2
- package/user-manage/src/user-manage-widget.component.d.ts +14 -2
- package/user-manage/src/user-manage.module.d.ts +9 -7
- package/user-manage/src/user-summary/user-summary.component.d.ts +10 -0
- package/users-list/src/app.constants.d.ts +1 -0
- package/users-list/src/classes/simlified-user.d.ts +1 -1
- package/users-list/src/classes/user-list.d.ts +4 -0
- package/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.d.ts +3 -1
- package/users-list/src/move-user-wizard/move-user-wizard.component.d.ts +2 -1
- package/users-list/src/users-list.component.d.ts +6 -1
- package/workspaces/index.d.ts +5 -0
- package/workspaces/public-api.d.ts +2 -0
- package/workspaces/src/app.constants.d.ts +25 -0
- package/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.d.ts +20 -0
- package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +34 -0
- package/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.d.ts +25 -0
- package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
- package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +43 -0
- package/workspaces/src/material.module.d.ts +16 -0
- package/workspaces/src/services/api-webex.service.d.ts +6 -0
- package/workspaces/src/services/api.service.d.ts +18 -0
- package/workspaces/src/services/workspace-detail.service.d.ts +22 -0
- package/workspaces/src/services/workspaces-migration.service.d.ts +18 -0
- package/workspaces/src/services/workspaces.service.d.ts +11 -0
- package/workspaces/src/types/workspace.d.ts +439 -0
- package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
- package/workspaces/src/utils/device-icon.d.ts +1 -0
- package/workspaces/src/utils/workspace-name.d.ts +1 -0
- package/workspaces/src/workspaces.component.d.ts +74 -0
- package/workspaces/src/workspaces.module.d.ts +17 -0
- package/contact-center/cc-readiness/components/card/card.component.d.ts +0 -6
- package/esm2020/contact-center/cc-readiness/components/card/card.component.mjs +0 -13
- package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +0 -13
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { Component, EventEmitter, inject, Input, Output } from '@angular/core';
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
|
+
import { Location } from '@angular/common';
|
|
3
4
|
import { Router } from '@angular/router';
|
|
5
|
+
import { switchMap } from 'rxjs/operators';
|
|
4
6
|
import * as i0 from "@angular/core";
|
|
5
7
|
import * as i1 from "./services/user.service";
|
|
6
8
|
import * as i2 from "./services/api.service";
|
|
7
|
-
import * as i3 from "
|
|
8
|
-
import * as i4 from "@angular/
|
|
9
|
-
import * as i5 from "@angular/
|
|
10
|
-
import * as i6 from "@angular/material/
|
|
11
|
-
import * as i7 from "@angular/material/
|
|
12
|
-
import * as i8 from "@angular/material/
|
|
13
|
-
import * as i9 from "@angular/material/
|
|
14
|
-
import * as i10 from "
|
|
15
|
-
import * as i11 from "
|
|
16
|
-
import * as i12 from "./
|
|
17
|
-
import * as i13 from "./user-
|
|
18
|
-
import * as i14 from "./
|
|
9
|
+
import * as i3 from "./services/dcp-api.service";
|
|
10
|
+
import * as i4 from "@angular/common";
|
|
11
|
+
import * as i5 from "@angular/forms";
|
|
12
|
+
import * as i6 from "@angular/material/divider";
|
|
13
|
+
import * as i7 from "@angular/material/form-field";
|
|
14
|
+
import * as i8 from "@angular/material/core";
|
|
15
|
+
import * as i9 from "@angular/material/tabs";
|
|
16
|
+
import * as i10 from "@angular/material/select";
|
|
17
|
+
import * as i11 from "@angular/material/slide-toggle";
|
|
18
|
+
import * as i12 from "./utils/app-loader/app-loader";
|
|
19
|
+
import * as i13 from "./user-info/user-info.component";
|
|
20
|
+
import * as i14 from "./lazy-loading-select/lazy-loading-select.component";
|
|
21
|
+
import * as i15 from "./user-calling/user-calling.component";
|
|
22
|
+
import * as i16 from "./device-list/device-list.component";
|
|
23
|
+
import * as i17 from "./user-summary/user-summary.component";
|
|
19
24
|
export class UserManageWidgetComponent {
|
|
20
25
|
get form() {
|
|
21
26
|
return this.userService?.user?.form;
|
|
@@ -29,19 +34,40 @@ export class UserManageWidgetComponent {
|
|
|
29
34
|
get lineAssociation() {
|
|
30
35
|
return this.userService?.user?.devices && this.userService?.user?.devices[0] && this.userService?.user?.devices[0].lineAssociations && this.userService?.user?.devices[0].lineAssociations[0];
|
|
31
36
|
}
|
|
32
|
-
|
|
37
|
+
get primaryLineReference() {
|
|
38
|
+
return this.userService?.user?.primaryLineReference && this.userService?.user?.primaryLineReference?.directoryNumber;
|
|
39
|
+
}
|
|
40
|
+
get webexUUID() {
|
|
41
|
+
const uuid = localStorage.getItem('webexUUID');
|
|
42
|
+
return uuid === 'null' ? null : uuid;
|
|
43
|
+
}
|
|
44
|
+
constructor(userService, apiService, dcpApiService) {
|
|
33
45
|
this.userService = userService;
|
|
34
46
|
this.apiService = apiService;
|
|
47
|
+
this.dcpApiService = dcpApiService;
|
|
48
|
+
this.savePending = false;
|
|
35
49
|
this.onSave = new EventEmitter();
|
|
36
50
|
this.onChange = new EventEmitter();
|
|
37
51
|
this.selectDevice = new EventEmitter();
|
|
38
52
|
this.goBack = new EventEmitter();
|
|
53
|
+
this.authLevelOptions = [
|
|
54
|
+
'Immediate',
|
|
55
|
+
'Default',
|
|
56
|
+
'Routine',
|
|
57
|
+
'Priority',
|
|
58
|
+
'Flash',
|
|
59
|
+
'Executive Override',
|
|
60
|
+
'Flash Override',
|
|
61
|
+
];
|
|
39
62
|
this.router = inject(Router);
|
|
63
|
+
this.location = inject(Location);
|
|
64
|
+
this.ON_PREM_ID = 2542;
|
|
40
65
|
this.userService.onUserLineSaved$
|
|
41
66
|
.subscribe(() => {
|
|
42
67
|
this.userService.persistCacheChanges()
|
|
43
68
|
.subscribe(() => {
|
|
44
69
|
this.userService.dataPending = false;
|
|
70
|
+
this.updateUrlIfUserIdChanged();
|
|
45
71
|
this.onSave.next("saved");
|
|
46
72
|
});
|
|
47
73
|
}, () => this.userService.dataPending = false);
|
|
@@ -49,6 +75,8 @@ export class UserManageWidgetComponent {
|
|
|
49
75
|
ngOnInit() {
|
|
50
76
|
this.apiService.token = this.token;
|
|
51
77
|
this.apiService.apiUrl = this.host;
|
|
78
|
+
this.dcpApiService.token = this.token;
|
|
79
|
+
this.dcpApiService.apiUrl = this.dcpHost;
|
|
52
80
|
this.getData();
|
|
53
81
|
}
|
|
54
82
|
onDeviceSelect(device) {
|
|
@@ -76,10 +104,10 @@ export class UserManageWidgetComponent {
|
|
|
76
104
|
this.validateUserId();
|
|
77
105
|
}
|
|
78
106
|
saveChanges() {
|
|
79
|
-
if (
|
|
107
|
+
if (this.isSavingDisabled()) {
|
|
80
108
|
return;
|
|
81
109
|
}
|
|
82
|
-
this.
|
|
110
|
+
this.savePending = true;
|
|
83
111
|
const currentLineAssociation = this.user?.devices?.[0]?.lineAssociations?.[0];
|
|
84
112
|
const originLineAssociation = this.userService.originUser?.devices?.[0]?.lineAssociations?.[0];
|
|
85
113
|
const currentMappedDid = this.user?.lines?.[0]?.mappedDids?.[0] || '';
|
|
@@ -87,29 +115,34 @@ export class UserManageWidgetComponent {
|
|
|
87
115
|
const didPatternDescription = this.userService.originUser?.lines?.[0]?.didPatterns?.[0]?.description || '';
|
|
88
116
|
const lineAssociationChanged = currentLineAssociation && originLineAssociation && !currentLineAssociation.equals(originLineAssociation);
|
|
89
117
|
const mappedDidChanged = currentMappedDid !== originMappedDid;
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
this.dataPending = true;
|
|
100
|
-
const subscription = this.userService.persistCacheChanges()
|
|
101
|
-
.subscribe(() => {
|
|
102
|
-
this.dataPending = false;
|
|
118
|
+
const translationPatternChanged = (lineAssociationChanged || mappedDidChanged) && currentLineAssociation && originLineAssociation;
|
|
119
|
+
const request = translationPatternChanged
|
|
120
|
+
? this.userService.editTranslationPattern(this.user.cucmId, originMappedDid, currentMappedDid, currentLineAssociation.directoryNumber.directoryNumber, originLineAssociation.directoryNumber.routePartitionName, didPatternDescription).pipe(switchMap(() => this.userService.persistCacheChanges()))
|
|
121
|
+
: this.userService.persistCacheChanges();
|
|
122
|
+
request.subscribe({
|
|
123
|
+
next: () => {
|
|
124
|
+
this.savePending = false;
|
|
125
|
+
this.userService.commitSavedChanges();
|
|
126
|
+
this.updateUrlIfUserIdChanged();
|
|
103
127
|
this.onSave.next("user has been saved successfully..");
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
128
|
+
},
|
|
129
|
+
error: () => this.savePending = false,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
cancelChanges() {
|
|
133
|
+
this.userService.discardChanges();
|
|
134
|
+
}
|
|
135
|
+
hasUnsavedChanges() {
|
|
136
|
+
return this.userService.hasUnsavedChanges();
|
|
107
137
|
}
|
|
108
138
|
toggleEditMode() {
|
|
109
139
|
this.userService.user.toggleEditMode();
|
|
110
140
|
}
|
|
111
141
|
isSavingDisabled() {
|
|
112
|
-
return
|
|
142
|
+
return this.savePending
|
|
143
|
+
|| !this.userService.hasUnsavedChanges()
|
|
144
|
+
|| this.userService.hasExistedUserId
|
|
145
|
+
|| !!this.form?.invalid;
|
|
113
146
|
}
|
|
114
147
|
changeField(token) {
|
|
115
148
|
this.onChange.next("start change..");
|
|
@@ -172,6 +205,22 @@ export class UserManageWidgetComponent {
|
|
|
172
205
|
}
|
|
173
206
|
document.cookie = name + "=" + (value || "") + expires + "; path=/";
|
|
174
207
|
}
|
|
208
|
+
updateUrlIfUserIdChanged() {
|
|
209
|
+
const newUserId = this.user?.newUserid || this.form?.get('userid')?.value;
|
|
210
|
+
if (!newUserId || newUserId === this.userId) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
const [path, query = ''] = this.router.url.split('?');
|
|
214
|
+
const urlSegments = path.split('/').filter(Boolean);
|
|
215
|
+
const currentIndex = urlSegments.findIndex(segment => decodeURIComponent(segment) === this.userId);
|
|
216
|
+
if (currentIndex === -1) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
urlSegments[currentIndex] = newUserId;
|
|
220
|
+
this.location.replaceState(`/${urlSegments.join('/')}${query ? `?${query}` : ''}`);
|
|
221
|
+
this.userId = newUserId;
|
|
222
|
+
this.userService.userId = newUserId;
|
|
223
|
+
}
|
|
175
224
|
validateUserId() {
|
|
176
225
|
const idControl = this.form.get('userid');
|
|
177
226
|
if (idControl?.value !== '' && idControl?.value !== this.userService.originUser.userid) {
|
|
@@ -191,24 +240,24 @@ export class UserManageWidgetComponent {
|
|
|
191
240
|
// this.notificationService.warning(this.translate.instant('APP_USER_MSG.CHECK_USER_ID_FAILED'));
|
|
192
241
|
}
|
|
193
242
|
else {
|
|
194
|
-
this.userService.user.
|
|
243
|
+
this.userService.user.newUserid = this.form?.get('userid')?.value;
|
|
195
244
|
}
|
|
196
245
|
}));
|
|
197
246
|
}
|
|
198
247
|
else {
|
|
199
|
-
// delete this.userService?.user?.
|
|
248
|
+
// delete this.userService?.user?.newUserid;
|
|
200
249
|
}
|
|
201
250
|
}
|
|
202
251
|
save() {
|
|
203
252
|
this.saveChanges();
|
|
204
253
|
}
|
|
205
254
|
}
|
|
206
|
-
UserManageWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }], target: i0.ɵɵFactoryTarget.Component });
|
|
207
|
-
UserManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserManageWidgetComponent, selector: "app-user-manage-widget", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", deviceName: "deviceName", isLdap: "isLdap" }, outputs: { onSave: "onSave", onChange: "onChange", selectDevice: "selectDevice", goBack: "goBack" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending || userService.dataPending\"></app-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info *ngIf=\"user\" [name]=\"userName\" [email]=\"user.email\" [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\" [cucmid]=\"user.cucmId\"></app-user-info>\r\n\r\n <mat-tab-group disableRipple class=\"tabs-container\">\r\n <!-- <mat-tab label=\"Summary\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!lineAssociation\">\r\n <app-user-calling *ngIf=\"lineAssociation\" [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"></app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list [devices]=\"user?.devices\" (onDeviceSelect)=\"onDeviceSelect($event)\"></app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n <!-- USER INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">User Details</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"userid\" matInput (input)=\"onChangeField('userid')\">\r\n <mat-error\r\n *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n <mat-error *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"email\" matInput (input)=\"onChangeField('email')\">\r\n <mat-error\r\n *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n <mat-error *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"firstName\" matInput (input)=\"onChangeField('firstName')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"lastName\" matInput (input)=\"onChangeField('lastName')\">\r\n <mat-error\r\n *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- USER INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">General User Info</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"department\" matInput type=\"text\" (input)=\"onChangeField('department')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"manager\" matInput type=\"text\" (input)=\"onChangeField('manager')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"associatedPc\" matInput type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"digestCredentials\" matInput type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <div class=\"input-holder__input\">\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <div class=\"input-holder__input\">\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"confirmDigestCredentials\" matInput type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- USER INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">Contact Information</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"digestCredentials\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Diractory URI</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </form>\r\n </ng-template>\r\n</div>\r\n\r\n<!--<mat-progress-spinner *ngIf=\"dataPending\"-->\r\n<!-- class=\"page-spinner\"-->\r\n<!-- mode=\"indeterminate\"-->\r\n<!-- [diameter]=\"70\" strokeWidth=\"3\"></mat-progress-spinner>-->\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:flex;gap:2rem;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box .user-box-title{display:flex;font-weight:500;font-size:16px;max-inline-size:11.25rem;flex:1;color:#000000f2;margin-top:3px;font-family:Poppins,Poppins,sans-serif}.user-info-box .form-holder__inputs{display:flex;flex-direction:column;flex:1}.user-info-box .form-holder__inputs .input-holder{display:flex;gap:1.5rem;padding:.5rem 0;font-size:.75rem;line-height:1.25;align-items:center;overflow:hidden}.user-info-box .form-holder__inputs .input-holder:nth-child(1){padding-top:0}.user-info-box .form-holder__inputs .input-holder:last-child{padding-bottom:0}.user-info-box .form-holder__inputs .input-holder__name{font-weight:500!important;font-size:14px!important;flex-basis:12rem}.user-info-box .form-holder__inputs .input-holder__input{display:flex;flex:1}.user-info-box .form-holder__inputs .mat-divider{margin:0!important}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}:host .info-holder__name,:host .input-holder__name{font-weight:500!important;font-size:14px!important}:host .info-holder__inputs .input-holder__name,:host .input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}:host .info-holder__input ::ng-deep .mat-form-field,:host .input-holder__input ::ng-deep .mat-form-field{border:.0625rem solid rgba(0,0,0,.5019607843)!important;border-radius:.5rem;color:#000000f2;font-weight:400;font-size:.875rem;max-inline-size:18rem;padding:0}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper{margin:0!important;padding-bottom:0!important}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-outline-end,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-outline-end{border:none!important}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-start,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-start{border:none!important}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-end,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-end{border:none!important}:host .info-holder__input ::ng-deep .mat-form-field:hover,:host .input-holder__input ::ng-deep .mat-form-field:hover{background-color:#00000012!important;border:.0625rem solid rgba(0,0,0,.5019607843)!important}:host .info-holder__input ::ng-deep .mat-form-field.mat-focused .mat-form-field-outline-start,:host .input-holder__input ::ng-deep .mat-form-field.mat-focused .mat-form-field-outline-start{display:none}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i6.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i8.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i10.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i11.UserInfoComponent, selector: "app-user-info", inputs: ["name", "active", "email", "position", "cucmid"] }, { kind: "component", type: i12.LazyLoadingSelectComponent, selector: "app-lazy-loading-select", inputs: ["siteId", "form", "standalone", "placeholder", "controlName", "optionsToken", "appearance", "errorCode", "errorText", "default", "id"], outputs: ["changeField"] }, { kind: "component", type: i13.UserCallingComponent, selector: "app-user-calling", inputs: ["siteId", "userId"], outputs: ["onExtensionChange"] }, { kind: "component", type: i14.DeviceListComponent, selector: "app-device-list", inputs: ["devices"], outputs: ["onDeviceSelect"] }] });
|
|
255
|
+
UserManageWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, deps: [{ token: i1.UserService }, { token: i2.APIService }, { token: i3.DcpApiService }], target: i0.ɵɵFactoryTarget.Component });
|
|
256
|
+
UserManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserManageWidgetComponent, selector: "app-user-manage-widget", inputs: { token: "token", host: "host", dcpHost: "dcpHost", siteId: "siteId", userId: "userId", deviceName: "deviceName", isLdap: "isLdap" }, outputs: { onSave: "onSave", onChange: "onChange", selectDevice: "selectDevice", goBack: "goBack" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending || savePending || userService.dataPending\"></app-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info\r\n *ngIf=\"user\"\r\n [name]=\"userName\"\r\n [email]=\"user.email\"\r\n [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\"\r\n [cucmid]=\"user.cucmId\">\r\n </app-user-info>\r\n\r\n <!-- Summary isn't available for Webex users, so they start on the Profile tab -->\r\n <mat-tab-group disableRipple class=\"tabs-container\" [selectedIndex]=\"webexUUID ? 1 : 0\">\r\n <mat-tab label=\"Summary\" [disabled]=\"!!webexUUID\">\r\n <app-user-summary *ngIf=\"user\" [user]=\"user\"></app-user-summary>\r\n </mat-tab>\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"webexUUID ? webexUserProfile : userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!primaryLineReference\">\r\n <app-user-calling\r\n *ngIf=\"primaryLineReference\"\r\n [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"\r\n [primaryLineDirectoryNumber]=\"primaryLineReference\">\r\n </app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list\r\n [devices]=\"user?.devices\"\r\n (onDeviceSelect)=\"onDeviceSelect($event)\">\r\n </app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- keeps the bottom of the content reachable above the fixed panel -->\r\n <!-- <div class=\"actions-panel-spacer\" [class.actions-panel-spacer--visible]=\"hasUnsavedChanges()\"></div>\r\n <div class=\"actions-panel\"\r\n [class.actions-panel--visible]=\"hasUnsavedChanges()\"\r\n [attr.aria-hidden]=\"!hasUnsavedChanges()\">\r\n <div class=\"actions-panel__actions\">\r\n <button type=\"button\" class=\"btn-outline\" [disabled]=\"savePending\" (click)=\"cancelChanges()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"isSavingDisabled()\" (click)=\"saveChanges()\">Save</button>\r\n </div>\r\n </div> --> \r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">User Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">General User Info</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Contact Information</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Directory URI</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">EM Configurations</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">BLF Presence Group</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'presenceGroup'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('presenceGroup')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Subscribe CSS</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Subscribe CSS\" formControlName=\"subscribeCss\" type=\"text\" (input)=\"onChangeField('subscribeCss')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Allow Control of Device from CTI</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"allowDeviceControlFromCti\"\r\n (change)=\"onChangeField('allowDeviceControlFromCti')\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable Extension Mobility Cross Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableCrossClusterEm\"\r\n (change)=\"onChangeField('enableCrossClusterEm')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Multilevel Precedence and Preemption Authorization</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">MLPP User Identification Number</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">MLPP Precedence Authorization Level</div>\r\n <mat-form-field appearance=\"outline\" class=\"simple-select\">\r\n <mat-select formControlName=\"mlppPrecedencePattern\"\r\n (selectionChange)=\"changeField('mlppPrecedencePattern')\">\r\n <mat-option *ngFor=\"let option of authLevelOptions\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable MLPP</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Service Settings</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"homeCluster\"\r\n (change)=\"onChangeField('homeCluster')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #webexUserProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">User Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Primary email</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">General User Info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User profile</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <mat-slide-toggle class=\"custom-toggle\"\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Userlocale</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Contact Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Directory URI</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </div>\n </div>\n </div>\n </section>\n\n </div>\n </form>\n </ng-template>\n</div>\r\n\r\n<!-- <button mat-raised-button color=\"primary\" (click)=\"save()\" >Save</button> -->", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.mat-divider{margin:5px 0!important}.actions-panel{position:fixed;left:0;right:0;bottom:0;z-index:100;background:#dedede;border-top:1px solid rgba(0,0,0,.2);padding:.75rem 1.5rem;transform:translateY(100%);visibility:hidden;transition:transform .25s ease-in-out,visibility 0s linear .25s}.actions-panel--visible{transform:translateY(0);visibility:visible;transition:transform .25s ease-in-out,visibility 0s linear 0s}.actions-panel__actions{display:flex;justify-content:flex-end;gap:.75rem}.actions-panel-spacer{height:0;transition:height .25s ease-in-out}.actions-panel-spacer--visible{height:4rem}@media (prefers-reduced-motion: reduce){.actions-panel,.actions-panel--visible,.actions-panel-spacer{transition:none}}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.2);color:#000000f2}.btn-outline:hover:not(:disabled){background:rgba(0,0,0,.0705882353)}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:3rem}.info-boxes-container .card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff;min-width:0;font-family:Poppins,Poppins,sans-serif;gap:1.5rem}.info-boxes-container .card.vertical-card{flex-direction:row}.info-boxes-container .card.vertical-card .main-content{gap:0}.info-boxes-container .card.vertical-card .main-content .mat-divider{margin:0!important;border-top-color:#0003!important}.info-boxes-container .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;align-items:center;gap:3.25rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__name{max-width:15rem;width:15rem;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__field{display:flex;flex-direction:column;gap:.375rem}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input{width:calc(14.25rem - 26px);max-width:calc(100% - 26px);height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:8px;font-family:inherit;font-size:.875rem;font-weight:400;color:#000000f2}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:hover{background-color:#00000012!important}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.info-boxes-container .card.vertical-card .main-content .input-holder app-lazy-loading-select,.info-boxes-container .card.vertical-card .main-content .input-holder .mat-form-field.simple-select{width:14.25rem!important;max-width:14.25rem!important}.info-boxes-container .card.vertical-card .main-content .input-holder .field-error{display:flex;align-items:center;gap:.375rem;color:#c73636;font-size:.75rem}.info-boxes-container .card .header{display:flex;align-items:start;width:15rem;flex-shrink:0}.info-boxes-container .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.info-boxes-container .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.simple-select{padding:0}.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-start,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-gap,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-end{border-color:#00000080!important}.mat-form-field.simple-select.mat-focused ::ng-deep .mat-form-field-outline{box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;border-radius:6px}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i9.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i9.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i10.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i12.AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: i13.UserInfoComponent, selector: "app-user-info", inputs: ["name", "active", "email", "position", "cucmid"] }, { kind: "component", type: i14.LazyLoadingSelectComponent, selector: "app-lazy-loading-select", inputs: ["siteId", "form", "standalone", "placeholder", "controlName", "optionsToken", "appearance", "errorCode", "errorText", "default", "id"], outputs: ["changeField"] }, { kind: "component", type: i15.UserCallingComponent, selector: "app-user-calling", inputs: ["siteId", "userId", "primaryLineDirectoryNumber"], outputs: ["onExtensionChange"] }, { kind: "component", type: i16.DeviceListComponent, selector: "app-device-list", inputs: ["devices"], outputs: ["onDeviceSelect"] }, { kind: "component", type: i17.UserSummaryComponent, selector: "app-user-summary", inputs: ["user"] }] });
|
|
208
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, decorators: [{
|
|
209
258
|
type: Component,
|
|
210
|
-
args: [{ selector: 'app-user-manage-widget', template: "<app-loader *ngIf=\"dataPending || userService.dataPending\"></app-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info *ngIf=\"user\" [name]=\"userName\" [email]=\"user.email\" [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\" [cucmid]=\"user.cucmId\"></app-user-info>\r\n\r\n <mat-tab-group disableRipple class=\"tabs-container\">\r\n <!-- <mat-tab label=\"Summary\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!lineAssociation\">\r\n <app-user-calling *ngIf=\"lineAssociation\" [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"></app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list [devices]=\"user?.devices\" (onDeviceSelect)=\"onDeviceSelect($event)\"></app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n <!-- USER INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">User Details</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"userid\" matInput (input)=\"onChangeField('userid')\">\r\n <mat-error\r\n *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n <mat-error *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"email\" matInput (input)=\"onChangeField('email')\">\r\n <mat-error\r\n *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n <mat-error *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"firstName\" matInput (input)=\"onChangeField('firstName')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"lastName\" matInput (input)=\"onChangeField('lastName')\">\r\n <mat-error\r\n *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- USER INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">General User Info</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"department\" matInput type=\"text\" (input)=\"onChangeField('department')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"manager\" matInput type=\"text\" (input)=\"onChangeField('manager')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"associatedPc\" matInput type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"digestCredentials\" matInput type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <div class=\"input-holder__input\">\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <div class=\"input-holder__input\">\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <div class=\"input-holder__input\">\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input formControlName=\"confirmDigestCredentials\" matInput type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- USER INFO BOX-->\r\n <div class=\"user-info-box user-details-box\">\r\n <h3 class=\"user-box-title\">Contact Information</h3>\r\n <div class=\"form-holder__inputs\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"digestCredentials\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Diractory URI</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__input\">\r\n <mat-form-field appearance=\"outline\">\r\n <input matInput type=\"text\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </form>\r\n </ng-template>\r\n</div>\r\n\r\n<!--<mat-progress-spinner *ngIf=\"dataPending\"-->\r\n<!-- class=\"page-spinner\"-->\r\n<!-- mode=\"indeterminate\"-->\r\n<!-- [diameter]=\"70\" strokeWidth=\"3\"></mat-progress-spinner>-->\r\n", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:flex;gap:2rem;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box .user-box-title{display:flex;font-weight:500;font-size:16px;max-inline-size:11.25rem;flex:1;color:#000000f2;margin-top:3px;font-family:Poppins,Poppins,sans-serif}.user-info-box .form-holder__inputs{display:flex;flex-direction:column;flex:1}.user-info-box .form-holder__inputs .input-holder{display:flex;gap:1.5rem;padding:.5rem 0;font-size:.75rem;line-height:1.25;align-items:center;overflow:hidden}.user-info-box .form-holder__inputs .input-holder:nth-child(1){padding-top:0}.user-info-box .form-holder__inputs .input-holder:last-child{padding-bottom:0}.user-info-box .form-holder__inputs .input-holder__name{font-weight:500!important;font-size:14px!important;flex-basis:12rem}.user-info-box .form-holder__inputs .input-holder__input{display:flex;flex:1}.user-info-box .form-holder__inputs .mat-divider{margin:0!important}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}:host .info-holder__name,:host .input-holder__name{font-weight:500!important;font-size:14px!important}:host .info-holder__inputs .input-holder__name,:host .input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}:host .info-holder__input ::ng-deep .mat-form-field,:host .input-holder__input ::ng-deep .mat-form-field{border:.0625rem solid rgba(0,0,0,.5019607843)!important;border-radius:.5rem;color:#000000f2;font-weight:400;font-size:.875rem;max-inline-size:18rem;padding:0}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper{margin:0!important;padding-bottom:0!important}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-outline-end,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-outline-end{border:none!important}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-start,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-start{border:none!important}:host .info-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-end,:host .input-holder__input ::ng-deep .mat-form-field .mat-form-field-wrapper .mat-form-field-flex:hover .mat-form-field-outline-end{border:none!important}:host .info-holder__input ::ng-deep .mat-form-field:hover,:host .input-holder__input ::ng-deep .mat-form-field:hover{background-color:#00000012!important;border:.0625rem solid rgba(0,0,0,.5019607843)!important}:host .info-holder__input ::ng-deep .mat-form-field.mat-focused .mat-form-field-outline-start,:host .input-holder__input ::ng-deep .mat-form-field.mat-focused .mat-form-field-outline-start{display:none}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"] }]
|
|
211
|
-
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }]; }, propDecorators: { onSave: [{
|
|
259
|
+
args: [{ selector: 'app-user-manage-widget', template: "<app-loader *ngIf=\"dataPending || savePending || userService.dataPending\"></app-loader>\r\n\r\n<div *ngIf=\"!dataPending\">\r\n <div class=\"go-back-box\" (click)=\"onGoBack()\">\r\n <div class=\"go-back-box-container\">\r\n <span class=\"app-icon icon-webex-left-arrow\"></span>\r\n <span class=\"go-back-title\">Users</span>\r\n </div>\r\n </div>\r\n\r\n <app-user-info\r\n *ngIf=\"user\"\r\n [name]=\"userName\"\r\n [email]=\"user.email\"\r\n [active]=\"true\"\r\n [position]=\"user.siteName ? 'Member of ' + user.siteName : ''\"\r\n [cucmid]=\"user.cucmId\">\r\n </app-user-info>\r\n\r\n <!-- Summary isn't available for Webex users, so they start on the Profile tab -->\r\n <mat-tab-group disableRipple class=\"tabs-container\" [selectedIndex]=\"webexUUID ? 1 : 0\">\r\n <mat-tab label=\"Summary\" [disabled]=\"!!webexUUID\">\r\n <app-user-summary *ngIf=\"user\" [user]=\"user\"></app-user-summary>\r\n </mat-tab>\r\n <mat-tab label=\"Profile\">\r\n <ng-container *ngTemplateOutlet=\"webexUUID ? webexUserProfile : userProfile\">\r\n </ng-container>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"General\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Meetings\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Calling\" [disabled]=\"!primaryLineReference\">\r\n <app-user-calling\r\n *ngIf=\"primaryLineReference\"\r\n [siteId]=\"siteId\"\r\n (onExtensionChange)=\"onExtensionChange()\"\r\n [primaryLineDirectoryNumber]=\"primaryLineReference\">\r\n </app-user-calling>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Messaging\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <!-- <mat-tab label=\"Hybrid Services\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Devices\" [disabled]=\"!user?.devices || !user?.devices.length\">\r\n <app-device-list\r\n [devices]=\"user?.devices\"\r\n (onDeviceSelect)=\"onDeviceSelect($event)\">\r\n </app-device-list>\r\n </mat-tab>\r\n <!-- <mat-tab label=\"Vidcast\">\r\n <ng-container *ngTemplateOutlet=\"userProfile\">\r\n </ng-container>\r\n </mat-tab> -->\r\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\r\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\r\n </mat-tab-group>\r\n\r\n <!-- keeps the bottom of the content reachable above the fixed panel -->\r\n <!-- <div class=\"actions-panel-spacer\" [class.actions-panel-spacer--visible]=\"hasUnsavedChanges()\"></div>\r\n <div class=\"actions-panel\"\r\n [class.actions-panel--visible]=\"hasUnsavedChanges()\"\r\n [attr.aria-hidden]=\"!hasUnsavedChanges()\">\r\n <div class=\"actions-panel__actions\">\r\n <button type=\"button\" class=\"btn-outline\" [disabled]=\"savePending\" (click)=\"cancelChanges()\">Cancel</button>\r\n <button type=\"button\" class=\"btn-filled\" [disabled]=\"isSavingDisabled()\" (click)=\"saveChanges()\">Save</button>\r\n </div>\r\n </div> --> \r\n\r\n <ng-template #userProfile>\r\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\r\n <div class=\"info-boxes-container\">\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">User Details</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">User Id</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n User ID already exists\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Primary email</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n Please enter valid email\r\n </span>\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Fisrt Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Last Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\r\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\r\n <i class=\"fa fa-exclamation-triangle\"></i>\r\n This field is required\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">General User Info</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Department</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Manager user ID</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Associated PC</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('digestCredentials')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">User profile</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile voice access</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Userlocale</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userLocale'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField($event)\"\r\n [optionsToken]=\"'userLocales'\"\r\n [default]=\"{key: '', value: 'None', disabled: false}\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Confirm digest credentials</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\r\n (input)=\"onChangeField('confirmDigestCredentials')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <!-- USER INFO BOX-->\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Contact Information</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">Middle Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Telephone Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\r\n (input)=\"onChangeField('telephoneNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Mobile Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Directory URI</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Title</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Home Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Pager Number</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Display Name</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">EM Configurations</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">BLF Presence Group</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'presenceGroup'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('presenceGroup')\"\r\n [optionsToken]=\"'userProfiles'\"\r\n ></app-lazy-loading-select>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Subscribe CSS</div>\r\n <div class=\"input-holder__field\">\r\n <input class=\"plain-input\" placeholder=\"Subscribe CSS\" formControlName=\"subscribeCss\" type=\"text\" (input)=\"onChangeField('subscribeCss')\">\r\n </div>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">Allow Control of Device from CTI</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"allowDeviceControlFromCti\"\r\n (change)=\"onChangeField('allowDeviceControlFromCti')\">\r\n </mat-slide-toggle>\r\n </div>\r\n <mat-divider></mat-divider>\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable Extension Mobility Cross Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableCrossClusterEm\"\r\n (change)=\"onChangeField('enableCrossClusterEm')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Multilevel Precedence and Preemption Authorization</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder input-holder-bottom\">\r\n <div class=\"input-holder__name\">MLPP User Identification Number</div>\r\n <app-lazy-loading-select\r\n [siteId]=\"siteId\"\r\n [controlName]=\"'userProfile'\"\r\n [form]=\"user.form\"\r\n (changeField)=\"changeField('userProfile')\"\r\n [optionsToken]=\"'userProfiles'\">\r\n </app-lazy-loading-select>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top-bottom\">\r\n <div class=\"input-holder__name\">MLPP Precedence Authorization Level</div>\r\n <mat-form-field appearance=\"outline\" class=\"simple-select\">\r\n <mat-select formControlName=\"mlppPrecedencePattern\"\r\n (selectionChange)=\"changeField('mlppPrecedencePattern')\">\r\n <mat-option *ngFor=\"let option of authLevelOptions\" [value]=\"option\">\r\n {{option}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <mat-divider />\r\n <div class=\"input-holder input-holder-top\">\r\n <div class=\"input-holder__name\">Enable MLPP</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"enableMobileVoiceAccess\"\r\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\r\n [checked]=\"user.enableMobileVoiceAccess\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"card vertical-card\">\r\n <div class=\"header\">\r\n <span class=\"title\">Service Settings</span>\r\n </div>\r\n <div class=\"main-content\">\r\n <div class=\"input-holder\">\r\n <div class=\"input-holder__name\">Home Cluster</div>\r\n <mat-slide-toggle class=\"custom-toggle\"\r\n formControlName=\"homeCluster\"\r\n (change)=\"onChangeField('homeCluster')\">\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n </div>\r\n </form>\r\n </ng-template>\r\n\r\n <ng-template #webexUserProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">User Details</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"User Id\" formControlName=\"userid\" (input)=\"onChangeField('userid')\">\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('userid')?.hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Primary email</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Primary email\" formControlName=\"email\" (input)=\"onChangeField('email')\">\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n <span class=\"field-error\" *ngIf=\"form.get('email')?.touched && form.get('email')?.hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </span>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Fisrt Name\" formControlName=\"firstName\" (input)=\"onChangeField('firstName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Last Name\" formControlName=\"lastName\" (input)=\"onChangeField('lastName')\">\n <span class=\"field-error\" *ngIf=\"form.get('lastName')?.touched && form.get('lastName')?.hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">General User Info</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Department\" formControlName=\"department\" type=\"text\" (input)=\"onChangeField('department')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Manager user ID\" formControlName=\"manager\" type=\"text\" (input)=\"onChangeField('manager')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Associated PC\" formControlName=\"associatedPc\" type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\" type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">User profile</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <mat-slide-toggle class=\"custom-toggle\"\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Userlocale</div>\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" placeholder=\"Confirm digest credentials\" formControlName=\"confirmDigestCredentials\" type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </div>\n </div>\n </div>\n </section>\n\n <!-- USER INFO BOX-->\n <section class=\"card vertical-card\">\n <div class=\"header\">\n <span class=\"title\">Contact Information</span>\n </div>\n <div class=\"main-content\">\n <div class=\"input-holder input-holder-bottom\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Middle Name\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Telephone Number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Mobile Number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Digest credentials\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Directory URI</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Directory URI\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Title\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Home Number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top-bottom\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"number\" placeholder=\"Pager Number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder input-holder-top\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__field\">\n <input class=\"plain-input\" type=\"text\" placeholder=\"Display Name\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </div>\n </div>\n </div>\n </section>\n\n </div>\n </form>\n </ng-template>\n</div>\r\n\r\n<!-- <button mat-raised-button color=\"primary\" (click)=\"save()\" >Save</button> -->", styles: ["@charset \"UTF-8\";@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(\"data:image/svg+xml,%3C%3Fxml version%3D%221.0%22 encoding%3D%22UTF-8%22%3F%3E%3Csvg id%3D%22a%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 16.67 15.56%22%3E%3Cdefs%3E%3Cstyle%3E.b%7Bfill%3Anone%3Bstroke%3A%232c355d%3Bstroke-width%3A1.4px%3B%7D%3C%2Fstyle%3E%3C%2Fdefs%3E%3Cpath class%3D%22b%22 d%3D%22M4.87%2C3.89c0-1.72%2C1.51-3.19%2C3.47-3.19s3.47%2C1.47%2C3.47%2C3.19-1.51%2C3.19-3.47%2C3.19-3.47-1.47-3.47-3.19ZM.7%2C12.64c0-.37%2C.19-.76%2C.67-1.17%2C.48-.41%2C1.17-.78%2C2-1.09%2C1.66-.62%2C3.66-.93%2C4.97-.93s3.31%2C.31%2C4.97%2C.93c.83%2C.31%2C1.52%2C.68%2C2%2C1.09%2C.47%2C.41%2C.67%2C.8%2C.67%2C1.17v2.22H.7v-2.22Z%22%2F%3E%3C%2Fsvg%3E\")}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.mat-divider{margin:5px 0!important}.actions-panel{position:fixed;left:0;right:0;bottom:0;z-index:100;background:#dedede;border-top:1px solid rgba(0,0,0,.2);padding:.75rem 1.5rem;transform:translateY(100%);visibility:hidden;transition:transform .25s ease-in-out,visibility 0s linear .25s}.actions-panel--visible{transform:translateY(0);visibility:visible;transition:transform .25s ease-in-out,visibility 0s linear 0s}.actions-panel__actions{display:flex;justify-content:flex-end;gap:.75rem}.actions-panel-spacer{height:0;transition:height .25s ease-in-out}.actions-panel-spacer--visible{height:4rem}@media (prefers-reduced-motion: reduce){.actions-panel,.actions-panel--visible,.actions-panel-spacer{transition:none}}.btn-outline,.btn-filled{padding:.313rem .75rem;border-radius:50px;font-weight:500;font-size:.875rem;font-family:Poppins,Poppins,sans-serif;cursor:pointer;transition:background-color .1s ease-in-out;white-space:nowrap}.btn-outline{background:transparent;border:1px solid rgba(0,0,0,.2);color:#000000f2}.btn-outline:hover:not(:disabled){background:rgba(0,0,0,.0705882353)}.btn-outline:disabled{color:#babcc5;border-color:#dfe3e7;cursor:not-allowed}.btn-filled{background:rgba(0,0,0,.9490196078);color:#fff;border:1px solid transparent}.btn-filled:hover:not(:disabled){background:#2a2a2a}.btn-filled:disabled{background:#DFE3E7;color:#babcc5;cursor:not-allowed}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:3rem}.info-boxes-container .card{display:flex;flex-direction:column;padding:1.5rem;border:1px solid rgba(0,0,0,.2);border-radius:.5rem;background:#ffffff;min-width:0;font-family:Poppins,Poppins,sans-serif;gap:1.5rem}.info-boxes-container .card.vertical-card{flex-direction:row}.info-boxes-container .card.vertical-card .main-content{gap:0}.info-boxes-container .card.vertical-card .main-content .mat-divider{margin:0!important;border-top-color:#0003!important}.info-boxes-container .card.vertical-card .main-content .input-holder{min-height:2rem;box-sizing:content-box;display:flex;align-items:center;gap:3.25rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top{padding:.75rem 0 0}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-bottom{padding:0 0 .75rem}.info-boxes-container .card.vertical-card .main-content .input-holder.input-holder-top-bottom{padding:.75rem 0}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__name{max-width:15rem;width:15rem;flex-shrink:0;color:#000000f2;font-size:.875rem;font-weight:400;white-space:normal;overflow-wrap:break-word}.info-boxes-container .card.vertical-card .main-content .input-holder .input-holder__field{display:flex;flex-direction:column;gap:.375rem}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input{width:calc(14.25rem - 26px);max-width:calc(100% - 26px);height:21px;padding:4px 12px;box-sizing:content-box;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;border-radius:8px;font-family:inherit;font-size:.875rem;font-weight:400;color:#000000f2}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:hover{background-color:#00000012!important}.info-boxes-container .card.vertical-card .main-content .input-holder .plain-input:focus{color:#000000b3;background:#fff;border:solid .0625rem rgba(0,0,0,.5019607843)!important;box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;outline:none}.info-boxes-container .card.vertical-card .main-content .input-holder app-lazy-loading-select,.info-boxes-container .card.vertical-card .main-content .input-holder .mat-form-field.simple-select{width:14.25rem!important;max-width:14.25rem!important}.info-boxes-container .card.vertical-card .main-content .input-holder .field-error{display:flex;align-items:center;gap:.375rem;color:#c73636;font-size:.75rem}.info-boxes-container .card .header{display:flex;align-items:start;width:15rem;flex-shrink:0}.info-boxes-container .card .header .title{font-weight:500;font-size:1rem;font-family:Poppins,Poppins,sans-serif;color:#000000f2}.info-boxes-container .card .main-content{display:flex;flex-direction:column;min-width:0;gap:1.5rem;flex:1}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.simple-select{padding:0}.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-start,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-gap,.mat-form-field.simple-select ::ng-deep .mat-form-field-outline-end{border-color:#00000080!important}.mat-form-field.simple-select.mat-focused ::ng-deep .mat-form-field-outline{box-shadow:0 0 0 .12rem #fff,0 0 0 .25rem #1170cf,0 0 0 .3rem #1170cf59;border-radius:6px}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#f3f6f6;border:1px solid #e2e9ef;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-flex .mat-form-field-outline-start{display:none}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:.875rem!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important;margin:0!important;box-shadow:0 -3px #000000e6;margin-bottom:.225rem!important;color:#0009!important}::ng-deep .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px;border-bottom:.0625rem solid rgba(0,0,0,.4)}::ng-deep .mat-tab-labels .mat-tab-label{font-size:.875rem!important;color:#181818!important}::ng-deep .mat-tab-labels .mat-tab-label.mat-tab-label-active .mat-tab-label-content{color:#000!important;font-weight:500!important;font-size:.875rem!important}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}.app-icon{height:20px;width:20px;display:inline-block;cursor:pointer;background-repeat:no-repeat;background-position:center}.app-icon{transition:all .15s ease-out}.icon-webex-right-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2220%22 height%3D%2220%22 viewBox%3D%220 0 20 20%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-right%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M14.0812 9.66902L6.58119 2.16902C6.53813 2.12351 6.48638 2.0871 6.429 2.06193C6.37162 2.03677 6.30978 2.02336 6.24713 2.0225C6.18448 2.02165 6.1223 2.03336 6.06425 2.05695C6.00621 2.08053 5.95348 2.11552 5.90919 2.15983C5.8649 2.20415 5.82994 2.25689 5.80638 2.31495C5.78282 2.373 5.77113 2.43519 5.77202 2.49784C5.77291 2.56049 5.78634 2.62232 5.81153 2.67969C5.83673 2.73705 5.87316 2.78879 5.91869 2.83183L13.0874 10.0003L5.91869 17.169C5.87316 17.2121 5.83673 17.2638 5.81153 17.3212C5.78634 17.3785 5.77291 17.4404 5.77202 17.503C5.77113 17.5657 5.78282 17.6279 5.80638 17.6859C5.82994 17.744 5.8649 17.7967 5.90919 17.841C5.95348 17.8853 6.00621 17.9203 6.06425 17.9439C6.1223 17.9675 6.18448 17.9792 6.24713 17.9783C6.30978 17.9775 6.37162 17.9641 6.429 17.9389C6.48638 17.9138 6.53813 17.8773 6.58119 17.8318L14.0812 10.3318C14.1691 10.2439 14.2184 10.1247 14.2184 10.0004C14.2184 9.87613 14.1691 9.75692 14.0812 9.66902Z%22 fill%3D%22%230F0F0F%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.icon-webex-left-arrow{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2216%22 height%3D%2216%22 viewBox%3D%220 0 16 16%22 fill%3D%22none%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0D%3Cg id%3D%22arrow-left%22%3E%0D%3Cpath id%3D%22Vector%22 d%3D%22M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z%22 fill%3D%22black%22 fill-opacity%3D%220.95%22%2F%3E%0D%3C%2Fg%3E%0D%3C%2Fsvg%3E%0D\")}.go-back-box{background:white;border-bottom:rgba(0,0,0,.2) 1px solid;height:60px;width:100%;line-height:60px;cursor:pointer}.go-back-box-container{padding:0 1rem;display:flex;justify-content:flex-start}.go-back-box-container .icon-webex-left-arrow,.go-back-box-container .go-back-title{display:block;height:60px}.go-back-box-container .go-back-title{line-height:61px}.go-back-title{display:inline-block;margin:0 10px}.tabs-container{padding:1.5rem 4.375rem 0}::ng-deep .custom-toggle .mat-slide-toggle-bar{position:relative;width:48px;height:25px;flex-shrink:0;border-radius:13px;background-color:#ccc}::ng-deep .custom-toggle .mat-slide-toggle-thumb{height:20px;width:20px;position:absolute;border-radius:50%;display:flex;align-items:center;justify-content:center;left:3px;top:5px;background-color:#fff!important}::ng-deep .custom-toggle .mat-slide-toggle-thumb:after{content:\"\\d7\";font-size:14px;color:#8e9fb7;line-height:1;display:block;pointer-events:none;transform:translateY(0)}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb{left:calc(100% - 11px)!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-thumb:after{content:\"\\2713\";color:#0d56aa;font-weight:700;font-size:10px}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar{background:#1170cf!important}::ng-deep .custom-toggle.mat-checked .mat-slide-toggle-bar:hover{background:#0353a8!important}\n"] }]
|
|
260
|
+
}], ctorParameters: function () { return [{ type: i1.UserService }, { type: i2.APIService }, { type: i3.DcpApiService }]; }, propDecorators: { onSave: [{
|
|
212
261
|
type: Output
|
|
213
262
|
}], onChange: [{
|
|
214
263
|
type: Output
|
|
@@ -220,6 +269,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
220
269
|
type: Input
|
|
221
270
|
}], host: [{
|
|
222
271
|
type: Input
|
|
272
|
+
}], dcpHost: [{
|
|
273
|
+
type: Input
|
|
223
274
|
}], siteId: [{
|
|
224
275
|
type: Input
|
|
225
276
|
}], userId: [{
|
|
@@ -229,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
229
280
|
}], isLdap: [{
|
|
230
281
|
type: Input
|
|
231
282
|
}] } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU92RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPekMsTUFBTSxPQUFPLHlCQUF5QjtJQWVwQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFF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Q0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO29CQUN4QixpR0FBaUc7aUJBQ2xHO3FCQUFNO29CQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUE7aUJBQ2xFO1lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNUO2FBQU07WUFDTCw0Q0FBNEM7U0FDN0M7SUFDSCxDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNwQixDQUFDOzt1SEFoT1UseUJBQXlCOzJHQUF6Qix5QkFBeUIsNlJDZnRDLG0wZEF5VEE7NEZEMVNhLHlCQUF5QjtrQkFMckMsU0FBUzsrQkFDRSx3QkFBd0I7MkhBUXhCLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNFLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2ltcGxpZmllZFVzZXIgfSBmcm9tICcuL2NsYXNzZXMvc2ltcGxpZmllZC11c2VyJztcclxuaW1wb3J0IHsgTGluZUFzc29jaWF0aW9uIH0gZnJvbSAnLi9jbGFzc2VzL2xpbmUtYXNzb2NpYXRpb24nO1xyXG5pbXBvcnQgeyBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2UgfSBmcm9tICcuL2NsYXNzZXMvbGluZS1hc3NvY2lhdGlvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBEZXZpY2UgfSBmcm9tICcuL2NsYXNzZXMvZGV2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItbWFuYWdlLXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGRhdGFQZW5kaW5nITogYm9vbGVhbjtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3REZXZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZ29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQElucHV0KCkgdG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaG9zdCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzaXRlSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldmljZU5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNMZGFwITogYm9vbGVhbjtcclxuXHJcbiAgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5mb3JtO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVzZXIoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt0aGlzLnVzZXI/LmZpcnN0TmFtZSB8fCAnJ30gJHt0aGlzLnVzZXI/Lmxhc3ROYW1lIHx8ICcnfWA7XHJcbiAgfVxyXG5cclxuICBnZXQgbGluZUFzc29jaWF0aW9uKCk6IExpbmVBc3NvY2lhdGlvbiB8IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZXwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzICYmIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/LmRldmljZXNbMF0gJiYgdGhpcy51c2VyU2VydmljZT8udXNlcj8uZGV2aWNlc1swXS5saW5lQXNzb2NpYXRpb25zICYmIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/LmRldmljZXNbMF0ubGluZUFzc29jaWF0aW9uc1swXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogQVBJU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2Uub25Vc2VyTGluZVNhdmVkJFxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnBlcnNpc3RDYWNoZUNoYW5nZXMoKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmUubmV4dChcInNhdmVkXCIpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0sICgpID0+IHRoaXMudXNlclNlcnZpY2UuZGF0YVBlbmRpbmcgPSBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXBpU2VydmljZS50b2tlbiA9IHRoaXMudG9rZW47XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuYXBpVXJsID0gdGhpcy5ob3N0O1xyXG4gICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgfVxyXG5cclxuICBvbkRldmljZVNlbGVjdChkZXZpY2U6IERldmljZSk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3REZXZpY2UuZW1pdChkZXZpY2UubmFtZSk7XHJcbiAgfVxyXG5cclxuICBvbkdvQmFjaygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ29CYWNrLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uRXh0ZW5zaW9uQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KFwic3RhcnQgZXh0ZW5zaW9uIGNoYW5nZS4uXCIpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VGaWVsZCh0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoXCJzdGFydCBjaGFuZ2UuLlwiKTtcclxuXHJcbiAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgICh0aGlzLnVzZXJTZXJ2aWNlLnVzZXIgYXMgYW55KVt0b2tlbl0gPSB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnZhbHVlO1xyXG5cclxuICAgIGlmICh0b2tlbiA9PT0gJ21pZGRsZU5hbWUnKSB7XHJcbiAgICAgIHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5wYXR0ZXJuKCdbIGEtekEtWi1dKycpXSk7XHJcbiAgICB9XHJcbiAgICBpZiAodG9rZW4gPT09ICd0ZWxlcGhvbmVOdW1iZXInIHx8IHRva2VuID09PSAnbW9iaWxlTnVtYmVyJyB8fCB0b2tlbiA9PT0gJ3BhZ2VyTnVtYmVyJyB8fCB0b2tlbiA9PT0gJ2hvbWVOdW1iZXInKSB7XHJcbiAgICAgIHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5wYXR0ZXJuKCdbIDAtOS0rXSsnKV0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtPy5nZXQodG9rZW4pPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLnZhbGlkYXRlVXNlcklkKCk7XHJcbiAgfVxyXG5cclxuICBzYXZlQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy51c2VyU2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcygpIHx8IHRoaXMuZm9ybT8uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhUGVuZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCBjdXJyZW50TGluZUFzc29jaWF0aW9uID0gdGhpcy51c2VyPy5kZXZpY2VzPy5bMF0/LmxpbmVBc3NvY2lhdGlvbnM/LlswXTtcclxuICAgIGNvbnN0IG9yaWdpbkxpbmVBc3NvY2lhdGlvbiA9IHRoaXMudXNlclNlcnZpY2Uub3JpZ2luVXNlcj8uZGV2aWNlcz8uWzBdPy5saW5lQXNzb2NpYXRpb25zPy5bMF07XHJcbiAgICBjb25zdCBjdXJyZW50TWFwcGVkRGlkID0gdGhpcy51c2VyPy5saW5lcz8uWzBdPy5tYXBwZWREaWRzPy5bMF0gfHwgJyc7XHJcbiAgICBjb25zdCBvcmlnaW5NYXBwZWREaWQgPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmxpbmVzPy5bMF0/Lm1hcHBlZERpZHM/LlswXSB8fCAnJztcclxuICAgIGNvbnN0IGRpZFBhdHRlcm5EZXNjcmlwdGlvbiA9IHRoaXMudXNlclNlcnZpY2Uub3JpZ2luVXNlcj8ubGluZXM/LlswXT8uZGlkUGF0dGVybnM/LlswXT8uZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgICBjb25zdCBsaW5lQXNzb2NpYXRpb25DaGFuZ2VkID0gY3VycmVudExpbmVBc3NvY2lhdGlvbiAmJiBvcmlnaW5MaW5lQXNzb2NpYXRpb24gJiYgIWN1cnJlbnRMaW5lQXNzb2NpYXRpb24uZXF1YWxzKG9yaWdpbkxpbmVBc3NvY2lhdGlvbik7XHJcbiAgICBjb25zdCBtYXBwZWREaWRDaGFuZ2VkID0gY3VycmVudE1hcHBlZERpZCAhPT0gb3JpZ2luTWFwcGVkRGlkO1xyXG5cclxuICAgIGlmKChsaW5lQXNzb2NpYXRpb25DaGFuZ2VkIHx8IG1hcHBlZERpZENoYW5nZWQpICYmIGN1cnJlbnRMaW5lQXNzb2NpYXRpb24gJiYgb3JpZ2luTGluZUFzc29jaWF0aW9uKSB7XHJcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMudXNlclNlcnZpY2UuZWRpdFRyYW5zbGF0aW9uUGF0dGVybihcclxuICAgICAgICB0aGlzLnVzZXIuY3VjbUlkLFxyXG4gICAgICAgIG9yaWdpbk1hcHBlZERpZCxcclxuICAgICAgICBjdXJyZW50TWFwcGVkRGlkLFxyXG4gICAgICAgIGN1cnJlbnRMaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcixcclxuICAgICAgICBvcmlnaW5MaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSxcclxuICAgICAgICBkaWRQYXR0ZXJuRGVzY3JpcHRpb24sXHJcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLm5leHQoXCJ1c2VyIGhhcyBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS4uXCIpO1xyXG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSwgKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKTs7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy51c2VyU2VydmljZS5wZXJzaXN0Q2FjaGVDaGFuZ2VzKClcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMub25TYXZlLm5leHQoXCJ1c2VyIGhhcyBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS4uXCIpO1xyXG4gICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSwgKCkgPT4gdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyLnRvZ2dsZUVkaXRNb2RlKCk7XHJcbiAgfVxyXG5cclxuICBpc1NhdmluZ0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLnVzZXJTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzKCkgfHwgdGhpcy51c2VyU2VydmljZS5oYXNFeGlzdGVkVXNlcklkO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRmllbGQodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KFwic3RhcnQgY2hhbmdlLi5cIik7XHJcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLnVzZXI/LmZvcm0/LmdldCh0b2tlbik7XHJcbiAgICBpZiAodG9rZW4gIT09ICdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnKSB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgdGhpcy51c2VyW3Rva2VuXSA9IGZvcm1GaWVsZD8udmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodG9rZW4gPT09ICdkaWdlc3RDcmVkZW50aWFscycgfHwgdG9rZW4gPT09ICdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnKSB7XHJcbiAgICAgIHRoaXMuZGlnZXN0Q3JlZGVudGlhbHNIYW5kbGVyKHRva2VuLCBmb3JtRmllbGQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkaWdlc3RDcmVkZW50aWFsc0hhbmRsZXIodG9rZW46IHN0cmluZywgZmllbGQ6IGFueSkge1xyXG4gICAgY29uc3QgZmllbGROYW1lVG9Db21wYXJlID0gdG9rZW4gPT09ICdkaWdlc3RDcmVkZW50aWFscycgPyAnY29uZmlybURpZ2VzdENyZWRlbnRpYWxzJyA6ICdkaWdlc3RDcmVkZW50aWFscyc7XHJcbiAgICBjb25zdCBmaWVsZFRvQ29tcGFyZSA9IHRoaXMudXNlclNlcnZpY2UudXNlci5mb3JtLmdldChmaWVsZE5hbWVUb0NvbXBhcmUpO1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UudXNlcj8uZm9ybT8uZ2V0KHRva2VuKSkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmZvcm0/LmdldCh0b2tlbik/LnNldEVycm9ycyhudWxsKTtcclxuICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyPy5mb3JtPy5nZXQoZmllbGROYW1lVG9Db21wYXJlKT8uc2V0RXJyb3JzKG51bGwpO1xyXG5cclxuICAgICAgLyogaWYgKCFmaWVsZC52YWx1ZSAmJiAhZmllbGRUb0NvbXBhcmUudmFsdWUpIHtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyPy5kaWdlc3RDcmVkZW50aWFscyA9IG51bGw7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgIH1cclxuXHJcbiAgICAgICBpZiAoIWZpZWxkLnZhbHVlICYmIGZpZWxkVG9Db21wYXJlLnZhbHVlIHx8ICFmaWVsZFRvQ29tcGFyZS52YWx1ZSAmJiBmaWVsZC52YWx1ZSkge1xyXG4gICAgICAgICBjb25zdCByZXF1aXJlZEZpZWxkTmFtZSA9IGZpZWxkLnZhbHVlID8gZmllbGROYW1lVG9Db21wYXJlIDogdG9rZW47XHJcbiAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlci5mb3JtLmdldChyZXF1aXJlZEZpZWxkTmFtZSkuc2V0RXJyb3JzKHtyZXF1aXJlZDogdHJ1ZX0pO1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgICB9XHJcbiAgICAgICBpZiAoZmllbGQudmFsdWUgJiYgZmllbGRUb0NvbXBhcmUudmFsdWUgJiYgZmllbGQudmFsdWUgIT09IGZpZWxkVG9Db21wYXJlLnZhbHVlKSB7XHJcbiAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlci5mb3JtLmdldCh0b2tlbikuc2V0RXJyb3JzKHttaXNtYXRjaDogdHJ1ZX0pO1xyXG4gICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIuZm9ybS5nZXQoZmllbGROYW1lVG9Db21wYXJlKS5zZXRFcnJvcnMoe21pc21hdGNoOiB0cnVlfSk7XHJcbiAgICAgICB9Ki9cclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldERhdGEoKSB7XHJcbiAgICB0aGlzLmRhdGFQZW5kaW5nID0gdHJ1ZTtcclxuICAgIGxldCByZXF1ZXN0O1xyXG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2lzV2ViZXgnKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgIHJlcXVlc3QgPSB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoV2ViZXhVc2VyVG9rZW4obG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1c3RvbWVySWQnKSEsIHRoaXMudXNlcklkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlcXVlc3QgPSB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoVXNlclRva2VuKHRoaXMuc2l0ZUlkLCB0aGlzLnVzZXJJZCwgdGhpcy5pc0xkYXApO1xyXG4gICAgfVxyXG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGNvbXBsZXRlOiAodjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvdHVraS9taWdyYXRlL3VzZXJzYF0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb29raWUobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBkYXlzOiBudW1iZXIpIHtcclxuICAgIHZhciBleHBpcmVzID0gXCJcIjtcclxuICAgIGlmIChkYXlzKSB7XHJcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgZGF0ZS5zZXRUaW1lKGRhdGUuZ2V0VGltZSgpICsgKGRheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7XHJcbiAgICAgIGV4cGlyZXMgPSBcIjsgZXhwaXJlcz1cIiArIGRhdGUudG9VVENTdHJpbmcoKTtcclxuICAgIH1cclxuICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyBcIj1cIiArICh2YWx1ZSB8fCBcIlwiKSArIGV4cGlyZXMgKyBcIjsgcGF0aD0vXCI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHZhbGlkYXRlVXNlcklkKCkge1xyXG4gICAgY29uc3QgaWRDb250cm9sID0gdGhpcy5mb3JtLmdldCgndXNlcmlkJyk7XHJcbiAgICBpZiAoaWRDb250cm9sPy52YWx1ZSAhPT0gJycgJiYgaWRDb250cm9sPy52YWx1ZSAhPT0gdGhpcy51c2VyU2VydmljZS5vcmlnaW5Vc2VyLnVzZXJpZCkge1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLmZldGNoVXNlckJ5SWQoaWRDb250cm9sPy52YWx1ZSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlcklkRXhpc3RQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlkQ29udHJvbD8uc2V0RXJyb3JzKHtleGlzdDogdHJ1ZX0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtPy5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcignZXhpc3QnKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaGFzRXhpc3RlZFVzZXJJZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5oYXNFeGlzdGVkVXNlcklkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlcklkRXhpc3RQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwNCkge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS53YXJuaW5nKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0FQUF9VU0VSX01TRy5DSEVDS19VU0VSX0lEX0ZBSUxFRCcpKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXIubmV3VXNlcklkID0gdGhpcy5mb3JtPy5nZXQoJ3VzZXJpZCcpPy52YWx1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBkZWxldGUgdGhpcy51c2VyU2VydmljZT8udXNlcj8ubmV3VXNlcklkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuc2F2ZUNoYW5nZXMoKVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGFwcC1sb2FkZXIgKm5nSWY9XCJkYXRhUGVuZGluZyB8fCB1c2VyU2VydmljZS5kYXRhUGVuZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuXHJcbjxkaXYgKm5nSWY9XCIhZGF0YVBlbmRpbmdcIj5cclxuICA8ZGl2IGNsYXNzPVwiZ28tYmFjay1ib3hcIiAoY2xpY2spPVwib25Hb0JhY2soKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImdvLWJhY2stYm94LWNvbnRhaW5lclwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImFwcC1pY29uIGljb24td2ViZXgtbGVmdC1hcnJvd1wiPjwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJnby1iYWNrLXRpdGxlXCI+VXNlcnM8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGFwcC11c2VyLWluZm8gKm5nSWY9XCJ1c2VyXCIgW25hbWVdPVwidXNlck5hbWVcIiBbZW1haWxdPVwidXNlci5lbWFpbFwiIFthY3RpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgW3Bvc2l0aW9uXT1cInVzZXIuc2l0ZU5hbWUgPyAnTWVtYmVyIG9mICcgKyB1c2VyLnNpdGVOYW1lIDogJydcIiBbY3VjbWlkXT1cInVzZXIuY3VjbUlkXCI+PC9hcHAtdXNlci1pbmZvPlxyXG5cclxuICA8bWF0LXRhYi1ncm91cCBkaXNhYmxlUmlwcGxlIGNsYXNzPVwidGFicy1jb250YWluZXJcIj5cclxuICAgIDwhLS0gPG1hdC10YWIgbGFiZWw9XCJTdW1tYXJ5XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIlByb2ZpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZXJQcm9maWxlXCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIkdlbmVyYWxcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZXJQcm9maWxlXCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtdGFiPiAtLT5cclxuICAgIDwhLS0gPG1hdC10YWIgbGFiZWw9XCJNZWV0aW5nc1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJDYWxsaW5nXCIgW2Rpc2FibGVkXT1cIiFsaW5lQXNzb2NpYXRpb25cIj5cclxuICAgICAgPGFwcC11c2VyLWNhbGxpbmcgKm5nSWY9XCJsaW5lQXNzb2NpYXRpb25cIiBbc2l0ZUlkXT1cInNpdGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkV4dGVuc2lvbkNoYW5nZSk9XCJvbkV4dGVuc2lvbkNoYW5nZSgpXCI+PC9hcHAtdXNlci1jYWxsaW5nPlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIk1lc3NhZ2luZ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIkh5YnJpZCBTZXJ2aWNlc1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidXNlclByb2ZpbGVcIj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC10YWI+IC0tPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJEZXZpY2VzXCIgW2Rpc2FibGVkXT1cIiF1c2VyPy5kZXZpY2VzIHx8ICF1c2VyPy5kZXZpY2VzLmxlbmd0aFwiPlxyXG4gICAgICA8YXBwLWRldmljZS1saXN0IFtkZXZpY2VzXT1cInVzZXI/LmRldmljZXNcIiAob25EZXZpY2VTZWxlY3QpPVwib25EZXZpY2VTZWxlY3QoJGV2ZW50KVwiPjwvYXBwLWRldmljZS1saXN0PlxyXG4gICAgPC9tYXQtdGFiPlxyXG4gICAgPCEtLSA8bWF0LXRhYiBsYWJlbD1cIlZpZGNhc3RcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZXJQcm9maWxlXCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtdGFiPiAtLT5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwiTGluZXNcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvbWF0LXRhYj5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwiRmVhdHVyZXNcIiBbZGlzYWJsZWRdPVwidHJ1ZVwiPjwvbWF0LXRhYj5cclxuICA8L21hdC10YWItZ3JvdXA+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjdXNlclByb2ZpbGU+XHJcbiAgICA8Zm9ybSAqbmdJZj1cInVzZXIgJiYgZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hlcy1jb250YWluZXJcIj5cclxuICAgICAgICA8IS0tICAgIFVTRVIgSU5GTyBCT1gtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidXNlci1pbmZvLWJveCB1c2VyLWRldGFpbHMtYm94XCI+XHJcbiAgICAgICAgICA8aDMgY2xhc3M9XCJ1c2VyLWJveC10aXRsZVwiPlVzZXIgRGV0YWlsczwvaDM+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ob2xkZXJfX2lucHV0c1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlVzZXIgSWQ8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyaWRcIiBtYXRJbnB1dCAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndXNlcmlkJylcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm0uZ2V0KCd1c2VyaWQnKT8uaGFzRXJyb3IoJ2V4aXN0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIFVzZXIgSUQgYWxyZWFkeSBleGlzdHNcclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UHJpbWFyeSBlbWFpbDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCIgbWF0SW5wdXQgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2VtYWlsJylcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciB2YWxpZCBlbWFpbFxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5GaXNydCBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCIgbWF0SW5wdXQgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2ZpcnN0TmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TGFzdCBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiBtYXRJbnB1dCAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbGFzdE5hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmb3JtLmdldCgnbGFzdE5hbWUnKT8udG91Y2hlZCAmJiBmb3JtLmdldCgnbGFzdE5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1c2VyLWluZm8tYm94IHVzZXItZGV0YWlscy1ib3hcIj5cclxuICAgICAgICAgIDxoMyBjbGFzcz1cInVzZXItYm94LXRpdGxlXCI+R2VuZXJhbCBVc2VyIEluZm88L2gzPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taG9sZGVyX19pbnB1dHNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EZXBhcnRtZW50PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVwYXJ0bWVudFwiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2RlcGFydG1lbnQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1hbmFnZXIgdXNlciBJRDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cIm1hbmFnZXJcIiBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtYW5hZ2VyJylcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Bc3NvY2lhdGVkIFBDPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiYXNzb2NpYXRlZFBjXCIgbWF0SW5wdXQgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnYXNzb2NpYXRlZFBjJylcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkaWdlc3RDcmVkZW50aWFsc1wiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaWdlc3RDcmVkZW50aWFscycpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBwcm9maWxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICBbc2l0ZUlkXT1cInNpdGVJZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlclByb2ZpbGUnXCJcclxuICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZUZpZWxkKT1cImNoYW5nZUZpZWxkKCd1c2VyUHJvZmlsZScpXCJcclxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXHJcbiAgICAgICAgICAgICAgICA+PC9hcHAtbGF6eS1sb2FkaW5nLXNlbGVjdD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSB2b2ljZSBhY2Nlc3M8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPVwiY3VzdG9tLXRvZ2dsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3MnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidXNlci5lbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlVzZXJsb2NhbGU8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1sYXp5LWxvYWRpbmctc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcclxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid1c2VyTG9jYWxlJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtXT1cInVzZXIuZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlckxvY2FsZXMnXCJcclxuICAgICAgICAgICAgICAgICAgW2RlZmF1bHRdPVwie2tleTogJycsIHZhbHVlOiAnTm9uZScsIGRpc2FibGVkOiBmYWxzZX1cIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Db25maXJtIGRpZ2VzdCBjcmVkZW50aWFsczwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1EaWdlc3RDcmVkZW50aWFsc1wiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSAgICBVU0VSIElORk8gQk9YLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVzZXItaW5mby1ib3ggdXNlci1kZXRhaWxzLWJveFwiPlxyXG4gICAgICAgICAgPGgzIGNsYXNzPVwidXNlci1ib3gtdGl0bGVcIj5Db250YWN0IEluZm9ybWF0aW9uPC9oMz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvbGRlcl9faW5wdXRzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TWlkZGxlIE5hbWU8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cIm1pZGRsZU5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbWlkZGxlTmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VGVsZXBob25lIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ0ZWxlcGhvbmVOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RlbGVwaG9uZU51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TW9iaWxlIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVOdW1iZXJcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbW9iaWxlTnVtYmVyJylcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImRpZ2VzdENyZWRlbnRpYWxzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaWdlc3RDcmVkZW50aWFscycpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlyYWN0b3J5IFVSSTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlyZWN0b3J5VXJpXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2RpcmVjdG9yeVVyaScpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VGl0bGU8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RpdGxlJylcIj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib21lIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJob21lTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2hvbWVOdW1iZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlBhZ2VyIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2lucHV0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJwYWdlck51bWJlclwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdwYWdlck51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlzcGxheSBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9faW5wdXRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXNwbGF5TmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9mb3JtPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG5cclxuPCEtLTxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciAqbmdJZj1cImRhdGFQZW5kaW5nXCItLT5cclxuPCEtLSAgY2xhc3M9XCJwYWdlLXNwaW5uZXJcIi0tPlxyXG48IS0tICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLS0+XHJcbjwhLS0gIFtkaWFtZXRlcl09XCI3MFwiIHN0cm9rZVdpZHRoPVwiM1wiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+LS0+XHJcbiJdfQ==
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLW1hbmFnZS9zcmMvdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZGLE9BQU8sRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU12RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVEzQyxNQUFNLE9BQU8seUJBQXlCO0lBNEJwQyxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJ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S0FBSyxDQUFBO2lCQUNsRTtZQUNILENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDVDthQUFNO1lBQ0wsNENBQTRDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDcEIsQ0FBQzs7dUhBM1JVLHlCQUF5QjsyR0FBekIseUJBQXlCLGlUQ2pCdEMsbTA4QkFpbEJrRjs0RkRoa0JyRSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCO3VKQVN4QixNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFFRSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW5lQXNzb2NpYXRpb24gfSBmcm9tICcuL2NsYXNzZXMvbGluZS1hc3NvY2lhdGlvbic7XHJcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uLWludGVyZmFjZSc7XHJcbmltcG9ydCB7IERldmljZSB9IGZyb20gJy4vY2xhc3Nlcy9kZXZpY2UnO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGNwQXBpU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZGNwLWFwaS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXVzZXItbWFuYWdlLXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlLXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdXNlci1tYW5hZ2Utd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGRhdGFQZW5kaW5nITogYm9vbGVhbjtcclxuICBwdWJsaWMgc2F2ZVBlbmRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3REZXZpY2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZ29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBJbnB1dCgpIHRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhvc3QhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGNwSG9zdCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzaXRlSWQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgdXNlcklkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldmljZU5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNMZGFwITogYm9vbGVhbjtcclxuXHJcbiAgYXV0aExldmVsT3B0aW9uczogc3RyaW5nW10gPSBbXHJcbiAgICAnSW1tZWRpYXRlJyxcclxuICAgICdEZWZhdWx0JyxcclxuICAgICdSb3V0aW5lJyxcclxuICAgICdQcmlvcml0eScsXHJcbiAgICAnRmxhc2gnLFxyXG4gICAgJ0V4ZWN1dGl2ZSBPdmVycmlkZScsXHJcbiAgICAnRmxhc2ggT3ZlcnJpZGUnLFxyXG4gIF07XHJcblxyXG4gIGdldCBmb3JtKCk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZT8udXNlcj8uZm9ybTtcclxuICB9XHJcblxyXG4gIGdldCB1c2VyKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZS51c2VyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy51c2VyPy5maXJzdE5hbWUgfHwgJyd9ICR7dGhpcy51c2VyPy5sYXN0TmFtZSB8fCAnJ31gO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVBc3NvY2lhdGlvbigpOiBMaW5lQXNzb2NpYXRpb24gfCBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2V8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VyU2VydmljZT8udXNlcj8uZGV2aWNlcyAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzWzBdICYmIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/LmRldmljZXNbMF0ubGluZUFzc29jaWF0aW9ucyAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5kZXZpY2VzWzBdLmxpbmVBc3NvY2lhdGlvbnNbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgcHJpbWFyeUxpbmVSZWZlcmVuY2UoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5wcmltYXJ5TGluZVJlZmVyZW5jZSAmJiB0aGlzLnVzZXJTZXJ2aWNlPy51c2VyPy5wcmltYXJ5TGluZVJlZmVyZW5jZT8uZGlyZWN0b3J5TnVtYmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdlYmV4VVVJRCgpIHtcclxuICAgIGNvbnN0IHV1aWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2ViZXhVVUlEJyk7XHJcbiAgICByZXR1cm4gdXVpZCA9PT0gJ251bGwnID8gbnVsbCA6IHV1aWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYXRpb24gPSBpbmplY3QoTG9jYXRpb24pO1xyXG4gIHB1YmxpYyByZWFkb25seSBPTl9QUkVNX0lEID0gMjU0MjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkY3BBcGlTZXJ2aWNlOiBEY3BBcGlTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5vblVzZXJMaW5lU2F2ZWQkXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UucGVyc2lzdENhY2hlQ2hhbmdlcygpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS5kYXRhUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVybElmVXNlcklkQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KFwic2F2ZWRcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSwgKCkgPT4gdGhpcy51c2VyU2VydmljZS5kYXRhUGVuZGluZyA9IGZhbHNlKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnRva2VuID0gdGhpcy50b2tlbjtcclxuICAgIHRoaXMuYXBpU2VydmljZS5hcGlVcmwgPSB0aGlzLmhvc3Q7XHJcbiAgICB0aGlzLmRjcEFwaVNlcnZpY2UudG9rZW4gPSB0aGlzLnRva2VuO1xyXG4gICAgdGhpcy5kY3BBcGlTZXJ2aWNlLmFwaVVybCA9IHRoaXMuZGNwSG9zdDtcclxuICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgb25EZXZpY2VTZWxlY3QoZGV2aWNlOiBEZXZpY2UpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0RGV2aWNlLmVtaXQoZGV2aWNlLm5hbWUpO1xyXG4gIH1cclxuXHJcbiAgb25Hb0JhY2soKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvQmFjay5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvbkV4dGVuc2lvbkNoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UubmV4dChcInN0YXJ0IGV4dGVuc2lvbiBjaGFuZ2UuLlwiKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlRmllbGQodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZS5uZXh0KFwic3RhcnQgY2hhbmdlLi5cIik7XHJcblxyXG4gICAgaWYgKCF0b2tlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAodGhpcy51c2VyU2VydmljZS51c2VyIGFzIGFueSlbdG9rZW5dID0gdGhpcy5mb3JtPy5nZXQodG9rZW4pPy52YWx1ZTtcclxuXHJcbiAgICBpZiAodG9rZW4gPT09ICdtaWRkbGVOYW1lJykge1xyXG4gICAgICB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignWyBhLXpBLVotXSsnKV0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRva2VuID09PSAndGVsZXBob25lTnVtYmVyJyB8fCB0b2tlbiA9PT0gJ21vYmlsZU51bWJlcicgfHwgdG9rZW4gPT09ICdwYWdlck51bWJlcicgfHwgdG9rZW4gPT09ICdob21lTnVtYmVyJykge1xyXG4gICAgICB0aGlzLmZvcm0/LmdldCh0b2tlbik/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucGF0dGVybignWyAwLTktK10rJyldKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybT8uZ2V0KHRva2VuKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy52YWxpZGF0ZVVzZXJJZCgpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZUNoYW5nZXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1NhdmluZ0Rpc2FibGVkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2F2ZVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgY3VycmVudExpbmVBc3NvY2lhdGlvbiA9IHRoaXMudXNlcj8uZGV2aWNlcz8uWzBdPy5saW5lQXNzb2NpYXRpb25zPy5bMF07XHJcbiAgICBjb25zdCBvcmlnaW5MaW5lQXNzb2NpYXRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmRldmljZXM/LlswXT8ubGluZUFzc29jaWF0aW9ucz8uWzBdO1xyXG4gICAgY29uc3QgY3VycmVudE1hcHBlZERpZCA9IHRoaXMudXNlcj8ubGluZXM/LlswXT8ubWFwcGVkRGlkcz8uWzBdIHx8ICcnO1xyXG4gICAgY29uc3Qgb3JpZ2luTWFwcGVkRGlkID0gdGhpcy51c2VyU2VydmljZS5vcmlnaW5Vc2VyPy5saW5lcz8uWzBdPy5tYXBwZWREaWRzPy5bMF0gfHwgJyc7XHJcbiAgICBjb25zdCBkaWRQYXR0ZXJuRGVzY3JpcHRpb24gPSB0aGlzLnVzZXJTZXJ2aWNlLm9yaWdpblVzZXI/LmxpbmVzPy5bMF0/LmRpZFBhdHRlcm5zPy5bMF0/LmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gICAgY29uc3QgbGluZUFzc29jaWF0aW9uQ2hhbmdlZCA9IGN1cnJlbnRMaW5lQXNzb2NpYXRpb24gJiYgb3JpZ2luTGluZUFzc29jaWF0aW9uICYmICFjdXJyZW50TGluZUFzc29jaWF0aW9uLmVxdWFscyhvcmlnaW5MaW5lQXNzb2NpYXRpb24pO1xyXG4gICAgY29uc3QgbWFwcGVkRGlkQ2hhbmdlZCA9IGN1cnJlbnRNYXBwZWREaWQgIT09IG9yaWdpbk1hcHBlZERpZDtcclxuXHJcbiAgICBjb25zdCB0cmFuc2xhdGlvblBhdHRlcm5DaGFuZ2VkID0gKGxpbmVBc3NvY2lhdGlvbkNoYW5nZWQgfHwgbWFwcGVkRGlkQ2hhbmdlZCkgJiYgY3VycmVudExpbmVBc3NvY2lhdGlvbiAmJiBvcmlnaW5MaW5lQXNzb2NpYXRpb247XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNsYXRpb25QYXR0ZXJuQ2hhbmdlZFxyXG4gICAgICA/IHRoaXMudXNlclNlcnZpY2UuZWRpdFRyYW5zbGF0aW9uUGF0dGVybihcclxuICAgICAgICAgIHRoaXMudXNlci5jdWNtSWQsXHJcbiAgICAgICAgICBvcmlnaW5NYXBwZWREaWQsXHJcbiAgICAgICAgICBjdXJyZW50TWFwcGVkRGlkLFxyXG4gICAgICAgICAgY3VycmVudExpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyLFxyXG4gICAgICAgICAgb3JpZ2luTGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUsXHJcbiAgICAgICAgICBkaWRQYXR0ZXJuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgKS5waXBlKHN3aXRjaE1hcCgoKSA9PiB0aGlzLnVzZXJTZXJ2aWNlLnBlcnNpc3RDYWNoZUNoYW5nZXMoKSkpXHJcbiAgICAgIDogdGhpcy51c2VyU2VydmljZS5wZXJzaXN0Q2FjaGVDaGFuZ2VzKCk7XHJcblxyXG4gICAgcmVxdWVzdC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zYXZlUGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuY29tbWl0U2F2ZWRDaGFuZ2VzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVVcmxJZlVzZXJJZENoYW5nZWQoKTtcclxuICAgICAgICB0aGlzLm9uU2F2ZS5uZXh0KFwidXNlciBoYXMgYmVlbiBzYXZlZCBzdWNjZXNzZnVsbHkuLlwiKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHRoaXMuc2F2ZVBlbmRpbmcgPSBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuZGlzY2FyZENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGhhc1Vuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlclNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUVkaXRNb2RlKCkge1xyXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyLnRvZ2dsZUVkaXRNb2RlKCk7XHJcbiAgfVxyXG5cclxuICBpc1NhdmluZ0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2F2ZVBlbmRpbmdcclxuICAgICAgfHwgIXRoaXMudXNlclNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMoKVxyXG4gICAgICB8fCB0aGlzLnVzZXJTZXJ2aWNlLmhhc0V4aXN0ZWRVc2VySWRcclxuICAgICAgfHwgISF0aGlzLmZvcm0/LmludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaWVsZCh0b2tlbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlLm5leHQoXCJzdGFydCBjaGFuZ2UuLlwiKTtcclxuICAgIGNvbnN0IGZvcm1GaWVsZCA9IHRoaXMudXNlcj8uZm9ybT8uZ2V0KHRva2VuKTtcclxuICAgIGlmICh0b2tlbiAhPT0gJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLnVzZXJbdG9rZW5dID0gZm9ybUZpZWxkPy52YWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0b2tlbiA9PT0gJ2RpZ2VzdENyZWRlbnRpYWxzJyB8fCB0b2tlbiA9PT0gJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpIHtcclxuICAgICAgdGhpcy5kaWdlc3RDcmVkZW50aWFsc0hhbmRsZXIodG9rZW4sIGZvcm1GaWVsZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpZ2VzdENyZWRlbnRpYWxzSGFuZGxlcih0b2tlbjogc3RyaW5nLCBmaWVsZDogYW55KSB7XHJcbiAgICBjb25zdCBmaWVsZE5hbWVUb0NvbXBhcmUgPSB0b2tlbiA9PT0gJ2RpZ2VzdENyZWRlbnRpYWxzJyA/ICdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnIDogJ2RpZ2VzdENyZWRlbnRpYWxzJztcclxuICAgIGNvbnN0IGZpZWxkVG9Db21wYXJlID0gdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KGZpZWxkTmFtZVRvQ29tcGFyZSk7XHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS51c2VyPy5mb3JtPy5nZXQodG9rZW4pKSB7XHJcbiAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlcj8uZm9ybT8uZ2V0KHRva2VuKT8uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmZvcm0/LmdldChmaWVsZE5hbWVUb0NvbXBhcmUpPy5zZXRFcnJvcnMobnVsbCk7XHJcblxyXG4gICAgICAvKiBpZiAoIWZpZWxkLnZhbHVlICYmICFmaWVsZFRvQ29tcGFyZS52YWx1ZSkge1xyXG4gICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXI/LmRpZ2VzdENyZWRlbnRpYWxzID0gbnVsbDtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgfVxyXG5cclxuICAgICAgIGlmICghZmllbGQudmFsdWUgJiYgZmllbGRUb0NvbXBhcmUudmFsdWUgfHwgIWZpZWxkVG9Db21wYXJlLnZhbHVlICYmIGZpZWxkLnZhbHVlKSB7XHJcbiAgICAgICAgIGNvbnN0IHJlcXVpcmVkRmllbGROYW1lID0gZmllbGQudmFsdWUgPyBmaWVsZE5hbWVUb0NvbXBhcmUgOiB0b2tlbjtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KHJlcXVpcmVkRmllbGROYW1lKS5zZXRFcnJvcnMoe3JlcXVpcmVkOiB0cnVlfSk7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgIH1cclxuICAgICAgIGlmIChmaWVsZC52YWx1ZSAmJiBmaWVsZFRvQ29tcGFyZS52YWx1ZSAmJiBmaWVsZC52YWx1ZSAhPT0gZmllbGRUb0NvbXBhcmUudmFsdWUpIHtcclxuICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLmZvcm0uZ2V0KHRva2VuKS5zZXRFcnJvcnMoe21pc21hdGNoOiB0cnVlfSk7XHJcbiAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXNlci5mb3JtLmdldChmaWVsZE5hbWVUb0NvbXBhcmUpLnNldEVycm9ycyh7bWlzbWF0Y2g6IHRydWV9KTtcclxuICAgICAgIH0qL1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YSgpIHtcclxuICAgIHRoaXMuZGF0YVBlbmRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IHJlcXVlc3Q7XHJcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaXNXZWJleCcpID09PSAndHJ1ZScpIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hXZWJleFVzZXJUb2tlbihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VzdG9tZXJJZCcpISwgdGhpcy51c2VySWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVxdWVzdCA9IHRoaXMudXNlclNlcnZpY2UuZmV0Y2hVc2VyVG9rZW4odGhpcy5zaXRlSWQsIHRoaXMudXNlcklkLCB0aGlzLmlzTGRhcCk7XHJcbiAgICB9XHJcbiAgICByZXF1ZXN0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgY29tcGxldGU6ICh2OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YVBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC90dWtpL21pZ3JhdGUvdXNlcnNgXSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldENvb2tpZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGRheXM6IG51bWJlcikge1xyXG4gICAgdmFyIGV4cGlyZXMgPSBcIlwiO1xyXG4gICAgaWYgKGRheXMpIHtcclxuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTtcclxuICAgICAgZXhwaXJlcyA9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuY29va2llID0gbmFtZSArIFwiPVwiICsgKHZhbHVlIHx8IFwiXCIpICsgZXhwaXJlcyArIFwiOyBwYXRoPS9cIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVXJsSWZVc2VySWRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbmV3VXNlcklkID0gdGhpcy51c2VyPy5uZXdVc2VyaWQgfHwgdGhpcy5mb3JtPy5nZXQoJ3VzZXJpZCcpPy52YWx1ZTtcclxuICAgIGlmICghbmV3VXNlcklkIHx8IG5ld1VzZXJJZCA9PT0gdGhpcy51c2VySWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IFtwYXRoLCBxdWVyeSA9ICcnXSA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpO1xyXG4gICAgY29uc3QgdXJsU2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pO1xyXG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gdXJsU2VnbWVudHMuZmluZEluZGV4KFxyXG4gICAgICBzZWdtZW50ID0+IGRlY29kZVVSSUNvbXBvbmVudChzZWdtZW50KSA9PT0gdGhpcy51c2VySWRcclxuICAgICk7XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdXJsU2VnbWVudHNbY3VycmVudEluZGV4XSA9IG5ld1VzZXJJZDtcclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGAvJHt1cmxTZWdtZW50cy5qb2luKCcvJyl9JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogJyd9YCk7XHJcbiAgICB0aGlzLnVzZXJJZCA9IG5ld1VzZXJJZDtcclxuICAgIHRoaXMudXNlclNlcnZpY2UudXNlcklkID0gbmV3VXNlcklkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB2YWxpZGF0ZVVzZXJJZCgpIHtcclxuICAgIGNvbnN0IGlkQ29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ3VzZXJpZCcpO1xyXG4gICAgaWYgKGlkQ29udHJvbD8udmFsdWUgIT09ICcnICYmIGlkQ29udHJvbD8udmFsdWUgIT09IHRoaXMudXNlclNlcnZpY2Uub3JpZ2luVXNlci51c2VyaWQpIHtcclxuICAgICAgdGhpcy51c2VyU2VydmljZS5mZXRjaFVzZXJCeUlkKGlkQ29udHJvbD8udmFsdWUpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZENvbnRyb2w/LnNldEVycm9ycyh7ZXhpc3Q6IHRydWV9KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybT8uZ2V0KCd1c2VyaWQnKT8uaGFzRXJyb3IoJ2V4aXN0JykpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmhhc0V4aXN0ZWRVc2VySWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UuaGFzRXhpc3RlZFVzZXJJZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLnVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoZXJyb3Iuc3RhdHVzICE9PSA0MDQpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uud2FybmluZyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdBUFBfVVNFUl9NU0cuQ0hFQ0tfVVNFUl9JRF9GQUlMRUQnKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyU2VydmljZS51c2VyLm5ld1VzZXJpZCA9IHRoaXMuZm9ybT8uZ2V0KCd1c2VyaWQnKT8udmFsdWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gZGVsZXRlIHRoaXMudXNlclNlcnZpY2U/LnVzZXI/Lm5ld1VzZXJpZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmVDaGFuZ2VzKClcclxuICB9XHJcblxyXG59XHJcbiIsIjxhcHAtbG9hZGVyICpuZ0lmPVwiZGF0YVBlbmRpbmcgfHwgc2F2ZVBlbmRpbmcgfHwgdXNlclNlcnZpY2UuZGF0YVBlbmRpbmdcIj48L2FwcC1sb2FkZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiIWRhdGFQZW5kaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cImdvLWJhY2stYm94XCIgKGNsaWNrKT1cIm9uR29CYWNrKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJnby1iYWNrLWJveC1jb250YWluZXJcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhcHAtaWNvbiBpY29uLXdlYmV4LWxlZnQtYXJyb3dcIj48L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZ28tYmFjay10aXRsZVwiPlVzZXJzPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxhcHAtdXNlci1pbmZvXHJcbiAgICAqbmdJZj1cInVzZXJcIlxyXG4gICAgW25hbWVdPVwidXNlck5hbWVcIlxyXG4gICAgW2VtYWlsXT1cInVzZXIuZW1haWxcIlxyXG4gICAgW2FjdGl2ZV09XCJ0cnVlXCJcclxuICAgIFtwb3NpdGlvbl09XCJ1c2VyLnNpdGVOYW1lID8gJ01lbWJlciBvZiAnICsgdXNlci5zaXRlTmFtZSA6ICcnXCJcclxuICAgIFtjdWNtaWRdPVwidXNlci5jdWNtSWRcIj5cclxuICA8L2FwcC11c2VyLWluZm8+XHJcblxyXG4gIDwhLS0gU3VtbWFyeSBpc24ndCBhdmFpbGFibGUgZm9yIFdlYmV4IHVzZXJzLCBzbyB0aGV5IHN0YXJ0IG9uIHRoZSBQcm9maWxlIHRhYiAtLT5cclxuICA8bWF0LXRhYi1ncm91cCBkaXNhYmxlUmlwcGxlIGNsYXNzPVwidGFicy1jb250YWluZXJcIiBbc2VsZWN0ZWRJbmRleF09XCJ3ZWJleFVVSUQgPyAxIDogMFwiPlxyXG4gICAgPG1hdC10YWIgbGFiZWw9XCJTdW1tYXJ5XCIgW2Rpc2FibGVkXT1cIiEhd2ViZXhVVUlEXCI+XHJcbiAgICAgIDxhcHAtdXNlci1zdW1tYXJ5ICpuZ0lmPVwidXNlclwiIFt1c2VyXT1cInVzZXJcIj48L2FwcC11c2VyLXN1bW1hcnk+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIlByb2ZpbGVcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndlYmV4VVVJRCA/IHdlYmV4VXNlclByb2ZpbGUgOiB1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj5cclxuICAgIDwhLS0gPG1hdC10YWIgbGFiZWw9XCJHZW5lcmFsXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiTWVldGluZ3NcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInVzZXJQcm9maWxlXCI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtdGFiPiAtLT5cclxuICAgIDxtYXQtdGFiIGxhYmVsPVwiQ2FsbGluZ1wiIFtkaXNhYmxlZF09XCIhcHJpbWFyeUxpbmVSZWZlcmVuY2VcIj5cclxuICAgICAgPGFwcC11c2VyLWNhbGxpbmdcclxuICAgICAgICAqbmdJZj1cInByaW1hcnlMaW5lUmVmZXJlbmNlXCJcclxuICAgICAgICBbc2l0ZUlkXT1cInNpdGVJZFwiXHJcbiAgICAgICAgKG9uRXh0ZW5zaW9uQ2hhbmdlKT1cIm9uRXh0ZW5zaW9uQ2hhbmdlKClcIlxyXG4gICAgICAgIFtwcmltYXJ5TGluZURpcmVjdG9yeU51bWJlcl09XCJwcmltYXJ5TGluZVJlZmVyZW5jZVwiPlxyXG4gICAgICA8L2FwcC11c2VyLWNhbGxpbmc+XHJcbiAgICA8L21hdC10YWI+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiTWVzc2FnaW5nXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8IS0tIDxtYXQtdGFiIGxhYmVsPVwiSHlicmlkIFNlcnZpY2VzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkRldmljZXNcIiBbZGlzYWJsZWRdPVwiIXVzZXI/LmRldmljZXMgfHwgIXVzZXI/LmRldmljZXMubGVuZ3RoXCI+XHJcbiAgICAgIDxhcHAtZGV2aWNlLWxpc3RcclxuICAgICAgICBbZGV2aWNlc109XCJ1c2VyPy5kZXZpY2VzXCJcclxuICAgICAgICAob25EZXZpY2VTZWxlY3QpPVwib25EZXZpY2VTZWxlY3QoJGV2ZW50KVwiPlxyXG4gICAgICA8L2FwcC1kZXZpY2UtbGlzdD5cclxuICAgIDwvbWF0LXRhYj5cclxuICAgIDwhLS0gPG1hdC10YWIgbGFiZWw9XCJWaWRjYXN0XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ1c2VyUHJvZmlsZVwiPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LXRhYj4gLS0+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkxpbmVzXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L21hdC10YWI+XHJcbiAgICA8bWF0LXRhYiBsYWJlbD1cIkZlYXR1cmVzXCIgW2Rpc2FibGVkXT1cInRydWVcIj48L21hdC10YWI+XHJcbiAgPC9tYXQtdGFiLWdyb3VwPlxyXG5cclxuICA8IS0tIGtlZXBzIHRoZSBib3R0b20gb2YgdGhlIGNvbnRlbnQgcmVhY2hhYmxlIGFib3ZlIHRoZSBmaXhlZCBwYW5lbCAtLT5cclxuICA8IS0tIDxkaXYgY2xhc3M9XCJhY3Rpb25zLXBhbmVsLXNwYWNlclwiIFtjbGFzcy5hY3Rpb25zLXBhbmVsLXNwYWNlci0tdmlzaWJsZV09XCJoYXNVbnNhdmVkQ2hhbmdlcygpXCI+PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImFjdGlvbnMtcGFuZWxcIlxyXG4gICAgICAgW2NsYXNzLmFjdGlvbnMtcGFuZWwtLXZpc2libGVdPVwiaGFzVW5zYXZlZENoYW5nZXMoKVwiXHJcbiAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhaGFzVW5zYXZlZENoYW5nZXMoKVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbnMtcGFuZWxfX2FjdGlvbnNcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tb3V0bGluZVwiIFtkaXNhYmxlZF09XCJzYXZlUGVuZGluZ1wiIChjbGljayk9XCJjYW5jZWxDaGFuZ2VzKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tZmlsbGVkXCIgW2Rpc2FibGVkXT1cImlzU2F2aW5nRGlzYWJsZWQoKVwiIChjbGljayk9XCJzYXZlQ2hhbmdlcygpXCI+U2F2ZTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+IC0tPiAgXHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjdXNlclByb2ZpbGU+XHJcbiAgICA8Zm9ybSAqbmdJZj1cInVzZXIgJiYgZm9ybVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1ib3hlcy1jb250YWluZXJcIj5cclxuXHJcbiAgICAgICAgPCEtLSAgICBVU0VSIElORk8gQk9YLS0+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlVzZXIgRGV0YWlsczwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlciBJZDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiVXNlciBJZFwiIGZvcm1Db250cm9sTmFtZT1cInVzZXJpZFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCd1c2VyaWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ3VzZXJpZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgndXNlcmlkJyk/Lmhhc0Vycm9yKCdleGlzdCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIFVzZXIgSUQgYWxyZWFkeSBleGlzdHNcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlByaW1hcnkgZW1haWw8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIlByaW1hcnkgZW1haWxcIiBmb3JtQ29udHJvbE5hbWU9XCJlbWFpbFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdlbWFpbCcpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgnZW1haWwnKT8udG91Y2hlZCAmJiBmb3JtLmdldCgnZW1haWwnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIHZhbGlkIGVtYWlsXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5GaXNydCBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJGaXNydCBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmlyc3ROYW1lXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2ZpcnN0TmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxhc3QgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiTGFzdCBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibGFzdE5hbWVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbGFzdE5hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2xhc3ROYW1lJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2xhc3ROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5HZW5lcmFsIFVzZXIgSW5mbzwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGVwYXJ0bWVudDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRGVwYXJ0bWVudFwiIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkZXBhcnRtZW50JylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1hbmFnZXIgdXNlciBJRDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiTWFuYWdlciB1c2VyIElEXCIgZm9ybUNvbnRyb2xOYW1lPVwibWFuYWdlclwiIHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21hbmFnZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QXNzb2NpYXRlZCBQQzwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiQXNzb2NpYXRlZCBQQ1wiIGZvcm1Db250cm9sTmFtZT1cImFzc29jaWF0ZWRQY1wiIHR5cGU9XCJ0ZXh0XCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2Fzc29jaWF0ZWRQYycpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImRpZ2VzdENyZWRlbnRpYWxzXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaWdlc3RDcmVkZW50aWFscycpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIHByb2ZpbGU8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLWxhenktbG9hZGluZy1zZWxlY3RcclxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcclxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlclByb2ZpbGUnXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtXT1cInVzZXIuZm9ybVwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlRmllbGQpPVwiY2hhbmdlRmllbGQoJ3VzZXJQcm9maWxlJylcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXHJcbiAgICAgICAgICAgICAgPjwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Nb2JpbGUgdm9pY2UgYWNjZXNzPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3MnKVwiXHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VyLmVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+VXNlcmxvY2FsZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid1c2VyTG9jYWxlJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZUZpZWxkKT1cImNoYW5nZUZpZWxkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlckxvY2FsZXMnXCJcclxuICAgICAgICAgICAgICAgIFtkZWZhdWx0XT1cIntrZXk6ICcnLCB2YWx1ZTogJ05vbmUnLCBkaXNhYmxlZDogZmFsc2V9XCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtbGF6eS1sb2FkaW5nLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+Q29uZmlybSBkaWdlc3QgY3JlZGVudGlhbHM8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkNvbmZpcm0gZGlnZXN0IGNyZWRlbnRpYWxzXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29uZmlybURpZ2VzdENyZWRlbnRpYWxzXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdjb25maXJtRGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgPCEtLSAgICBVU0VSIElORk8gQk9YLS0+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3QgSW5mb3JtYXRpb248L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1pZGRsZSBOYW1lPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIk1pZGRsZSBOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibWlkZGxlTmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtaWRkbGVOYW1lJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlRlbGVwaG9uZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJUZWxlcGhvbmUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVsZXBob25lTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndGVsZXBob25lTnVtYmVyJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJNb2JpbGUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwibW9iaWxlTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21vYmlsZU51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXJlY3RvcnkgVVJJPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIkRpcmVjdG9yeSBVUklcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXJlY3RvcnlVcmlcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlyZWN0b3J5VXJpJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPlRpdGxlPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndGl0bGUnKVwiPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+SG9tZSBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJIb21lIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cImhvbWVOdW1iZXJcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnaG9tZU51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5QYWdlciBOdW1iZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJQYWdlciBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJwYWdlck51bWJlclwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdwYWdlck51bWJlcicpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRpc3BsYXkgTmFtZTwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJEaXNwbGF5IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXNwbGF5TmFtZScpXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+RU0gQ29uZmlndXJhdGlvbnM8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkJMRiBQcmVzZW5jZSBHcm91cDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIidwcmVzZW5jZUdyb3VwJ1wiXHJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZUZpZWxkKT1cImNoYW5nZUZpZWxkKCdwcmVzZW5jZUdyb3VwJylcIlxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXHJcbiAgICAgICAgICAgICAgPjwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5TdWJzY3JpYmUgQ1NTPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJTdWJzY3JpYmUgQ1NTXCIgZm9ybUNvbnRyb2xOYW1lPVwic3Vic2NyaWJlQ3NzXCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnc3Vic2NyaWJlQ3NzJylcIj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkFsbG93IENvbnRyb2wgb2YgRGV2aWNlIGZyb20gQ1RJPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWxsb3dEZXZpY2VDb250cm9sRnJvbUN0aVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnYWxsb3dEZXZpY2VDb250cm9sRnJvbUN0aScpXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5FbmFibGUgRXh0ZW5zaW9uIE1vYmlsaXR5IENyb3NzIENsdXN0ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVDcm9zc0NsdXN0ZXJFbVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnZW5hYmxlQ3Jvc3NDbHVzdGVyRW0nKVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2FyZCB2ZXJ0aWNhbC1jYXJkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5NdWx0aWxldmVsIFByZWNlZGVuY2UgYW5kIFByZWVtcHRpb24gQXV0aG9yaXphdGlvbjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TUxQUCBVc2VyIElkZW50aWZpY2F0aW9uIE51bWJlcjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxyXG4gICAgICAgICAgICAgICAgW2NvbnRyb2xOYW1lXT1cIid1c2VyUHJvZmlsZSdcIlxyXG4gICAgICAgICAgICAgICAgW2Zvcm1dPVwidXNlci5mb3JtXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgndXNlclByb2ZpbGUnKVwiXHJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc1Rva2VuXT1cIid1c2VyUHJvZmlsZXMnXCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtbGF6eS1sb2FkaW5nLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtZGl2aWRlciAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1MUFAgUHJlY2VkZW5jZSBBdXRob3JpemF0aW9uIExldmVsPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJzaW1wbGUtc2VsZWN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJtbHBwUHJlY2VkZW5jZVBhdHRlcm5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJjaGFuZ2VGaWVsZCgnbWxwcFByZWNlZGVuY2VQYXR0ZXJuJylcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRoTGV2ZWxPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7b3B0aW9ufX1cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bWF0LWRpdmlkZXIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkVuYWJsZSBNTFBQPC9kaXY+XHJcbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcclxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW5hYmxlTW9iaWxlVm9pY2VBY2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRmllbGQoJ2VuYWJsZU1vYmlsZVZvaWNlQWNjZXNzJylcIlxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VyLmVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPlNlcnZpY2UgU2V0dGluZ3M8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib21lIENsdXN0ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz1cImN1c3RvbS10b2dnbGVcIlxyXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJob21lQ2x1c3RlclwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VGaWVsZCgnaG9tZUNsdXN0ZXInKVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3dlYmV4VXNlclByb2ZpbGU+XG4gICAgPGZvcm0gKm5nSWY9XCJ1c2VyICYmIGZvcm1cIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJveGVzLWNvbnRhaW5lclwiPlxuXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5Vc2VyIERldGFpbHM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIElkPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIlVzZXIgSWRcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyaWRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndXNlcmlkJylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgndXNlcmlkJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWVycm9yXCIgKm5nSWY9XCJmb3JtLmdldCgndXNlcmlkJyk/Lmhhc0Vycm9yKCdleGlzdCcpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgVXNlciBJRCBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+UHJpbWFyeSBlbWFpbDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJQcmltYXJ5IGVtYWlsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZW1haWwnKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZXJyb3JcIiAqbmdJZj1cImZvcm0uZ2V0KCdlbWFpbCcpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdlbWFpbCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIFRoaXMgZmllbGQgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2VtYWlsJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgdmFsaWQgZW1haWxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkZpc3J0IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRmlzcnQgTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cImZpcnN0TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdmaXJzdE5hbWUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3BcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkxhc3QgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJMYXN0IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJsYXN0TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdsYXN0TmFtZScpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1lcnJvclwiICpuZ0lmPVwiZm9ybS5nZXQoJ2xhc3ROYW1lJyk/LnRvdWNoZWQgJiYgZm9ybS5nZXQoJ2xhc3ROYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgVGhpcyBmaWVsZCBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gICAgVVNFUiBJTkZPIEJPWC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNhcmQgdmVydGljYWwtY2FyZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5HZW5lcmFsIFVzZXIgSW5mbzwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPkRlcGFydG1lbnQ8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHBsYWNlaG9sZGVyPVwiRGVwYXJ0bWVudFwiIGZvcm1Db250cm9sTmFtZT1cImRlcGFydG1lbnRcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkZXBhcnRtZW50JylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+TWFuYWdlciB1c2VyIElEPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIk1hbmFnZXIgdXNlciBJRFwiIGZvcm1Db250cm9sTmFtZT1cIm1hbmFnZXJcIiB0eXBlPVwidGV4dFwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdtYW5hZ2VyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+QXNzb2NpYXRlZCBQQzwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJBc3NvY2lhdGVkIFBDXCIgZm9ybUNvbnRyb2xOYW1lPVwiYXNzb2NpYXRlZFBjXCIgdHlwZT1cInRleHRcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnYXNzb2NpYXRlZFBjJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlnZXN0IGNyZWRlbnRpYWxzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiBwbGFjZWhvbGRlcj1cIkRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImRpZ2VzdENyZWRlbnRpYWxzXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VyIHByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICAgICAgPGFwcC1sYXp5LWxvYWRpbmctc2VsZWN0XG4gICAgICAgICAgICAgICAgW3NpdGVJZF09XCJzaXRlSWRcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sTmFtZV09XCIndXNlclByb2ZpbGUnXCJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgndXNlclByb2ZpbGUnKVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNUb2tlbl09XCIndXNlclByb2ZpbGVzJ1wiXG4gICAgICAgICAgICAgID48L2FwcC1sYXp5LWxvYWRpbmctc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSB2b2ljZSBhY2Nlc3M8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9XCJjdXN0b20tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbmFibGVNb2JpbGVWb2ljZUFjY2Vzc1wiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZUZpZWxkKCdlbmFibGVNb2JpbGVWb2ljZUFjY2VzcycpXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VyLmVuYWJsZU1vYmlsZVZvaWNlQWNjZXNzXCI+XG4gICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Vc2VybG9jYWxlPC9kaXY+XG4gICAgICAgICAgICAgIDxhcHAtbGF6eS1sb2FkaW5nLXNlbGVjdFxuICAgICAgICAgICAgICAgIFtzaXRlSWRdPVwic2l0ZUlkXCJcbiAgICAgICAgICAgICAgICBbY29udHJvbE5hbWVdPVwiJ3VzZXJMb2NhbGUnXCJcbiAgICAgICAgICAgICAgICBbZm9ybV09XCJ1c2VyLmZvcm1cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2VGaWVsZCk9XCJjaGFuZ2VGaWVsZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc1Rva2VuXT1cIid1c2VyTG9jYWxlcydcIlxuICAgICAgICAgICAgICAgIFtkZWZhdWx0XT1cIntrZXk6ICcnLCB2YWx1ZTogJ05vbmUnLCBkaXNhYmxlZDogZmFsc2V9XCI+XG4gICAgICAgICAgICAgIDwvYXBwLWxhenktbG9hZGluZy1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Db25maXJtIGRpZ2VzdCBjcmVkZW50aWFsczwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgcGxhY2Vob2xkZXI9XCJDb25maXJtIGRpZ2VzdCBjcmVkZW50aWFsc1wiIGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1EaWdlc3RDcmVkZW50aWFsc1wiIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2NvbmZpcm1EaWdlc3RDcmVkZW50aWFscycpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tICAgIFVTRVIgSU5GTyBCT1gtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjYXJkIHZlcnRpY2FsLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdCBJbmZvcm1hdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1pZGRsZSBOYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiTWlkZGxlIE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJtaWRkbGVOYW1lXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ21pZGRsZU5hbWUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5UZWxlcGhvbmUgTnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwibnVtYmVyXCIgcGxhY2Vob2xkZXI9XCJUZWxlcGhvbmUgTnVtYmVyXCIgZm9ybUNvbnRyb2xOYW1lPVwidGVsZXBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3RlbGVwaG9uZU51bWJlcicpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXIgaW5wdXQtaG9sZGVyLXRvcC1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fbmFtZVwiPk1vYmlsZSBOdW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIk1vYmlsZSBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVOdW1iZXJcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnbW9iaWxlTnVtYmVyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wLWJvdHRvbVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19uYW1lXCI+RGlnZXN0IGNyZWRlbnRpYWxzPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRGlnZXN0IGNyZWRlbnRpYWxzXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGlnZXN0Q3JlZGVudGlhbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgnZGlnZXN0Q3JlZGVudGlhbHMnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXJlY3RvcnkgVVJJPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX2ZpZWxkXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwicGxhaW4taW5wdXRcIiB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRGlyZWN0b3J5IFVSSVwiIGZvcm1Db250cm9sTmFtZT1cImRpcmVjdG9yeVVyaVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXJlY3RvcnlVcmknKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5UaXRsZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlRpdGxlXCIgZm9ybUNvbnRyb2xOYW1lPVwidGl0bGVcIiAoaW5wdXQpPVwib25DaGFuZ2VGaWVsZCgndGl0bGUnKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5Ib21lIE51bWJlcjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyX19maWVsZFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBsYWluLWlucHV0XCIgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiSG9tZSBOdW1iZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJob21lTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ2hvbWVOdW1iZXInKVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtaG9sZGVyIGlucHV0LWhvbGRlci10b3AtYm90dG9tXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5QYWdlciBOdW1iZXI8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIlBhZ2VyIE51bWJlclwiIGZvcm1Db250cm9sTmFtZT1cInBhZ2VyTnVtYmVyXCIgKGlucHV0KT1cIm9uQ2hhbmdlRmllbGQoJ3BhZ2VyTnVtYmVyJylcIj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlciBpbnB1dC1ob2xkZXItdG9wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ob2xkZXJfX25hbWVcIj5EaXNwbGF5IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWhvbGRlcl9fZmllbGRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJwbGFpbi1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJEaXNwbGF5IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJkaXNwbGF5TmFtZVwiIChpbnB1dCk9XCJvbkNoYW5nZUZpZWxkKCdkaXNwbGF5TmFtZScpXCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XHJcblxyXG48IS0tIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cInNhdmUoKVwiID5TYXZlPC9idXR0b24+IC0tPiJdfQ==
|