vcomply-workflow-engine 7.0.3 → 7.0.5
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/esm2022/lib/confirmation-alert/confirmation-alert.component.mjs +3 -3
- package/esm2022/lib/selectAll/selectAll.component.mjs +32 -0
- package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +68 -36
- package/esm2022/lib/workflow-program/create-program-ui/user-group-list/user-group-list.component.mjs +3 -3
- package/fesm2022/vcomply-workflow-engine.mjs +70 -12
- package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/selectAll/selectAll.component.d.ts +15 -0
- package/lib/workflow-policy/workflow-policy.component.d.ts +4 -1
- package/package.json +1 -1
|
@@ -6,6 +6,8 @@ import { CONSTANTS } from '../link-related-policies/constants';
|
|
|
6
6
|
import { LINKS } from '../workflow/shared/constants/cdn-link.constant';
|
|
7
7
|
import { ASSETS } from '../constants/assets.constants';
|
|
8
8
|
import { API } from '../constants/api.constants';
|
|
9
|
+
// import { ConfirmationAlertComponent } from '../confirmation-alert/confirmation-alert.component';
|
|
10
|
+
import { SelectAllAlertComponent } from '../selectAll/selectAll.component';
|
|
9
11
|
import * as i0 from "@angular/core";
|
|
10
12
|
import * as i1 from "../workflow-services/policy.service";
|
|
11
13
|
import * as i2 from "../ui-kit/snack-bar/snack-bar.service";
|
|
@@ -22,35 +24,36 @@ import * as i12 from "../workflow-services/common-workflow-services/organization
|
|
|
22
24
|
import * as i13 from "../workflow-services/common-workflow-services/compliance-common.service";
|
|
23
25
|
import * as i14 from "../services/iframe.service";
|
|
24
26
|
import * as i15 from "../report-a-case/services/date-utility.service";
|
|
25
|
-
import * as i16 from "
|
|
26
|
-
import * as i17 from "@
|
|
27
|
-
import * as i18 from "
|
|
28
|
-
import * as i19 from "../formgroup/cs-
|
|
29
|
-
import * as i20 from "../
|
|
30
|
-
import * as i21 from "../ui-kit/
|
|
31
|
-
import * as i22 from "../ui-kit/popover/popover.
|
|
32
|
-
import * as i23 from "../
|
|
33
|
-
import * as i24 from "../formgroup/select/cs-
|
|
34
|
-
import * as i25 from "
|
|
35
|
-
import * as i26 from "
|
|
36
|
-
import * as i27 from "../
|
|
37
|
-
import * as i28 from "../
|
|
38
|
-
import * as i29 from "../sharedComponents/
|
|
39
|
-
import * as i30 from "../sharedComponents/
|
|
40
|
-
import * as i31 from "../sharedComponents/
|
|
41
|
-
import * as i32 from "../sharedComponents/
|
|
42
|
-
import * as i33 from "../sharedComponents/
|
|
43
|
-
import * as i34 from "../sharedComponents/
|
|
44
|
-
import * as i35 from "../sharedComponents/
|
|
45
|
-
import * as i36 from "../sharedComponents/
|
|
46
|
-
import * as i37 from "../sharedComponents/
|
|
47
|
-
import * as i38 from "../sharedComponents/
|
|
48
|
-
import * as i39 from "../sharedComponents/
|
|
49
|
-
import * as i40 from "../sharedComponents/
|
|
50
|
-
import * as i41 from "../sharedComponents/
|
|
51
|
-
import * as i42 from "../link-
|
|
27
|
+
import * as i16 from "../ui-kit/dialog/dialog.service";
|
|
28
|
+
import * as i17 from "@angular/forms";
|
|
29
|
+
import * as i18 from "@vcomply/editor";
|
|
30
|
+
import * as i19 from "../formgroup/cs-radio/cs-radio.component";
|
|
31
|
+
import * as i20 from "../formgroup/cs-switch/cs-switch.component";
|
|
32
|
+
import * as i21 from "../ui-kit/tooltip/tooltip.directive";
|
|
33
|
+
import * as i22 from "../ui-kit/popover/popover.component";
|
|
34
|
+
import * as i23 from "../ui-kit/popover/popover.directive";
|
|
35
|
+
import * as i24 from "../formgroup/select/cs-select/cs-select.component";
|
|
36
|
+
import * as i25 from "../formgroup/select/cs-option/cs-option.component";
|
|
37
|
+
import * as i26 from "ng2-date-picker";
|
|
38
|
+
import * as i27 from "../sharedComponents/v-loader/loader-inline/loader-inline.component";
|
|
39
|
+
import * as i28 from "../workflow-program/create-program-ui/user-group-list/user-group-list.component";
|
|
40
|
+
import * as i29 from "../sharedComponents/responsibility-centers-list/responsibility-centers-list.component";
|
|
41
|
+
import * as i30 from "../sharedComponents/group-users-list/group-users-list.component";
|
|
42
|
+
import * as i31 from "../sharedComponents/policy-template/select-template-list/select-template-list.component";
|
|
43
|
+
import * as i32 from "../sharedComponents/format-and-evidence/format-and-evidence.component";
|
|
44
|
+
import * as i33 from "../sharedComponents/checkbox-list/checkbox-list.component";
|
|
45
|
+
import * as i34 from "../sharedComponents/owner-list/owner-list.component";
|
|
46
|
+
import * as i35 from "../sharedComponents/users-radio-list/users-radio-list.component";
|
|
47
|
+
import * as i36 from "../sharedComponents/frequency/frequency-container/frequency-container.component";
|
|
48
|
+
import * as i37 from "../sharedComponents/checkpoint-policy/checkpoints-policy-container/checkpoints-policy-container.component";
|
|
49
|
+
import * as i38 from "../sharedComponents/document-section/document-section.component";
|
|
50
|
+
import * as i39 from "../sharedComponents/assessment-list/assessment-list.component";
|
|
51
|
+
import * as i40 from "../sharedComponents/approval-workflow/approval-workflow.component";
|
|
52
|
+
import * as i41 from "../sharedComponents/policy-access/policy-access.component";
|
|
53
|
+
import * as i42 from "../sharedComponents/link-program/link-program/link-program.component";
|
|
54
|
+
import * as i43 from "../link-related-policies/link-related-policies.component";
|
|
52
55
|
export class WorkflowPolicyComponent {
|
|
53
|
-
constructor(policyService, snackBar, uiKitService, authService, responsibilityService, router, route, frequencyService, platformLocation, changeRef, restApiService, commonService, organizationUserService, organizationCommonService, complianceCommonService, iframeService, dateUtilityService) {
|
|
56
|
+
constructor(policyService, snackBar, uiKitService, authService, responsibilityService, router, route, frequencyService, platformLocation, changeRef, restApiService, commonService, organizationUserService, organizationCommonService, complianceCommonService, iframeService, dateUtilityService, dialog) {
|
|
54
57
|
this.policyService = policyService;
|
|
55
58
|
this.snackBar = snackBar;
|
|
56
59
|
this.uiKitService = uiKitService;
|
|
@@ -67,6 +70,7 @@ export class WorkflowPolicyComponent {
|
|
|
67
70
|
this.complianceCommonService = complianceCommonService;
|
|
68
71
|
this.iframeService = iframeService;
|
|
69
72
|
this.dateUtilityService = dateUtilityService;
|
|
73
|
+
this.dialog = dialog;
|
|
70
74
|
this.ASSETS = ASSETS;
|
|
71
75
|
this.CONSTANTS = CONSTANTS;
|
|
72
76
|
this.LINKS = LINKS;
|
|
@@ -2141,6 +2145,37 @@ export class WorkflowPolicyComponent {
|
|
|
2141
2145
|
};
|
|
2142
2146
|
}
|
|
2143
2147
|
onAllAttestorsToggle(selected) {
|
|
2148
|
+
const hasPreselectedAssignees = this.policyForm?.selectedAssignees?.length > 0 ||
|
|
2149
|
+
this.policyForm?.selectedGroupAssignee?.length > 0;
|
|
2150
|
+
if (selected && hasPreselectedAssignees) {
|
|
2151
|
+
// Show confirmation dialog before switching
|
|
2152
|
+
const ref = this.dialog.open(SelectAllAlertComponent, {
|
|
2153
|
+
data: {
|
|
2154
|
+
message: `This action will <span class="vx-fw-500">remove</span> the selected users from attestation and assign attestation to all users.`,
|
|
2155
|
+
},
|
|
2156
|
+
position: 'CENTER',
|
|
2157
|
+
background: 'black',
|
|
2158
|
+
});
|
|
2159
|
+
ref.afterClosed.subscribe({
|
|
2160
|
+
next: (res) => {
|
|
2161
|
+
this.policyForm.selectedAllAttestors = res ?? false;
|
|
2162
|
+
if (res) {
|
|
2163
|
+
// User confirmed: proceed with selecting all users
|
|
2164
|
+
this.selectAllUsers(selected);
|
|
2165
|
+
}
|
|
2166
|
+
},
|
|
2167
|
+
});
|
|
2168
|
+
}
|
|
2169
|
+
else {
|
|
2170
|
+
// No preselected assignees or turning OFF: proceed directly
|
|
2171
|
+
this.selectAllUsers(selected);
|
|
2172
|
+
this.policyForm.selectedAllAttestors = selected;
|
|
2173
|
+
}
|
|
2174
|
+
}
|
|
2175
|
+
isCachedData(page) {
|
|
2176
|
+
return this.paginatedUsersCache.has(page.toString());
|
|
2177
|
+
}
|
|
2178
|
+
selectAllUsers(selected) {
|
|
2144
2179
|
this.policyForm.selectedAllAttestors = selected;
|
|
2145
2180
|
if (selected) {
|
|
2146
2181
|
// Deselect all currently selected assignees and groups
|
|
@@ -2151,16 +2186,13 @@ export class WorkflowPolicyComponent {
|
|
|
2151
2186
|
this.refreshPaginatedUsersList();
|
|
2152
2187
|
}
|
|
2153
2188
|
}
|
|
2154
|
-
|
|
2155
|
-
return this.paginatedUsersCache.has(page.toString());
|
|
2156
|
-
}
|
|
2157
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, deps: [{ token: i1.PolicyService }, { token: i2.SnackBarService }, { token: i3.UiKitService }, { token: i4.AuthService }, { token: i5.ResponsibilityService }, { token: i6.Router }, { token: i6.ActivatedRoute }, { token: i7.FrequencyService }, { token: i8.PlatformLocation }, { token: i0.ChangeDetectorRef }, { token: i9.RestApiService }, { token: i10.CommonService }, { token: i11.OrganizationUserService }, { token: i12.OrganizationCommonService }, { token: i13.ComplianceCommonService }, { token: i14.IframeService }, { token: i15.DateUtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2158
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowPolicyComponent, selector: "app-workflow-policy", inputs: { mode: "mode", policyId: "policyId", feature: "feature", convertFileData: "convertFileData", selectedCategory: "selectedCategory", isSendForAttestation: "isSendForAttestation", templateId: "templateId" }, outputs: { pickerChanged: "pickerChanged", showConfirmationAlert: "showConfirmationAlert", populateOption: "populateOption", disconnectRefresh: "disconnectRefresh", shiftToEditMode: "shiftToEditMode" }, host: { listeners: { "document:click": "documentClick($event)" } }, viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "formatEvidence", first: true, predicate: ["formatEvidence"], descendants: true }, { propertyName: "datePickerPopUp", first: true, predicate: ["datePicker"], descendants: true, read: ElementRef }], ngImport: i0, template: "<!-- <p>workflow-policy works!</p> -->\r\n\r\n<ng-container *ngIf=\"!showCreateDocuments\">\r\n <div class=\"workflow-policy\">\r\n <!-- Policy Name -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\r\n <img [src]=\"ASSETS.what\" alt=\"name\" *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\" />\r\n\r\n <svg *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Policy Name <span class=\"required\">*</span>\r\n </label>\r\n <input type=\"text\" (keydown)=\"activeSelector = 'name'\" (focusin)=\"activateSelector('name', true)\"\r\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\r\n (focusout)=\"activateSelector('name', false)\" [ngModel]=\"policyForm.policyName\"\r\n (ngModelChange)=\"policyForm.policyName = changeName($event)\" placeholder=\"Name this policy\" />\r\n <div class=\"selected\" *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{ policyForm.policyName }}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"activateSelector('name', true)\" type=\"button\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"submitted && !policyForm.policyName.trim()\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Please enter a name for this policy.\r\n </p>\r\n <vcomply-editor [(ngModel)]=\"policyForm.policyNotes\" [editorConfig]=\"description\"></vcomply-editor>\r\n <!-- <app-cs-switch\r\n [(ngValue)]=\"policyForm.availableOnPortal\"\r\n (ngValueChange)=\"availabilityOnPortal($event)\"\r\n >\r\n Do you want this policy to be available on the portal?\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n >\r\n </app-cs-switch>\r\n <app-cs-switch\r\n *ngIf=\"policyForm.availableOnPortal\"\r\n [(ngValue)]=\"policyForm.acceptSuggestions\"\r\n >\r\n Accept suggestions\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n ></app-cs-switch> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'category'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'category' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedCategories?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedCategories?.length == 0 ||\r\n activeSelector === 'category'\r\n \" [src]=\"ASSETS.case_category\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedCategories?.length > 0 &&\r\n activeSelector !== 'category'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Policy Category <span class=\"required\">*</span>\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedCategories?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('category', true)\"\r\n placeholder=\"Select a category for this policy.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedCategories?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"\r\n let category of policyForm?.selectedCategories?.slice(0, 1)\r\n \">\r\n <i (click)=\"remove('category', category)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"category.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ category.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"policyForm?.selectedCategories?.length > 1\" type=\"button\" appPopover (click)=\"category.popover()\"\r\n placement=\"left\">\r\n +{{ policyForm?.selectedCategories?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\r\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('category',category)\"></i>\r\n {{category.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\r\n appPopover (click)=\"category.popover()\" placement=\"right\">+\r\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\r\n </div> -->\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #category [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let category of policyForm?.selectedCategories | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('category', category)\"></i>\r\n {{ category.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <p *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\" [appScrollInView]=\"true\"\r\n class=\"error-message\">\r\n Please select the category for this policy.\r\n </p>\r\n </div>\r\n\r\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\r\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\r\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag.tagname }}\" />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Effective Date -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img [src]=\"ASSETS.when\" alt=\"\" />\r\n\r\n <svg *ngIf=\"false\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the effective date of the policy.\"\r\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\" (click)=\"openDatePicker()\"\r\n id=\"effective-date\" />\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Owner -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'owners'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'owners' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\r\n <img *ngIf=\"!policyForm.policy_owners?.length\" [src]=\"ASSETS.im_creating\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_owners?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\r\n </div>\r\n <div *ngIf=\"!policyForm.policy_owners?.length\" (click)=\"activateSelector('owners', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select owners for this policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm.policy_owners?.length\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_owners[0]?.member_name }}</span>\r\n\r\n <button *ngIf=\"policyForm?.policy_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyUserPopover.popover()\" placement=\"left\">\r\n + {{ policyForm?.policy_owners.length - 1 }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"false\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\">\r\n &\r\n </div>\r\n <div *ngIf=\"false\" class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">Samantha Jones</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"policyGroupPopover.popover()\" placement=\"right\">\r\n +4\r\n </button>\r\n </div>\r\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let owner of policyForm?.policy_owners | slice : 1;\r\n let i = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"owner?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i (click)=\"remove('owners', owner, i + 1)\" class=\"icons\"></i>\r\n {{ owner?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"'Harshvardhan Kariwala'\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Harshvardhan Kariwala\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button (click)=\"activateSelector('owners', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"submitted && !policyForm?.policy_owners?.length\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select owners for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Review -->\r\n <div class=\"form-group-row\" [class.active]=\"\r\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\r\n <img *ngIf=\"!policyForm?.addReviewers\" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.addReviewers\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">REVIEW</label>\r\n <div class=\"reviewSelection vx-p-3 vx-pb-0\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\r\n Does this policy need to be reviewed?\r\n </div>\r\n <app-cs-radio name=\"review-type\" [checked]=\"policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(true)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n YES\r\n </div>\r\n </app-cs-radio>\r\n <app-cs-radio name=\"review-type\" [checked]=\"!policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(false)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n NO\r\n </div>\r\n </app-cs-radio>\r\n </div>\r\n\r\n <ng-container *ngIf=\"policyForm?.addReviewers\">\r\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\" [appScrollInView]=\"scrollToBottom\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewer', true)\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the person responsible for reviewing this policy\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\" [class.active]=\"activeSelector === 'reviewer'\"\r\n [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i (click)=\"remove('reviewer', reviewer)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewer?.member_name }}</span>\r\n </div>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n *ngIf=\"activeSelector !== 'reviewer'\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\"\r\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n [class.active]=\"activeSelector === 'reviewerFrequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <div class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n When does this policy needs to be reviewed?\r\n </div>\r\n <div (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\r\n SET A FREQUENCY\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" [class.active]=\"activeSelector === 'reviewerFrequency'\">\r\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\" [appTooltip]=\"reviewerFrequencyPlaceholder\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewerFrequencyPlaceholder }}\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Approval Workflow -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">APPROVAL <span class=\"required\">*</span></label>\r\n <button (click)=\"\r\n createApprovalWorkflow(); activateSelector('approvers', true)\r\n \" [class.disabled]=\"!policyForm?.selectedCategories?.length\"\r\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\">\r\n CREATE A NEW APPROVAL WORKFLOW\r\n </button>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length === 0 ||\r\n !selectedWorkflow[0]?.workflow_name\r\n \" (click)=\"\r\n clickApprovalWorkflow(true); activateSelector('approvers', true)\r\n \" class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the approval workflow for this policy\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"removeWorkflow()\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n selectedWorkflow[0]?.workflow_name }}</span>\r\n </div>\r\n <button (click)=\"editWorkflow(selectedWorkflow[0])\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\r\n <div *ngFor=\"\r\n let approval of selectedWorkflow[0]?.approval_workflow;\r\n let approvalIndex = index\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\" [appTooltip]=\"\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n }}\r\n </div>\r\n <div class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\">\r\n {{\r\n approval?.type === \"ROUNDROBIN\"\r\n ? \"ROUND-ROBIN\"\r\n : approval?.type === \"ANYONE\"\r\n ? \"ANY ONE\"\r\n : approval?.type\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\">\r\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n ></i\r\n > -->\r\n <div *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential' &&\r\n approval?.approvers?.length < 2\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\r\n </div>\r\n <div *ngIf=\"\r\n approval?.approvers?.length > 1 &&\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n 1\r\n </div>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"approval?.approvers[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n approval?.approvers[0]?.member_name }}</span>\r\n <button *ngIf=\"approval?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"workflowPopover.popover()\" placement=\"right\">\r\n +{{ approval?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of approval?.approvers | slice : 1;\r\n let approvalIndex = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"approver?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <!-- <i class=\"icons\"></i> -->\r\n <span *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">{{\r\n approvalIndex + 1 ===\r\n approval?.approvers?.length - 1\r\n ? \"Final\"\r\n : approvalIndex + 2\r\n }}</span>\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <!-- <div class=\"vx-d-flex vx-align-center\">\r\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n <button (click)=\"deleteLevel(approvalIndex)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> DELETE\r\n </button>\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\r\n !policyApprovalFlag &&\r\n !policyForm?.selectedApprovers[0]?.approvers?.length\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Access -->\r\n <div *ngIf=\"true\" class=\"form-group-row\" [class.active]=\"activeSelector === 'policyAccess'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'policyAccess' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"true\">\r\n <img *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" [src]=\"ASSETS.lock_scope\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length ||\r\n policyForm?.availableOnPortal\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\r\n </div>\r\n <div *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Who should be able to view this policy?\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3\" *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div *ngIf=\"policyForm?.policy_access_owners?.length\"\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'policyAccess',\r\n policyForm?.policy_access_owners[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n }}</span>\r\n <button *ngIf=\"policyForm?.policy_access_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyAccessPopover.popover()\" placement=\"left\">\r\n +{{ policyForm?.policy_access_owners.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.policy_access_owners.length > 0 &&\r\n policyForm?.policy_access_groups.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'accessGroup',\r\n policyForm?.policy_access_groups[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_groups[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_groups[0]?.group_name\r\n }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"accessGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 1\">\r\n +{{ policyForm?.policy_access_groups.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let user of policyForm?.policy_access_owners\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"user?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('policyAccess', user)\"></i>\r\n {{ user?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.policy_access_groups\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('accessGroup', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Everyone who has access to this Policy Category\r\n </div></app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\r\n class=\"vx-mt-1\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Select users/groups\r\n </div></app-cs-radio\r\n >\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.availableOnPortal\">\r\n <span class=\"vx-fs-13 vx-paragraph-txt\">Visible to All Current & Future Users</span>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-mt-2\">\r\n <app-cs-switch *ngIf=\"\r\n policyForm.availableOnPortal ||\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \" [(ngValue)]=\"policyForm.acceptSuggestions\">ACCEPT SUGGESTIONS\r\n <i class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\" [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"form-group-row\" *ngIf=\"false\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group approval-workflow\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <label class=\"vx-control-panel\">\r\n Approval workflow <span class=\"required\">*</span>\r\n <button (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \" class=\"button\">\r\n Create a new Approval Workflow\r\n </button>\r\n </label>\r\n <div class=\"select\" [class.disabled]=\"approverWorkFlowList?.length == 0\" *ngIf=\"\r\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\r\n policyForm?.selectedApprovers.length == 0\r\n \">\r\n <cs-select [ngModel]=\"selectedApprovalWorkflow\" (ngModelChange)=\"selectedWorkflowChange($event)\"\r\n [placeholder]=\"'Select approval workflow for this policy'\" name=\"selectedApprovalWorkflow\"\r\n [setMaxWidth]=\"true\">\r\n <cs-option *ngFor=\"let data of approverWorkFlowList\" [value]=\"data\">\r\n {{ data.workflow_name }}\r\n </cs-option>\r\n <cs-option [value]=\"-1\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">Create a new approval workflow</cs-option>\r\n </cs-select>\r\n </div>\r\n <ng-container *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\">\r\n <div class=\"selected\" *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\">\r\n <div class=\"workflow-label\">\r\n <p class=\"title\">Level {{ i + 1 }}</p>\r\n <p class=\"description\">{{ level.name }}</p>\r\n </div>\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\" *ngFor=\"\r\n let approver of level.approvers.slice(0, 1);\r\n let j = index\r\n \"><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\r\n j + 1\r\n }}</span>{{ approver.member_name }}</span>\r\n\r\n <button class=\"count\" *ngIf=\"level.approvers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"labelName.popover()\" placement=\"left\">\r\n +\r\n\r\n {{ level.approvers.slice(1).length }}\r\n </button>\r\n <app-popover #labelName [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of level.approvers | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">\r\n {{\r\n j == level.approvers.slice(1).length - 1\r\n ? \"Final\"\r\n : j + 2\r\n }}\r\n </span>\r\n {{ approver.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"\r\n activateSelector('approvers', true, level.name);\r\n approversListIndex = i\r\n \">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <button class=\"close-btn\" (click)=\"remove('workflowLevel', level, i)\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers?.length &&\r\n !policyApprovalFlag\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\" *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"><button\r\n class=\"button\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">\r\n + Add More Levels\r\n </button></label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Who / now Attestation -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'assignees' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedAssignees?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedAssignees?.length == 0 ||\r\n activeSelector === 'assignees'\r\n \" [src]=\"ASSETS.case_assignees\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 &&\r\n activeSelector !== 'assignees'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Attestation</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\" *ngIf=\"\r\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\r\n (policyForm?.selectedAssignees?.length == 0 &&\r\n groupEnabled &&\r\n policyForm?.selectedGroupAssignee.length == 0)\r\n \" (click)=\"activateSelector('assignees', true)\"\r\n [class.disabled]=\"policyForm.selectedAllAttestors\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n {{\r\n policyForm.selectedAllAttestors ? 'All Users Selected' : \r\n 'Select the persons responsible for attesting this policy.'\r\n }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\" *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\r\n \">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('assignees', assignee)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assignee.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assignee.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"assigneePopover.popover()\" placement=\"left\"\r\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\">\r\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"groupEnabled\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('assignees', policyForm?.selectedAssignees[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.selectedAssignees[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"UserPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedAssignees.length > 1\">\r\n +{{ policyForm?.selectedAssignees.length - 1 }}\r\n </button>\r\n </div>\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.selectedAssignees.length > 0 &&\r\n policyForm?.selectedGroupAssignee.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove(\r\n 'groupAssignees',\r\n policyForm?.selectedGroupAssignee[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.selectedGroupAssignee[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.selectedGroupAssignee[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"group.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\">\r\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('assignees', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n (((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm.selectedGroupAssignee.length == 0 &&\r\n policyForm?.frequency_details &&\r\n groupEnabled) ||\r\n (isSendForAttestation &&\r\n (policyForm?.selectedAssignees?.length === 0 && !policyForm.selectedAllAttestors)))\r\n \" id=\"whovalidatemsg\" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the persons required to attest to this Policy.\r\n </p>\r\n <app-cs-switch [(ngValue)]=\"policyForm.selectedAllAttestors\"\r\n (ngValueChange)=\"onAllAttestorsToggle($event)\"\r\n class=\"who-toggle\">Select all users within your organization\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, all users within your organization will be required to attest this policy.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-cs-switch [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\r\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors\" class=\"who-toggle\">THIS POLICY REQUIRES\r\n E-SIGNATURE FOR ATTESTATION\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.selectedGroupAssignee | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"></i>\r\n {{ data.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n <!-- overseer -->\r\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCGroupEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer end -->\r\n\r\n <!-- overseer fail start -->\r\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCFailEmailGroup | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupFailEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer fail end -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- When -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'frequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">When?</label>\r\n\r\n <div *ngIf=\"policyForm?.frequency_details == ''\" class=\"select button-sec\">\r\n <div class=\"custom-input frequency-custom-input\" (click)=\"activateSelector('frequency', true)\">\r\n {{ frequencyPlaceholder }}\r\n </div>\r\n\r\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <!-- <div\r\n *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec\"\r\n > -->\r\n <div *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('frequency', rc)\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <!-- </div>\r\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\r\n <button\r\n *ngIf=\"activeSelector !== 'frequency'\"\r\n type=\"button\"\r\n class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\"\r\n >\r\n <i class=\"icons\"></i>Edit\r\n </button> -->\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n ((policyForm?.selectedAssignees?.length > 0 &&\r\n !policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0) &&\r\n !policyForm?.frequency_details &&\r\n groupEnabled))\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select an attestation schedule for this policy.\r\n </p>\r\n\r\n <p *ngIf=\"submitted && policyForm?.frequency_details && policyForm?.selectedAssignees?.length > 0 && isPastDate\"\r\n class=\"error-message\">\r\n Set a future date.\r\n </p>\r\n\r\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\r\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkpoints / Assessment of Understanding -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"true\"\r\n [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'checkpoints' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Assessment of Understanding\r\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\r\n (click)=\"activateSelector('checkpoints', true)\">\r\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\r\n <div class=\"custom-input\">\r\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\r\n of the policy.\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"policyForm?.checkpointDetails?.length > 0\">\r\n <!-- <div class=\"chip-container\">\r\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\r\n\r\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\r\n\r\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\r\n\r\n </div> -->\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\r\n policyForm?.checkpointDetails?.length +\r\n (policyForm?.checkpointDetails?.length > 1\r\n ? \" Questions\"\r\n : \" Question\")\r\n }}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('checkpoints', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\"></i>\r\n {{ checkpoint?.question }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Risk Classification -->\r\n <div class=\"form-group-row\" *ngIf=\"showRiskClassification && false\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\r\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"policyForm?.riskRating\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Classification</label>\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\"let class of riskClassification\" [ngClass]=\"[class.class]\">\r\n <input type=\"radio\" name=\"classification\" [value]=\"class.value\"\r\n [checked]=\"policyForm?.riskRating === class.value\" [(ngModel)]=\"policyForm.riskRating\" />\r\n <span>{{ class.name }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Responsibility Center -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addResponsibilityCenters\"\r\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'rc' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\r\n \" [src]=\"ASSETS.responsibility_center\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center</label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('rc', true)\"\r\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ rc.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"rcPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.selectedRCs?.length > 1\">\r\n +{{ policyForm?.selectedRCs?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('rc', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let rc of policyForm?.selectedRCs | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\r\n {{ rc.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Version -->\r\n <div *ngIf=\"policyForm.addVersion\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\r\n <img [src]=\"ASSETS.associated_risks\" alt=\"name\" *ngIf=\"!policyForm.policy_version\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_version\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">VERSION</label>\r\n <input [(ngModel)]=\"policyForm.policy_version\" (change)=\"onVersion($event)\" type=\"text\"\r\n placeholder=\"Specify the policy version.\" />\r\n <p *ngIf=\"!isVersionValid\" class=\"error-message\" [appScrollInView]=\"true\">\r\n {{ versionErrorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Reviewer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addReviewers && false\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedReviewers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedReviewers?.length == 0 ||\r\n activeSelector === 'reviewer'\r\n \" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n activeSelector !== 'reviewer'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Reviewer </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedReviewers?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\"\r\n placeholder=\"Select the person responsible for reviewing this policy\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedReviewers?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('reviewer', reviewer)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\r\n </ng-container>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length == 0 &&\r\n policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select a reviewer for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\">When? </label>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\" class=\"select button-sec\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewerFrequency', true)\"\r\n [placeholder]=\"reviewerFrequencyPlaceholder\" readonly />\r\n <button (click)=\"activateSelector('reviewerFrequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\" class=\"selected button-sec\">\r\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\" #formatEvidence\r\n [mode]=\"'policyReviewer'\" [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\">\r\n </app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Overseer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addOverseers\" [class.active]=\"\r\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\r\n \">\r\n <img *ngIf=\"\r\n (policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCEmail?.length == 0) ||\r\n activeSelector === 'ccEmail' ||\r\n activeSelector === 'ccFail'\r\n \" [src]=\"ASSETS.oversight\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n (policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCEmail?.length > 0) &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Oversight</label>\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCEmail?.length == 0 &&\r\n policyForm?.CCGroupEmail.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccEmail', true)\"\r\n placeholder=\"Who should have oversight of this policy?\" readonly />\r\n </div>\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCEmail?.length > 0 ||\r\n policyForm?.CCGroupEmail.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccEmail.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccEmail.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccEmailPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCEmail[0].employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCEmail.length > 0 &&\r\n policyForm?.CCGroupEmail?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCGroupEmail[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\">\r\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccEmail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCFailEmailGroup?.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccFail', true)\"\r\n placeholder=\"Who should be notified if the policy is not attested on time?\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccFail.employee_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccFail.employee_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmail[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 &&\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmailGroup[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerFailGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\">\r\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccFail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccEmail of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n {{ ccEmail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccFail of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n {{ ccFail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Related Documents -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addAssociatedDocuments\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\">\r\n <img *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\" [mode]=\"'policy'\"\r\n [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"></app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Programs & Responsibilities -->\r\n <div *ngIf=\"policyForm?.addLinkProgram\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'linkProgram'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'linkProgram' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.programSelectedValues?.program?.category_id\r\n \">\r\n <img *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\" [src]=\"ASSETS.link_items\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK PROGRAMS & RESPONSIBILITIES</label>\r\n <div *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\r\n (click)=\"activateSelector('linkProgram', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select Programs & responsibilities that are<br />associated with\r\n this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"\r\n remove('linkProgram', policyForm?.programSelectedValues)\r\n \" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.programSelectedValues?.program?.name }}</span>\r\n <!-- <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"programResponsibilityPopover.popover()\"\r\n placement=\"left\"\r\n >\r\n +4\r\n </button> -->\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n 'Reporting information security weaknesses'\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Reporting information security weaknesses\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('linkProgram', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Assessment -->\r\n <div *ngIf=\"policyForm.addLinkAssessment\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isAssessment' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\r\n <img *ngIf=\"!policyForm?.assessment?.length\" [src]=\"ASSETS.assessments\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.assessment?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\r\n <div *ngIf=\"policyForm?.assessment?.length === 0\" (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select assessments that are associated with this<br />policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.assessment?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n }}</span>\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assessment of policyForm.assessment | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n assessment?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n {{ assessment?.assessmentDetails?.assessment_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Related Polices -->\r\n\r\n <div *ngIf=\"policyForm.addLinkPolicies\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isLinkedPolices' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\r\n <img *ngIf=\"!SelectedListOfPolicies?.length\" [src]=\"LINKS.linkedPolicyImage\" alt=\"\" />\r\n\r\n <svg *ngIf=\"SelectedListOfPolicies?.length\" class=\"checkIcon\" [xmlns]=\"LINKS.checked\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\r\n <div *ngIf=\"SelectedListOfPolicies?.length === 0\" (click)=\"activateSelector('isLinkedPolices', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select policies that are associated with this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\">\r\n <i (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policy?.contract_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ policy?.contract_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"SelectedListOfPolicies?.length > 1\" type=\"button\" appPopover (click)=\"relatedPolicy.popover()\"\r\n placement=\"left\">\r\n +{{ SelectedListOfPolicies?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let policy of SelectedListOfPolicies | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"\r\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\r\n \"></i>\r\n {{ policy?.contract_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-cs-switch [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\r\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\" class=\"who-toggle\">DISPLAY ON THE POLICY PORTAL\r\n <i class=\"icons\" [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <app-checkbox-list [config]=\"categoryConfig\" [twoColumn]=\"false\" [itemsList]=\"categoryList\"\r\n [selectedItems]=\"policyForm.selectedCategories\" [identifierKey]=\"'_id'\" [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\" *ngIf=\"activeSelector === 'category'\" (saveList)=\"saveSelectedList('category', $event)\"\r\n (closeList)=\"disableSelector()\" [loaded]=\"!categoriesListLoaded\">\r\n </app-checkbox-list>\r\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\r\n [itemsList]=\"\"\r\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\r\n</app-checkbox-list> -->\r\n\r\n <app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"rcList\"\r\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"disableSelector()\" [loaded]=\"rcListLoaded\">\r\n </app-responsibility-centers-list>\r\n\r\n <app-link-related-policies *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\" [policyId]=\"policyId\" [mode]=\"mode\"\r\n [selectedPolicies]=\"SelectedListOfPolicies\" (closeLinkPolicyList)=\"disableSelector()\"\r\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"></app-link-related-policies>\r\n\r\n <app-users-radio-list *ngIf=\"activeSelector === 'reviewer'\" [itemEmailKey]=\"'member_email'\" [usersList]=\"allReviewers\"\r\n [headerText]=\"'Select a Reviewer'\" [selectedUsers]=\"policyForm.selectedReviewers\" [userIdKey]=\"'member_id'\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-users-radio-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\" [groupEnabled]=\"true\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCEmail\" [selectedGroups]=\"policyForm.CCGroupEmail\" [isPaginationEnabled]=\"isPaginationEnabled\"\r\n (save)=\"saveSelectedList('ccEmail', $event)\" (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccFail' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [selectedGroups]=\"policyForm.CCFailEmailGroup\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (save)=\"saveSelectedList('ccFail', $event)\"\r\n (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-group-users-list *ngIf=\"activeSelector === 'assignees' && !groupEnabled\" [usersList]=\"assigneesList\"\r\n [groupsList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.selectedAssignees\" [userIdKey]=\"'my_member_id'\"\r\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"disableSelector()\">\r\n </app-group-users-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'assignees' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" (save)=\"saveSelectedList('assignees', $event)\" (cancel)=\"disableSelector()\"\r\n [selectedGroups]=\"policyForm.selectedGroupAssignee\" [selectedUsers]=\"policyForm.selectedAssignees\"\r\n [featureflag]=\"groupEnabled\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n </app-owner-list>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [mode]=\"'policy'\"\r\n [frequencyDetails]=\"frequencyDetails\" (selectedFrequency)=\"frequencyData($event)\" [feature]=\"feature\"\r\n [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'reviewerFrequency'\" [mode]=\"'reviewerFrequency'\"\r\n [frequencyDetails]=\"reviewerFrequencyDetails\" (selectedFrequency)=\"reviewerFrequencyData($event)\"\r\n [feature]=\"feature\" [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <vc-link-program *ngIf=\"activeSelector === 'linkProgram'\" (close)=\"disableSelector()\" [policy]=\"policyForm\"\r\n [selectedProgram]=\"policyForm?.programSelectedValues\" [mode]=\"mode\" [selectedLinkProgram]=\"selectedLinkProgram\"\r\n (changeTab)=\"changeTab('linkedPrograms')\" (updatedProgramDetails)=\"updatedProgramDetails($event)\">\r\n </vc-link-program>\r\n\r\n <app-checkpoints-policy-container (closeCheckPoint)=\"disableSelector()\"\r\n [checkpointData]=\"policyForm?.checkpointDetails\" [requiredPoint]=\"policyForm?.passingMarks\"\r\n *ngIf=\"activeSelector === 'checkpoints'\"\r\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"></app-checkpoints-policy-container>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n <app-approval-workflow *ngIf=\"enableApprovalWorkflow\" [selectedCategory]=\"policyForm?.selectedCategories\"\r\n [approverWorkFlowList]=\"approverWorkFlowList\" [allApprovers]=\"allApprovers\"\r\n (listCancelClicked)=\"listCancelClicked($event)\" (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\r\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\" [editApprovalWorkflow]=\"editApprovalWorkflow\"\r\n [createApprovalClick]=\"createApprovalClick\" (closeCreateClicked)=\"closeClickedCreateForm()\"\r\n [editWorkflowLevel]=\"editWorkflowLevel\"></app-approval-workflow>\r\n <!-- <app-select-approvers></app-select-approvers> -->\r\n\r\n <app-policy-access *ngIf=\"activeSelector === 'policyAccess'\" [policyAccessType]=\"policyForm?.policy_access_type\"\r\n (close)=\"disableSelector()\" [orgUsersList]=\"paginatedUsersList?.users\" [usersAccessList]=\"usersAccessList\"\r\n [groupList]=\"overseerGroupsList\" [groupsAccessList]=\"groupsAccessList\"\r\n [selectedUsers]=\"policyForm?.policy_access_owners\" [selectedGroups]=\"policyForm?.policy_access_groups\"\r\n [disabledIds]=\"usersAccessListIds\" [disabledGroupIds]=\"groupsAccessListIds\"\r\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\" (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\r\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\" [loading]=\"paginatedUsersList?.loading\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\" [featureflag]=\"groupEnabled\">\r\n </app-policy-access>\r\n</ng-container>\r\n<ng-container *ngIf=\"showCreateDocuments\">\r\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\r\n [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\"\r\n [userInfo]=\"userInfo\"\r\n [policyId]=\"policyId\"\r\n [policyName]=\"policyForm.policyName\"\r\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\"\r\n ></app-create-documents> -->\r\n <lib-document-section *ngIf=\"showCreateDocuments\" [templateView]=\"templateView\" [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\" [userInfo]=\"userInfo\" [policyId]=\"policyId\" [feature]=\"feature\"\r\n [templateUrl]=\"templateUrl\" [policyName]=\"policyForm.policyName\" (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\" (openTemplate)=\"templateView = true\"></lib-document-section>\r\n</ng-container>\r\n\r\n<app-assessment-list *ngIf=\"activeSelector === 'isAssessment'\" [program_ids]=\"''\"\r\n [isEdit]=\"policyForm?.assessment?.length\" (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\r\n [selectedAssessment]=\"policyForm?.assessment[0]\" [mode]=\"'policy'\" (onAssessmentSelect)=\"\r\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\r\n \"></app-assessment-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n</app-owner-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'owners'\" [listHeading]=\"'Select Owner(s)'\" [singularText]=\"'User selected'\"\r\n [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"false\" [userIdKey]=\"'member_id'\"\r\n [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('owners', $event)\"\r\n (closeUsersList)=\"disableSelector()\" [mode]=\"mode\" [selectedUsers]=\"policyForm?.policy_owners ?? []\">\r\n</app-owner-list>\r\n\r\n<app-select-template-list *ngIf=\"templateView\" [selectedCategoryId]=\"policyForm?.selectedCategories\" [feature]=\"feature\"\r\n (onTemplateSelect)=\"onTemplateSelect($event)\"></app-select-template-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.right app-format-and-evidence~.error-message{position:relative;top:-12px}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}::ng-deep .wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"], dependencies: [{ kind: "directive", type: i16.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: i16.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i17.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i18.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i19.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i20.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i21.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i22.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i16.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i23.CsSelectComponent, selector: "cs-select", inputs: ["dropdownLabel", "dropdownSubLabel", "isRequired", "placeholder", "setMaxWidth"], outputs: ["valueChanged"] }, { kind: "component", type: i24.CsOptionComponent, selector: "cs-option", inputs: ["value", "color", "backgroundColor", "optionTooltip"] }, { kind: "component", type: i25.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "component", type: i26.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i27.UserGroupListComponent, selector: "user-group-list", inputs: ["groupEnabled", "panelTitle", "singleSelect", "selectedReviewer", "featureflag", "reviewerWorkflowType", "mode", "fieldType", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds", "FromProgram", "userListInfo", "groupListInfo", "fromApprovalWorkflow", "approvalType", "showFutureUsersSwitch", "futureUsersWillSelect", "isAllDisabled", "isGroupTabShow", "disabledIds", "nonRemovableUserIds", "allUserSelectedDisabled", "nonRemovableGroupIds", "loading", "userlist", "selectedUsers", "defaultSelectedUsers", "userType", "isPaginationEnabled", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i28.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i29.GroupUsersListComponent, selector: "app-group-users-list", inputs: ["groupsEnabled", "usersList", "groupsList", "selectedUsers", "userIdKey", "groupIdKey", "openedFrom", "selectedGroups", "assigneeGroupsList", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "loader", "isDisabledSelected"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i30.SelectTemplateListComponent, selector: "app-select-template-list", inputs: ["selectedCategoryId", "feature"], outputs: ["onTemplateSelect"] }, { kind: "component", type: i31.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData", "isMandatory"], outputs: ["updateFiles"] }, { kind: "component", type: i32.CheckboxListComponent, selector: "app-checkbox-list", inputs: ["itemsList", "selectedItems", "identifierKey", "displayKey", "tooltipKey", "config", "twoColumn", "loaded"], outputs: ["closeList", "saveList"] }, { kind: "component", type: i33.OwnerListComponent, selector: "app-owner-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "showWorkflow", "listHeading", "searchPlaceholder", "pluralText", "singularText", "reviewerWorkflowType", "mode", "noDataText", "workflowList", "workflowText", "disabledIds", "nonRemovableUsersList", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds"], outputs: ["saveSelectedList", "closeUsersList", "reviewerWorkflowTypeChange"] }, { kind: "component", type: i34.UserRadioListComponent, selector: "app-users-radio-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "headerText", "loaded"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i35.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i36.CheckpointsPolicyContainerComponent, selector: "app-checkpoints-policy-container", inputs: ["requiredPoint", "checkpointData"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i37.DocumentSectionComponent, selector: "lib-document-section", inputs: ["selectedDocumentType", "feature", "templateView", "policyId", "policyName", "organization_id", "member_obj_id", "userInfo", "templateUrl"], outputs: ["disconnectRefresh", "editPolicy", "openTemplate"] }, { kind: "component", type: i38.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i39.ApprovalWorkflowComponent, selector: "app-approval-workflow", inputs: ["approverWorkFlowList", "allApprovers", "selectedCategory", "editApprovalWorkflow", "createApprovalClick", "editWorkflowLevel"], outputs: ["selectedWorkflowNext", "listCancelClicked", "saveApprovalWorkflow", "closeCreateClicked"] }, { kind: "component", type: i40.PolicyAccessComponent, selector: "app-policy-access", inputs: ["policyAccessType", "SelectedCategory", "orgUsersList", "groupList", "selectedUsers", "selectedGroups", "disabledIds", "usersAccessList", "groupsAccessList", "disabledGroupIds", "futureUsersWillSelect", "loading", "userListInfo", "isPaginationEnabled", "featureflag"], outputs: ["close", "saveCheckPoint", "setPolicyAccessType", "fetchUserData"] }, { kind: "component", type: i41.LinkProgramComponent, selector: "vc-link-program", inputs: ["policy", "currentTab", "mode", "programsList", "selectedProgram", "selectedCategories", "selectedLinkProgram", "hideProgramsList"], outputs: ["changeTab", "updatedProgramDetails", "save", "close", "refreshLinkedPolicies"] }, { kind: "component", type: i42.LinkRelatedPoliciesComponent, selector: "app-link-related-policies", inputs: ["selectedPolicies", "mode", "policyId"], outputs: ["closeLinkPolicyList", "selectedList"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
|
|
2189
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, deps: [{ token: i1.PolicyService }, { token: i2.SnackBarService }, { token: i3.UiKitService }, { token: i4.AuthService }, { token: i5.ResponsibilityService }, { token: i6.Router }, { token: i6.ActivatedRoute }, { token: i7.FrequencyService }, { token: i8.PlatformLocation }, { token: i0.ChangeDetectorRef }, { token: i9.RestApiService }, { token: i10.CommonService }, { token: i11.OrganizationUserService }, { token: i12.OrganizationCommonService }, { token: i13.ComplianceCommonService }, { token: i14.IframeService }, { token: i15.DateUtilityService }, { token: i16.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
2190
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowPolicyComponent, selector: "app-workflow-policy", inputs: { mode: "mode", policyId: "policyId", feature: "feature", convertFileData: "convertFileData", selectedCategory: "selectedCategory", isSendForAttestation: "isSendForAttestation", templateId: "templateId" }, outputs: { pickerChanged: "pickerChanged", showConfirmationAlert: "showConfirmationAlert", populateOption: "populateOption", disconnectRefresh: "disconnectRefresh", shiftToEditMode: "shiftToEditMode" }, host: { listeners: { "document:click": "documentClick($event)" } }, viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "formatEvidence", first: true, predicate: ["formatEvidence"], descendants: true }, { propertyName: "datePickerPopUp", first: true, predicate: ["datePicker"], descendants: true, read: ElementRef }], ngImport: i0, template: "<!-- <p>workflow-policy works!</p> -->\r\n\r\n<ng-container *ngIf=\"!showCreateDocuments\">\r\n <div class=\"workflow-policy\">\r\n <!-- Policy Name -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\r\n <img [src]=\"ASSETS.what\" alt=\"name\" *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\" />\r\n\r\n <svg *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Policy Name <span class=\"required\">*</span>\r\n </label>\r\n <input type=\"text\" (keydown)=\"activeSelector = 'name'\" (focusin)=\"activateSelector('name', true)\"\r\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\r\n (focusout)=\"activateSelector('name', false)\" [ngModel]=\"policyForm.policyName\"\r\n (ngModelChange)=\"policyForm.policyName = changeName($event)\" placeholder=\"Name this policy\" />\r\n <div class=\"selected\" *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{ policyForm.policyName }}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"activateSelector('name', true)\" type=\"button\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"submitted && !policyForm.policyName.trim()\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Please enter a name for this policy.\r\n </p>\r\n <vcomply-editor [(ngModel)]=\"policyForm.policyNotes\" [editorConfig]=\"description\"></vcomply-editor>\r\n <!-- <app-cs-switch\r\n [(ngValue)]=\"policyForm.availableOnPortal\"\r\n (ngValueChange)=\"availabilityOnPortal($event)\"\r\n >\r\n Do you want this policy to be available on the portal?\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n >\r\n </app-cs-switch>\r\n <app-cs-switch\r\n *ngIf=\"policyForm.availableOnPortal\"\r\n [(ngValue)]=\"policyForm.acceptSuggestions\"\r\n >\r\n Accept suggestions\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n ></app-cs-switch> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'category'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'category' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedCategories?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedCategories?.length == 0 ||\r\n activeSelector === 'category'\r\n \" [src]=\"ASSETS.case_category\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedCategories?.length > 0 &&\r\n activeSelector !== 'category'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Policy Category <span class=\"required\">*</span>\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedCategories?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('category', true)\"\r\n placeholder=\"Select a category for this policy.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedCategories?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"\r\n let category of policyForm?.selectedCategories?.slice(0, 1)\r\n \">\r\n <i (click)=\"remove('category', category)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"category.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ category.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"policyForm?.selectedCategories?.length > 1\" type=\"button\" appPopover (click)=\"category.popover()\"\r\n placement=\"left\">\r\n +{{ policyForm?.selectedCategories?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\r\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('category',category)\"></i>\r\n {{category.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\r\n appPopover (click)=\"category.popover()\" placement=\"right\">+\r\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\r\n </div> -->\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #category [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let category of policyForm?.selectedCategories | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('category', category)\"></i>\r\n {{ category.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <p *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\" [appScrollInView]=\"true\"\r\n class=\"error-message\">\r\n Please select the category for this policy.\r\n </p>\r\n </div>\r\n\r\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\r\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\r\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag.tagname }}\" />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Effective Date -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img [src]=\"ASSETS.when\" alt=\"\" />\r\n\r\n <svg *ngIf=\"false\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the effective date of the policy.\"\r\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\" (click)=\"openDatePicker()\"\r\n id=\"effective-date\" />\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Owner -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'owners'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'owners' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\r\n <img *ngIf=\"!policyForm.policy_owners?.length\" [src]=\"ASSETS.im_creating\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_owners?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\r\n </div>\r\n <div *ngIf=\"!policyForm.policy_owners?.length\" (click)=\"activateSelector('owners', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select owners for this policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm.policy_owners?.length\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_owners[0]?.member_name }}</span>\r\n\r\n <button *ngIf=\"policyForm?.policy_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyUserPopover.popover()\" placement=\"left\">\r\n + {{ policyForm?.policy_owners.length - 1 }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"false\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\">\r\n &\r\n </div>\r\n <div *ngIf=\"false\" class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">Samantha Jones</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"policyGroupPopover.popover()\" placement=\"right\">\r\n +4\r\n </button>\r\n </div>\r\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let owner of policyForm?.policy_owners | slice : 1;\r\n let i = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"owner?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i (click)=\"remove('owners', owner, i + 1)\" class=\"icons\"></i>\r\n {{ owner?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"'Harshvardhan Kariwala'\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Harshvardhan Kariwala\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button (click)=\"activateSelector('owners', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"submitted && !policyForm?.policy_owners?.length\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select owners for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Review -->\r\n <div class=\"form-group-row\" [class.active]=\"\r\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\r\n <img *ngIf=\"!policyForm?.addReviewers\" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.addReviewers\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">REVIEW</label>\r\n <div class=\"reviewSelection vx-p-3 vx-pb-0\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\r\n Does this policy need to be reviewed?\r\n </div>\r\n <app-cs-radio name=\"review-type\" [checked]=\"policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(true)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n YES\r\n </div>\r\n </app-cs-radio>\r\n <app-cs-radio name=\"review-type\" [checked]=\"!policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(false)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n NO\r\n </div>\r\n </app-cs-radio>\r\n </div>\r\n\r\n <ng-container *ngIf=\"policyForm?.addReviewers\">\r\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\" [appScrollInView]=\"scrollToBottom\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewer', true)\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the person responsible for reviewing this policy\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\" [class.active]=\"activeSelector === 'reviewer'\"\r\n [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i (click)=\"remove('reviewer', reviewer)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewer?.member_name }}</span>\r\n </div>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n *ngIf=\"activeSelector !== 'reviewer'\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\"\r\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n [class.active]=\"activeSelector === 'reviewerFrequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <div class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n When does this policy needs to be reviewed?\r\n </div>\r\n <div (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\r\n SET A FREQUENCY\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" [class.active]=\"activeSelector === 'reviewerFrequency'\">\r\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\" [appTooltip]=\"reviewerFrequencyPlaceholder\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewerFrequencyPlaceholder }}\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Approval Workflow -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">APPROVAL <span class=\"required\">*</span></label>\r\n <button (click)=\"\r\n createApprovalWorkflow(); activateSelector('approvers', true)\r\n \" [class.disabled]=\"!policyForm?.selectedCategories?.length\"\r\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\">\r\n CREATE A NEW APPROVAL WORKFLOW\r\n </button>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length === 0 ||\r\n !selectedWorkflow[0]?.workflow_name\r\n \" (click)=\"\r\n clickApprovalWorkflow(true); activateSelector('approvers', true)\r\n \" class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the approval workflow for this policy\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"removeWorkflow()\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n selectedWorkflow[0]?.workflow_name }}</span>\r\n </div>\r\n <button (click)=\"editWorkflow(selectedWorkflow[0])\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\r\n <div *ngFor=\"\r\n let approval of selectedWorkflow[0]?.approval_workflow;\r\n let approvalIndex = index\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\" [appTooltip]=\"\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n }}\r\n </div>\r\n <div class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\">\r\n {{\r\n approval?.type === \"ROUNDROBIN\"\r\n ? \"ROUND-ROBIN\"\r\n : approval?.type === \"ANYONE\"\r\n ? \"ANY ONE\"\r\n : approval?.type\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\">\r\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n ></i\r\n > -->\r\n <div *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential' &&\r\n approval?.approvers?.length < 2\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\r\n </div>\r\n <div *ngIf=\"\r\n approval?.approvers?.length > 1 &&\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n 1\r\n </div>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"approval?.approvers[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n approval?.approvers[0]?.member_name }}</span>\r\n <button *ngIf=\"approval?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"workflowPopover.popover()\" placement=\"right\">\r\n +{{ approval?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of approval?.approvers | slice : 1;\r\n let approvalIndex = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"approver?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <!-- <i class=\"icons\"></i> -->\r\n <span *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">{{\r\n approvalIndex + 1 ===\r\n approval?.approvers?.length - 1\r\n ? \"Final\"\r\n : approvalIndex + 2\r\n }}</span>\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <!-- <div class=\"vx-d-flex vx-align-center\">\r\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n <button (click)=\"deleteLevel(approvalIndex)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> DELETE\r\n </button>\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\r\n !policyApprovalFlag &&\r\n !policyForm?.selectedApprovers[0]?.approvers?.length\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Access -->\r\n <div *ngIf=\"true\" class=\"form-group-row\" [class.active]=\"activeSelector === 'policyAccess'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'policyAccess' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"true\">\r\n <img *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" [src]=\"ASSETS.lock_scope\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length ||\r\n policyForm?.availableOnPortal\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\r\n </div>\r\n <div *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Who should be able to view this policy?\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3\" *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div *ngIf=\"policyForm?.policy_access_owners?.length\"\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'policyAccess',\r\n policyForm?.policy_access_owners[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n }}</span>\r\n <button *ngIf=\"policyForm?.policy_access_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyAccessPopover.popover()\" placement=\"left\">\r\n +{{ policyForm?.policy_access_owners.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.policy_access_owners.length > 0 &&\r\n policyForm?.policy_access_groups.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'accessGroup',\r\n policyForm?.policy_access_groups[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_groups[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_groups[0]?.group_name\r\n }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"accessGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 1\">\r\n +{{ policyForm?.policy_access_groups.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let user of policyForm?.policy_access_owners\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"user?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('policyAccess', user)\"></i>\r\n {{ user?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.policy_access_groups\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('accessGroup', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Everyone who has access to this Policy Category\r\n </div></app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\r\n class=\"vx-mt-1\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Select users/groups\r\n </div></app-cs-radio\r\n >\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.availableOnPortal\">\r\n <span class=\"vx-fs-13 vx-paragraph-txt\">Visible to All Current & Future Users</span>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-mt-2\">\r\n <app-cs-switch *ngIf=\"\r\n policyForm.availableOnPortal ||\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \" [(ngValue)]=\"policyForm.acceptSuggestions\">ACCEPT SUGGESTIONS\r\n <i class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\" [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"form-group-row\" *ngIf=\"false\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group approval-workflow\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <label class=\"vx-control-panel\">\r\n Approval workflow <span class=\"required\">*</span>\r\n <button (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \" class=\"button\">\r\n Create a new Approval Workflow\r\n </button>\r\n </label>\r\n <div class=\"select\" [class.disabled]=\"approverWorkFlowList?.length == 0\" *ngIf=\"\r\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\r\n policyForm?.selectedApprovers.length == 0\r\n \">\r\n <cs-select [ngModel]=\"selectedApprovalWorkflow\" (ngModelChange)=\"selectedWorkflowChange($event)\"\r\n [placeholder]=\"'Select approval workflow for this policy'\" name=\"selectedApprovalWorkflow\"\r\n [setMaxWidth]=\"true\">\r\n <cs-option *ngFor=\"let data of approverWorkFlowList\" [value]=\"data\">\r\n {{ data.workflow_name }}\r\n </cs-option>\r\n <cs-option [value]=\"-1\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">Create a new approval workflow</cs-option>\r\n </cs-select>\r\n </div>\r\n <ng-container *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\">\r\n <div class=\"selected\" *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\">\r\n <div class=\"workflow-label\">\r\n <p class=\"title\">Level {{ i + 1 }}</p>\r\n <p class=\"description\">{{ level.name }}</p>\r\n </div>\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\" *ngFor=\"\r\n let approver of level.approvers.slice(0, 1);\r\n let j = index\r\n \"><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\r\n j + 1\r\n }}</span>{{ approver.member_name }}</span>\r\n\r\n <button class=\"count\" *ngIf=\"level.approvers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"labelName.popover()\" placement=\"left\">\r\n +\r\n\r\n {{ level.approvers.slice(1).length }}\r\n </button>\r\n <app-popover #labelName [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of level.approvers | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">\r\n {{\r\n j == level.approvers.slice(1).length - 1\r\n ? \"Final\"\r\n : j + 2\r\n }}\r\n </span>\r\n {{ approver.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"\r\n activateSelector('approvers', true, level.name);\r\n approversListIndex = i\r\n \">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <button class=\"close-btn\" (click)=\"remove('workflowLevel', level, i)\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers?.length &&\r\n !policyApprovalFlag\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\" *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"><button\r\n class=\"button\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">\r\n + Add More Levels\r\n </button></label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Who / now Attestation -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'assignees' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedAssignees?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedAssignees?.length == 0 ||\r\n activeSelector === 'assignees'\r\n \" [src]=\"ASSETS.case_assignees\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 &&\r\n activeSelector !== 'assignees'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Attestation</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\" *ngIf=\"\r\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\r\n (policyForm?.selectedAssignees?.length == 0 &&\r\n groupEnabled &&\r\n policyForm?.selectedGroupAssignee.length == 0)\r\n \" (click)=\"activateSelector('assignees', true)\"\r\n [class.disabled]=\"policyForm.selectedAllAttestors\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n {{\r\n policyForm.selectedAllAttestors ? 'All users have been selected.' : \r\n 'Select the persons responsible for attesting this policy.'\r\n }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\" *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\r\n \">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('assignees', assignee)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assignee.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assignee.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"assigneePopover.popover()\" placement=\"left\"\r\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\">\r\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"groupEnabled\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('assignees', policyForm?.selectedAssignees[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.selectedAssignees[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"UserPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedAssignees.length > 1\">\r\n +{{ policyForm?.selectedAssignees.length - 1 }}\r\n </button>\r\n </div>\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.selectedAssignees.length > 0 &&\r\n policyForm?.selectedGroupAssignee.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove(\r\n 'groupAssignees',\r\n policyForm?.selectedGroupAssignee[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.selectedGroupAssignee[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.selectedGroupAssignee[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"group.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\">\r\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('assignees', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n (((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm.selectedGroupAssignee.length == 0 &&\r\n policyForm?.frequency_details &&\r\n groupEnabled) ||\r\n (isSendForAttestation &&\r\n (policyForm?.selectedAssignees?.length === 0 && !policyForm.selectedAllAttestors)))\r\n \" id=\"whovalidatemsg\" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the persons required to attest to this Policy.\r\n </p>\r\n <app-cs-switch\r\n [(ngValue)]=\"policyForm.selectedAllAttestors\"\r\n (ngValueChange)=\"onAllAttestorsToggle($event)\"\r\n class=\"who-toggle\">Select all users within your organization\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, all users within your organization will be required to attest this policy.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-cs-switch [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\r\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors\" class=\"who-toggle\">THIS POLICY REQUIRES\r\n E-SIGNATURE FOR ATTESTATION\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.selectedGroupAssignee | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"></i>\r\n {{ data.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n <!-- overseer -->\r\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCGroupEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer end -->\r\n\r\n <!-- overseer fail start -->\r\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCFailEmailGroup | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupFailEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer fail end -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- When -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'frequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">When?</label>\r\n\r\n <div *ngIf=\"policyForm?.frequency_details == ''\" class=\"select button-sec\">\r\n <div class=\"custom-input frequency-custom-input\" (click)=\"activateSelector('frequency', true)\">\r\n {{ frequencyPlaceholder }}\r\n </div>\r\n\r\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <!-- <div\r\n *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec\"\r\n > -->\r\n <div *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('frequency', rc)\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <!-- </div>\r\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\r\n <button\r\n *ngIf=\"activeSelector !== 'frequency'\"\r\n type=\"button\"\r\n class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\"\r\n >\r\n <i class=\"icons\"></i>Edit\r\n </button> -->\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n ((policyForm?.selectedAssignees?.length > 0 &&\r\n !policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0) &&\r\n !policyForm?.frequency_details &&\r\n groupEnabled))\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select an attestation schedule for this policy.\r\n </p>\r\n\r\n <p *ngIf=\"submitted && policyForm?.frequency_details && policyForm?.selectedAssignees?.length > 0 && isPastDate\"\r\n class=\"error-message\">\r\n Set a future date.\r\n </p>\r\n\r\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\r\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkpoints / Assessment of Understanding -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"true\"\r\n [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'checkpoints' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Assessment of Understanding\r\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\r\n (click)=\"activateSelector('checkpoints', true)\">\r\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\r\n <div class=\"custom-input\">\r\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\r\n of the policy.\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"policyForm?.checkpointDetails?.length > 0\">\r\n <!-- <div class=\"chip-container\">\r\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\r\n\r\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\r\n\r\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\r\n\r\n </div> -->\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\r\n policyForm?.checkpointDetails?.length +\r\n (policyForm?.checkpointDetails?.length > 1\r\n ? \" Questions\"\r\n : \" Question\")\r\n }}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('checkpoints', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\"></i>\r\n {{ checkpoint?.question }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Risk Classification -->\r\n <div class=\"form-group-row\" *ngIf=\"showRiskClassification && false\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\r\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"policyForm?.riskRating\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Classification</label>\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\"let class of riskClassification\" [ngClass]=\"[class.class]\">\r\n <input type=\"radio\" name=\"classification\" [value]=\"class.value\"\r\n [checked]=\"policyForm?.riskRating === class.value\" [(ngModel)]=\"policyForm.riskRating\" />\r\n <span>{{ class.name }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Responsibility Center -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addResponsibilityCenters\"\r\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'rc' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\r\n \" [src]=\"ASSETS.responsibility_center\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center</label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('rc', true)\"\r\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ rc.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"rcPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.selectedRCs?.length > 1\">\r\n +{{ policyForm?.selectedRCs?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('rc', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let rc of policyForm?.selectedRCs | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\r\n {{ rc.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Version -->\r\n <div *ngIf=\"policyForm.addVersion\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\r\n <img [src]=\"ASSETS.associated_risks\" alt=\"name\" *ngIf=\"!policyForm.policy_version\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_version\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">VERSION</label>\r\n <input [(ngModel)]=\"policyForm.policy_version\" (change)=\"onVersion($event)\" type=\"text\"\r\n placeholder=\"Specify the policy version.\" />\r\n <p *ngIf=\"!isVersionValid\" class=\"error-message\" [appScrollInView]=\"true\">\r\n {{ versionErrorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Reviewer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addReviewers && false\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedReviewers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedReviewers?.length == 0 ||\r\n activeSelector === 'reviewer'\r\n \" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n activeSelector !== 'reviewer'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Reviewer </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedReviewers?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\"\r\n placeholder=\"Select the person responsible for reviewing this policy\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedReviewers?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('reviewer', reviewer)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\r\n </ng-container>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length == 0 &&\r\n policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select a reviewer for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\">When? </label>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\" class=\"select button-sec\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewerFrequency', true)\"\r\n [placeholder]=\"reviewerFrequencyPlaceholder\" readonly />\r\n <button (click)=\"activateSelector('reviewerFrequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\" class=\"selected button-sec\">\r\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\" #formatEvidence\r\n [mode]=\"'policyReviewer'\" [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\">\r\n </app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Overseer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addOverseers\" [class.active]=\"\r\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\r\n \">\r\n <img *ngIf=\"\r\n (policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCEmail?.length == 0) ||\r\n activeSelector === 'ccEmail' ||\r\n activeSelector === 'ccFail'\r\n \" [src]=\"ASSETS.oversight\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n (policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCEmail?.length > 0) &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Oversight</label>\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCEmail?.length == 0 &&\r\n policyForm?.CCGroupEmail.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccEmail', true)\"\r\n placeholder=\"Who should have oversight of this policy?\" readonly />\r\n </div>\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCEmail?.length > 0 ||\r\n policyForm?.CCGroupEmail.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccEmail.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccEmail.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccEmailPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCEmail[0].employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCEmail.length > 0 &&\r\n policyForm?.CCGroupEmail?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCGroupEmail[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\">\r\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccEmail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCFailEmailGroup?.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccFail', true)\"\r\n placeholder=\"Who should be notified if the policy is not attested on time?\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccFail.employee_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccFail.employee_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmail[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 &&\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmailGroup[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerFailGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\">\r\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccFail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccEmail of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n {{ ccEmail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccFail of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n {{ ccFail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Related Documents -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addAssociatedDocuments\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\">\r\n <img *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\" [mode]=\"'policy'\"\r\n [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"></app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Programs & Responsibilities -->\r\n <div *ngIf=\"policyForm?.addLinkProgram\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'linkProgram'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'linkProgram' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.programSelectedValues?.program?.category_id\r\n \">\r\n <img *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\" [src]=\"ASSETS.link_items\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK PROGRAMS & RESPONSIBILITIES</label>\r\n <div *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\r\n (click)=\"activateSelector('linkProgram', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select Programs & responsibilities that are<br />associated with\r\n this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"\r\n remove('linkProgram', policyForm?.programSelectedValues)\r\n \" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.programSelectedValues?.program?.name }}</span>\r\n <!-- <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"programResponsibilityPopover.popover()\"\r\n placement=\"left\"\r\n >\r\n +4\r\n </button> -->\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n 'Reporting information security weaknesses'\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Reporting information security weaknesses\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('linkProgram', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Assessment -->\r\n <div *ngIf=\"policyForm.addLinkAssessment\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isAssessment' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\r\n <img *ngIf=\"!policyForm?.assessment?.length\" [src]=\"ASSETS.assessments\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.assessment?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\r\n <div *ngIf=\"policyForm?.assessment?.length === 0\" (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select assessments that are associated with this<br />policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.assessment?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n }}</span>\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assessment of policyForm.assessment | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n assessment?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n {{ assessment?.assessmentDetails?.assessment_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Related Polices -->\r\n\r\n <div *ngIf=\"policyForm.addLinkPolicies\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isLinkedPolices' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\r\n <img *ngIf=\"!SelectedListOfPolicies?.length\" [src]=\"LINKS.linkedPolicyImage\" alt=\"\" />\r\n\r\n <svg *ngIf=\"SelectedListOfPolicies?.length\" class=\"checkIcon\" [xmlns]=\"LINKS.checked\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\r\n <div *ngIf=\"SelectedListOfPolicies?.length === 0\" (click)=\"activateSelector('isLinkedPolices', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select policies that are associated with this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\">\r\n <i (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policy?.contract_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ policy?.contract_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"SelectedListOfPolicies?.length > 1\" type=\"button\" appPopover (click)=\"relatedPolicy.popover()\"\r\n placement=\"left\">\r\n +{{ SelectedListOfPolicies?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let policy of SelectedListOfPolicies | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"\r\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\r\n \"></i>\r\n {{ policy?.contract_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-cs-switch [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\r\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\" class=\"who-toggle\">DISPLAY ON THE POLICY PORTAL\r\n <i class=\"icons\" [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <app-checkbox-list [config]=\"categoryConfig\" [twoColumn]=\"false\" [itemsList]=\"categoryList\"\r\n [selectedItems]=\"policyForm.selectedCategories\" [identifierKey]=\"'_id'\" [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\" *ngIf=\"activeSelector === 'category'\" (saveList)=\"saveSelectedList('category', $event)\"\r\n (closeList)=\"disableSelector()\" [loaded]=\"!categoriesListLoaded\">\r\n </app-checkbox-list>\r\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\r\n [itemsList]=\"\"\r\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\r\n</app-checkbox-list> -->\r\n\r\n <app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"rcList\"\r\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"disableSelector()\" [loaded]=\"rcListLoaded\">\r\n </app-responsibility-centers-list>\r\n\r\n <app-link-related-policies *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\" [policyId]=\"policyId\" [mode]=\"mode\"\r\n [selectedPolicies]=\"SelectedListOfPolicies\" (closeLinkPolicyList)=\"disableSelector()\"\r\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"></app-link-related-policies>\r\n\r\n <app-users-radio-list *ngIf=\"activeSelector === 'reviewer'\" [itemEmailKey]=\"'member_email'\" [usersList]=\"allReviewers\"\r\n [headerText]=\"'Select a Reviewer'\" [selectedUsers]=\"policyForm.selectedReviewers\" [userIdKey]=\"'member_id'\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-users-radio-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\" [groupEnabled]=\"true\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCEmail\" [selectedGroups]=\"policyForm.CCGroupEmail\" [isPaginationEnabled]=\"isPaginationEnabled\"\r\n (save)=\"saveSelectedList('ccEmail', $event)\" (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccFail' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [selectedGroups]=\"policyForm.CCFailEmailGroup\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (save)=\"saveSelectedList('ccFail', $event)\"\r\n (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-group-users-list *ngIf=\"activeSelector === 'assignees' && !groupEnabled\" [usersList]=\"assigneesList\"\r\n [groupsList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.selectedAssignees\" [userIdKey]=\"'my_member_id'\"\r\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"disableSelector()\">\r\n </app-group-users-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'assignees' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" (save)=\"saveSelectedList('assignees', $event)\" (cancel)=\"disableSelector()\"\r\n [selectedGroups]=\"policyForm.selectedGroupAssignee\" [selectedUsers]=\"policyForm.selectedAssignees\"\r\n [featureflag]=\"groupEnabled\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n </app-owner-list>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [mode]=\"'policy'\"\r\n [frequencyDetails]=\"frequencyDetails\" (selectedFrequency)=\"frequencyData($event)\" [feature]=\"feature\"\r\n [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'reviewerFrequency'\" [mode]=\"'reviewerFrequency'\"\r\n [frequencyDetails]=\"reviewerFrequencyDetails\" (selectedFrequency)=\"reviewerFrequencyData($event)\"\r\n [feature]=\"feature\" [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <vc-link-program *ngIf=\"activeSelector === 'linkProgram'\" (close)=\"disableSelector()\" [policy]=\"policyForm\"\r\n [selectedProgram]=\"policyForm?.programSelectedValues\" [mode]=\"mode\" [selectedLinkProgram]=\"selectedLinkProgram\"\r\n (changeTab)=\"changeTab('linkedPrograms')\" (updatedProgramDetails)=\"updatedProgramDetails($event)\">\r\n </vc-link-program>\r\n\r\n <app-checkpoints-policy-container (closeCheckPoint)=\"disableSelector()\"\r\n [checkpointData]=\"policyForm?.checkpointDetails\" [requiredPoint]=\"policyForm?.passingMarks\"\r\n *ngIf=\"activeSelector === 'checkpoints'\"\r\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"></app-checkpoints-policy-container>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n <app-approval-workflow *ngIf=\"enableApprovalWorkflow\" [selectedCategory]=\"policyForm?.selectedCategories\"\r\n [approverWorkFlowList]=\"approverWorkFlowList\" [allApprovers]=\"allApprovers\"\r\n (listCancelClicked)=\"listCancelClicked($event)\" (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\r\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\" [editApprovalWorkflow]=\"editApprovalWorkflow\"\r\n [createApprovalClick]=\"createApprovalClick\" (closeCreateClicked)=\"closeClickedCreateForm()\"\r\n [editWorkflowLevel]=\"editWorkflowLevel\"></app-approval-workflow>\r\n <!-- <app-select-approvers></app-select-approvers> -->\r\n\r\n <app-policy-access *ngIf=\"activeSelector === 'policyAccess'\" [policyAccessType]=\"policyForm?.policy_access_type\"\r\n (close)=\"disableSelector()\" [orgUsersList]=\"paginatedUsersList?.users\" [usersAccessList]=\"usersAccessList\"\r\n [groupList]=\"overseerGroupsList\" [groupsAccessList]=\"groupsAccessList\"\r\n [selectedUsers]=\"policyForm?.policy_access_owners\" [selectedGroups]=\"policyForm?.policy_access_groups\"\r\n [disabledIds]=\"usersAccessListIds\" [disabledGroupIds]=\"groupsAccessListIds\"\r\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\" (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\r\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\" [loading]=\"paginatedUsersList?.loading\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\" [featureflag]=\"groupEnabled\">\r\n </app-policy-access>\r\n</ng-container>\r\n<ng-container *ngIf=\"showCreateDocuments\">\r\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\r\n [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\"\r\n [userInfo]=\"userInfo\"\r\n [policyId]=\"policyId\"\r\n [policyName]=\"policyForm.policyName\"\r\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\"\r\n ></app-create-documents> -->\r\n <lib-document-section *ngIf=\"showCreateDocuments\" [templateView]=\"templateView\" [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\" [userInfo]=\"userInfo\" [policyId]=\"policyId\" [feature]=\"feature\"\r\n [templateUrl]=\"templateUrl\" [policyName]=\"policyForm.policyName\" (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\" (openTemplate)=\"templateView = true\"></lib-document-section>\r\n</ng-container>\r\n\r\n<app-assessment-list *ngIf=\"activeSelector === 'isAssessment'\" [program_ids]=\"''\"\r\n [isEdit]=\"policyForm?.assessment?.length\" (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\r\n [selectedAssessment]=\"policyForm?.assessment[0]\" [mode]=\"'policy'\" (onAssessmentSelect)=\"\r\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\r\n \"></app-assessment-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n</app-owner-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'owners'\" [listHeading]=\"'Select Owner(s)'\" [singularText]=\"'User selected'\"\r\n [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"false\" [userIdKey]=\"'member_id'\"\r\n [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('owners', $event)\"\r\n (closeUsersList)=\"disableSelector()\" [mode]=\"mode\" [selectedUsers]=\"policyForm?.policy_owners ?? []\">\r\n</app-owner-list>\r\n\r\n<app-select-template-list *ngIf=\"templateView\" [selectedCategoryId]=\"policyForm?.selectedCategories\" [feature]=\"feature\"\r\n (onTemplateSelect)=\"onTemplateSelect($event)\"></app-select-template-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.right app-format-and-evidence~.error-message{position:relative;top:-12px}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}::ng-deep .wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"], dependencies: [{ kind: "directive", type: i17.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: i17.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i17.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i18.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i19.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i20.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i21.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i22.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i23.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i17.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i24.CsSelectComponent, selector: "cs-select", inputs: ["dropdownLabel", "dropdownSubLabel", "isRequired", "placeholder", "setMaxWidth"], outputs: ["valueChanged"] }, { kind: "component", type: i25.CsOptionComponent, selector: "cs-option", inputs: ["value", "color", "backgroundColor", "optionTooltip"] }, { kind: "component", type: i26.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "component", type: i27.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i28.UserGroupListComponent, selector: "user-group-list", inputs: ["groupEnabled", "panelTitle", "singleSelect", "selectedReviewer", "featureflag", "reviewerWorkflowType", "mode", "fieldType", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds", "FromProgram", "userListInfo", "groupListInfo", "fromApprovalWorkflow", "approvalType", "showFutureUsersSwitch", "futureUsersWillSelect", "isAllDisabled", "isGroupTabShow", "disabledIds", "nonRemovableUserIds", "allUserSelectedDisabled", "nonRemovableGroupIds", "loading", "userlist", "selectedUsers", "defaultSelectedUsers", "userType", "isPaginationEnabled", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i29.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i30.GroupUsersListComponent, selector: "app-group-users-list", inputs: ["groupsEnabled", "usersList", "groupsList", "selectedUsers", "userIdKey", "groupIdKey", "openedFrom", "selectedGroups", "assigneeGroupsList", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "loader", "isDisabledSelected"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i31.SelectTemplateListComponent, selector: "app-select-template-list", inputs: ["selectedCategoryId", "feature"], outputs: ["onTemplateSelect"] }, { kind: "component", type: i32.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData", "isMandatory"], outputs: ["updateFiles"] }, { kind: "component", type: i33.CheckboxListComponent, selector: "app-checkbox-list", inputs: ["itemsList", "selectedItems", "identifierKey", "displayKey", "tooltipKey", "config", "twoColumn", "loaded"], outputs: ["closeList", "saveList"] }, { kind: "component", type: i34.OwnerListComponent, selector: "app-owner-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "showWorkflow", "listHeading", "searchPlaceholder", "pluralText", "singularText", "reviewerWorkflowType", "mode", "noDataText", "workflowList", "workflowText", "disabledIds", "nonRemovableUsersList", "fromResponsibility", "assignorId", "assigneeIds", "reviewerIds", "overseerIds"], outputs: ["saveSelectedList", "closeUsersList", "reviewerWorkflowTypeChange"] }, { kind: "component", type: i35.UserRadioListComponent, selector: "app-users-radio-list", inputs: ["usersList", "selectedUsers", "userIdKey", "itemNameKey", "itemEmailKey", "disabledId", "fromResponsibility", "reviewerIds", "overseerIds", "assignorId", "headerText", "loaded"], outputs: ["saveSelectedList", "closeUsersList"] }, { kind: "component", type: i36.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i37.CheckpointsPolicyContainerComponent, selector: "app-checkpoints-policy-container", inputs: ["requiredPoint", "checkpointData"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i38.DocumentSectionComponent, selector: "lib-document-section", inputs: ["selectedDocumentType", "feature", "templateView", "policyId", "policyName", "organization_id", "member_obj_id", "userInfo", "templateUrl"], outputs: ["disconnectRefresh", "editPolicy", "openTemplate"] }, { kind: "component", type: i39.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i40.ApprovalWorkflowComponent, selector: "app-approval-workflow", inputs: ["approverWorkFlowList", "allApprovers", "selectedCategory", "editApprovalWorkflow", "createApprovalClick", "editWorkflowLevel"], outputs: ["selectedWorkflowNext", "listCancelClicked", "saveApprovalWorkflow", "closeCreateClicked"] }, { kind: "component", type: i41.PolicyAccessComponent, selector: "app-policy-access", inputs: ["policyAccessType", "SelectedCategory", "orgUsersList", "groupList", "selectedUsers", "selectedGroups", "disabledIds", "usersAccessList", "groupsAccessList", "disabledGroupIds", "futureUsersWillSelect", "loading", "userListInfo", "isPaginationEnabled", "featureflag"], outputs: ["close", "saveCheckPoint", "setPolicyAccessType", "fetchUserData"] }, { kind: "component", type: i42.LinkProgramComponent, selector: "vc-link-program", inputs: ["policy", "currentTab", "mode", "programsList", "selectedProgram", "selectedCategories", "selectedLinkProgram", "hideProgramsList"], outputs: ["changeTab", "updatedProgramDetails", "save", "close", "refreshLinkedPolicies"] }, { kind: "component", type: i43.LinkRelatedPoliciesComponent, selector: "app-link-related-policies", inputs: ["selectedPolicies", "mode", "policyId"], outputs: ["closeLinkPolicyList", "selectedList"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
|
|
2159
2191
|
}
|
|
2160
2192
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, decorators: [{
|
|
2161
2193
|
type: Component,
|
|
2162
|
-
args: [{ selector: 'app-workflow-policy', template: "<!-- <p>workflow-policy works!</p> -->\r\n\r\n<ng-container *ngIf=\"!showCreateDocuments\">\r\n <div class=\"workflow-policy\">\r\n <!-- Policy Name -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\r\n <img [src]=\"ASSETS.what\" alt=\"name\" *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\" />\r\n\r\n <svg *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Policy Name <span class=\"required\">*</span>\r\n </label>\r\n <input type=\"text\" (keydown)=\"activeSelector = 'name'\" (focusin)=\"activateSelector('name', true)\"\r\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\r\n (focusout)=\"activateSelector('name', false)\" [ngModel]=\"policyForm.policyName\"\r\n (ngModelChange)=\"policyForm.policyName = changeName($event)\" placeholder=\"Name this policy\" />\r\n <div class=\"selected\" *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{ policyForm.policyName }}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"activateSelector('name', true)\" type=\"button\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"submitted && !policyForm.policyName.trim()\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Please enter a name for this policy.\r\n </p>\r\n <vcomply-editor [(ngModel)]=\"policyForm.policyNotes\" [editorConfig]=\"description\"></vcomply-editor>\r\n <!-- <app-cs-switch\r\n [(ngValue)]=\"policyForm.availableOnPortal\"\r\n (ngValueChange)=\"availabilityOnPortal($event)\"\r\n >\r\n Do you want this policy to be available on the portal?\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n >\r\n </app-cs-switch>\r\n <app-cs-switch\r\n *ngIf=\"policyForm.availableOnPortal\"\r\n [(ngValue)]=\"policyForm.acceptSuggestions\"\r\n >\r\n Accept suggestions\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n ></app-cs-switch> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'category'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'category' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedCategories?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedCategories?.length == 0 ||\r\n activeSelector === 'category'\r\n \" [src]=\"ASSETS.case_category\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedCategories?.length > 0 &&\r\n activeSelector !== 'category'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Policy Category <span class=\"required\">*</span>\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedCategories?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('category', true)\"\r\n placeholder=\"Select a category for this policy.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedCategories?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"\r\n let category of policyForm?.selectedCategories?.slice(0, 1)\r\n \">\r\n <i (click)=\"remove('category', category)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"category.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ category.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"policyForm?.selectedCategories?.length > 1\" type=\"button\" appPopover (click)=\"category.popover()\"\r\n placement=\"left\">\r\n +{{ policyForm?.selectedCategories?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\r\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('category',category)\"></i>\r\n {{category.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\r\n appPopover (click)=\"category.popover()\" placement=\"right\">+\r\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\r\n </div> -->\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #category [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let category of policyForm?.selectedCategories | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('category', category)\"></i>\r\n {{ category.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <p *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\" [appScrollInView]=\"true\"\r\n class=\"error-message\">\r\n Please select the category for this policy.\r\n </p>\r\n </div>\r\n\r\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\r\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\r\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag.tagname }}\" />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Effective Date -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img [src]=\"ASSETS.when\" alt=\"\" />\r\n\r\n <svg *ngIf=\"false\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the effective date of the policy.\"\r\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\" (click)=\"openDatePicker()\"\r\n id=\"effective-date\" />\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Owner -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'owners'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'owners' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\r\n <img *ngIf=\"!policyForm.policy_owners?.length\" [src]=\"ASSETS.im_creating\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_owners?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\r\n </div>\r\n <div *ngIf=\"!policyForm.policy_owners?.length\" (click)=\"activateSelector('owners', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select owners for this policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm.policy_owners?.length\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_owners[0]?.member_name }}</span>\r\n\r\n <button *ngIf=\"policyForm?.policy_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyUserPopover.popover()\" placement=\"left\">\r\n + {{ policyForm?.policy_owners.length - 1 }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"false\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\">\r\n &\r\n </div>\r\n <div *ngIf=\"false\" class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">Samantha Jones</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"policyGroupPopover.popover()\" placement=\"right\">\r\n +4\r\n </button>\r\n </div>\r\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let owner of policyForm?.policy_owners | slice : 1;\r\n let i = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"owner?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i (click)=\"remove('owners', owner, i + 1)\" class=\"icons\"></i>\r\n {{ owner?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"'Harshvardhan Kariwala'\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Harshvardhan Kariwala\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button (click)=\"activateSelector('owners', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"submitted && !policyForm?.policy_owners?.length\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select owners for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Review -->\r\n <div class=\"form-group-row\" [class.active]=\"\r\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\r\n <img *ngIf=\"!policyForm?.addReviewers\" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.addReviewers\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">REVIEW</label>\r\n <div class=\"reviewSelection vx-p-3 vx-pb-0\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\r\n Does this policy need to be reviewed?\r\n </div>\r\n <app-cs-radio name=\"review-type\" [checked]=\"policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(true)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n YES\r\n </div>\r\n </app-cs-radio>\r\n <app-cs-radio name=\"review-type\" [checked]=\"!policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(false)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n NO\r\n </div>\r\n </app-cs-radio>\r\n </div>\r\n\r\n <ng-container *ngIf=\"policyForm?.addReviewers\">\r\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\" [appScrollInView]=\"scrollToBottom\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewer', true)\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the person responsible for reviewing this policy\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\" [class.active]=\"activeSelector === 'reviewer'\"\r\n [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i (click)=\"remove('reviewer', reviewer)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewer?.member_name }}</span>\r\n </div>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n *ngIf=\"activeSelector !== 'reviewer'\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\"\r\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n [class.active]=\"activeSelector === 'reviewerFrequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <div class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n When does this policy needs to be reviewed?\r\n </div>\r\n <div (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\r\n SET A FREQUENCY\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" [class.active]=\"activeSelector === 'reviewerFrequency'\">\r\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\" [appTooltip]=\"reviewerFrequencyPlaceholder\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewerFrequencyPlaceholder }}\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Approval Workflow -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">APPROVAL <span class=\"required\">*</span></label>\r\n <button (click)=\"\r\n createApprovalWorkflow(); activateSelector('approvers', true)\r\n \" [class.disabled]=\"!policyForm?.selectedCategories?.length\"\r\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\">\r\n CREATE A NEW APPROVAL WORKFLOW\r\n </button>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length === 0 ||\r\n !selectedWorkflow[0]?.workflow_name\r\n \" (click)=\"\r\n clickApprovalWorkflow(true); activateSelector('approvers', true)\r\n \" class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the approval workflow for this policy\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"removeWorkflow()\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n selectedWorkflow[0]?.workflow_name }}</span>\r\n </div>\r\n <button (click)=\"editWorkflow(selectedWorkflow[0])\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\r\n <div *ngFor=\"\r\n let approval of selectedWorkflow[0]?.approval_workflow;\r\n let approvalIndex = index\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\" [appTooltip]=\"\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n }}\r\n </div>\r\n <div class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\">\r\n {{\r\n approval?.type === \"ROUNDROBIN\"\r\n ? \"ROUND-ROBIN\"\r\n : approval?.type === \"ANYONE\"\r\n ? \"ANY ONE\"\r\n : approval?.type\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\">\r\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n ></i\r\n > -->\r\n <div *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential' &&\r\n approval?.approvers?.length < 2\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\r\n </div>\r\n <div *ngIf=\"\r\n approval?.approvers?.length > 1 &&\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n 1\r\n </div>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"approval?.approvers[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n approval?.approvers[0]?.member_name }}</span>\r\n <button *ngIf=\"approval?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"workflowPopover.popover()\" placement=\"right\">\r\n +{{ approval?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of approval?.approvers | slice : 1;\r\n let approvalIndex = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"approver?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <!-- <i class=\"icons\"></i> -->\r\n <span *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">{{\r\n approvalIndex + 1 ===\r\n approval?.approvers?.length - 1\r\n ? \"Final\"\r\n : approvalIndex + 2\r\n }}</span>\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <!-- <div class=\"vx-d-flex vx-align-center\">\r\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n <button (click)=\"deleteLevel(approvalIndex)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> DELETE\r\n </button>\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\r\n !policyApprovalFlag &&\r\n !policyForm?.selectedApprovers[0]?.approvers?.length\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Access -->\r\n <div *ngIf=\"true\" class=\"form-group-row\" [class.active]=\"activeSelector === 'policyAccess'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'policyAccess' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"true\">\r\n <img *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" [src]=\"ASSETS.lock_scope\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length ||\r\n policyForm?.availableOnPortal\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\r\n </div>\r\n <div *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Who should be able to view this policy?\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3\" *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div *ngIf=\"policyForm?.policy_access_owners?.length\"\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'policyAccess',\r\n policyForm?.policy_access_owners[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n }}</span>\r\n <button *ngIf=\"policyForm?.policy_access_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyAccessPopover.popover()\" placement=\"left\">\r\n +{{ policyForm?.policy_access_owners.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.policy_access_owners.length > 0 &&\r\n policyForm?.policy_access_groups.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'accessGroup',\r\n policyForm?.policy_access_groups[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_groups[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_groups[0]?.group_name\r\n }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"accessGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 1\">\r\n +{{ policyForm?.policy_access_groups.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let user of policyForm?.policy_access_owners\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"user?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('policyAccess', user)\"></i>\r\n {{ user?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.policy_access_groups\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('accessGroup', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Everyone who has access to this Policy Category\r\n </div></app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\r\n class=\"vx-mt-1\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Select users/groups\r\n </div></app-cs-radio\r\n >\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.availableOnPortal\">\r\n <span class=\"vx-fs-13 vx-paragraph-txt\">Visible to All Current & Future Users</span>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-mt-2\">\r\n <app-cs-switch *ngIf=\"\r\n policyForm.availableOnPortal ||\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \" [(ngValue)]=\"policyForm.acceptSuggestions\">ACCEPT SUGGESTIONS\r\n <i class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\" [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"form-group-row\" *ngIf=\"false\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group approval-workflow\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <label class=\"vx-control-panel\">\r\n Approval workflow <span class=\"required\">*</span>\r\n <button (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \" class=\"button\">\r\n Create a new Approval Workflow\r\n </button>\r\n </label>\r\n <div class=\"select\" [class.disabled]=\"approverWorkFlowList?.length == 0\" *ngIf=\"\r\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\r\n policyForm?.selectedApprovers.length == 0\r\n \">\r\n <cs-select [ngModel]=\"selectedApprovalWorkflow\" (ngModelChange)=\"selectedWorkflowChange($event)\"\r\n [placeholder]=\"'Select approval workflow for this policy'\" name=\"selectedApprovalWorkflow\"\r\n [setMaxWidth]=\"true\">\r\n <cs-option *ngFor=\"let data of approverWorkFlowList\" [value]=\"data\">\r\n {{ data.workflow_name }}\r\n </cs-option>\r\n <cs-option [value]=\"-1\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">Create a new approval workflow</cs-option>\r\n </cs-select>\r\n </div>\r\n <ng-container *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\">\r\n <div class=\"selected\" *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\">\r\n <div class=\"workflow-label\">\r\n <p class=\"title\">Level {{ i + 1 }}</p>\r\n <p class=\"description\">{{ level.name }}</p>\r\n </div>\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\" *ngFor=\"\r\n let approver of level.approvers.slice(0, 1);\r\n let j = index\r\n \"><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\r\n j + 1\r\n }}</span>{{ approver.member_name }}</span>\r\n\r\n <button class=\"count\" *ngIf=\"level.approvers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"labelName.popover()\" placement=\"left\">\r\n +\r\n\r\n {{ level.approvers.slice(1).length }}\r\n </button>\r\n <app-popover #labelName [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of level.approvers | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">\r\n {{\r\n j == level.approvers.slice(1).length - 1\r\n ? \"Final\"\r\n : j + 2\r\n }}\r\n </span>\r\n {{ approver.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"\r\n activateSelector('approvers', true, level.name);\r\n approversListIndex = i\r\n \">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <button class=\"close-btn\" (click)=\"remove('workflowLevel', level, i)\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers?.length &&\r\n !policyApprovalFlag\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\" *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"><button\r\n class=\"button\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">\r\n + Add More Levels\r\n </button></label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Who / now Attestation -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'assignees' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedAssignees?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedAssignees?.length == 0 ||\r\n activeSelector === 'assignees'\r\n \" [src]=\"ASSETS.case_assignees\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 &&\r\n activeSelector !== 'assignees'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Attestation</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\" *ngIf=\"\r\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\r\n (policyForm?.selectedAssignees?.length == 0 &&\r\n groupEnabled &&\r\n policyForm?.selectedGroupAssignee.length == 0)\r\n \" (click)=\"activateSelector('assignees', true)\"\r\n [class.disabled]=\"policyForm.selectedAllAttestors\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n {{\r\n policyForm.selectedAllAttestors ? 'All Users Selected' : \r\n 'Select the persons responsible for attesting this policy.'\r\n }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\" *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\r\n \">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('assignees', assignee)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assignee.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assignee.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"assigneePopover.popover()\" placement=\"left\"\r\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\">\r\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"groupEnabled\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('assignees', policyForm?.selectedAssignees[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.selectedAssignees[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"UserPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedAssignees.length > 1\">\r\n +{{ policyForm?.selectedAssignees.length - 1 }}\r\n </button>\r\n </div>\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.selectedAssignees.length > 0 &&\r\n policyForm?.selectedGroupAssignee.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove(\r\n 'groupAssignees',\r\n policyForm?.selectedGroupAssignee[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.selectedGroupAssignee[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.selectedGroupAssignee[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"group.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\">\r\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('assignees', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n (((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm.selectedGroupAssignee.length == 0 &&\r\n policyForm?.frequency_details &&\r\n groupEnabled) ||\r\n (isSendForAttestation &&\r\n (policyForm?.selectedAssignees?.length === 0 && !policyForm.selectedAllAttestors)))\r\n \" id=\"whovalidatemsg\" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the persons required to attest to this Policy.\r\n </p>\r\n <app-cs-switch [(ngValue)]=\"policyForm.selectedAllAttestors\"\r\n (ngValueChange)=\"onAllAttestorsToggle($event)\"\r\n class=\"who-toggle\">Select all users within your organization\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, all users within your organization will be required to attest this policy.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-cs-switch [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\r\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors\" class=\"who-toggle\">THIS POLICY REQUIRES\r\n E-SIGNATURE FOR ATTESTATION\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.selectedGroupAssignee | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"></i>\r\n {{ data.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n <!-- overseer -->\r\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCGroupEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer end -->\r\n\r\n <!-- overseer fail start -->\r\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCFailEmailGroup | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupFailEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer fail end -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- When -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'frequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">When?</label>\r\n\r\n <div *ngIf=\"policyForm?.frequency_details == ''\" class=\"select button-sec\">\r\n <div class=\"custom-input frequency-custom-input\" (click)=\"activateSelector('frequency', true)\">\r\n {{ frequencyPlaceholder }}\r\n </div>\r\n\r\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <!-- <div\r\n *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec\"\r\n > -->\r\n <div *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('frequency', rc)\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <!-- </div>\r\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\r\n <button\r\n *ngIf=\"activeSelector !== 'frequency'\"\r\n type=\"button\"\r\n class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\"\r\n >\r\n <i class=\"icons\"></i>Edit\r\n </button> -->\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n ((policyForm?.selectedAssignees?.length > 0 &&\r\n !policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0) &&\r\n !policyForm?.frequency_details &&\r\n groupEnabled))\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select an attestation schedule for this policy.\r\n </p>\r\n\r\n <p *ngIf=\"submitted && policyForm?.frequency_details && policyForm?.selectedAssignees?.length > 0 && isPastDate\"\r\n class=\"error-message\">\r\n Set a future date.\r\n </p>\r\n\r\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\r\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkpoints / Assessment of Understanding -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"true\"\r\n [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'checkpoints' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Assessment of Understanding\r\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\r\n (click)=\"activateSelector('checkpoints', true)\">\r\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\r\n <div class=\"custom-input\">\r\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\r\n of the policy.\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"policyForm?.checkpointDetails?.length > 0\">\r\n <!-- <div class=\"chip-container\">\r\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\r\n\r\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\r\n\r\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\r\n\r\n </div> -->\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\r\n policyForm?.checkpointDetails?.length +\r\n (policyForm?.checkpointDetails?.length > 1\r\n ? \" Questions\"\r\n : \" Question\")\r\n }}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('checkpoints', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\"></i>\r\n {{ checkpoint?.question }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Risk Classification -->\r\n <div class=\"form-group-row\" *ngIf=\"showRiskClassification && false\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\r\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"policyForm?.riskRating\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Classification</label>\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\"let class of riskClassification\" [ngClass]=\"[class.class]\">\r\n <input type=\"radio\" name=\"classification\" [value]=\"class.value\"\r\n [checked]=\"policyForm?.riskRating === class.value\" [(ngModel)]=\"policyForm.riskRating\" />\r\n <span>{{ class.name }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Responsibility Center -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addResponsibilityCenters\"\r\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'rc' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\r\n \" [src]=\"ASSETS.responsibility_center\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center</label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('rc', true)\"\r\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ rc.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"rcPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.selectedRCs?.length > 1\">\r\n +{{ policyForm?.selectedRCs?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('rc', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let rc of policyForm?.selectedRCs | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\r\n {{ rc.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Version -->\r\n <div *ngIf=\"policyForm.addVersion\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\r\n <img [src]=\"ASSETS.associated_risks\" alt=\"name\" *ngIf=\"!policyForm.policy_version\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_version\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">VERSION</label>\r\n <input [(ngModel)]=\"policyForm.policy_version\" (change)=\"onVersion($event)\" type=\"text\"\r\n placeholder=\"Specify the policy version.\" />\r\n <p *ngIf=\"!isVersionValid\" class=\"error-message\" [appScrollInView]=\"true\">\r\n {{ versionErrorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Reviewer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addReviewers && false\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedReviewers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedReviewers?.length == 0 ||\r\n activeSelector === 'reviewer'\r\n \" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n activeSelector !== 'reviewer'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Reviewer </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedReviewers?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\"\r\n placeholder=\"Select the person responsible for reviewing this policy\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedReviewers?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('reviewer', reviewer)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\r\n </ng-container>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length == 0 &&\r\n policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select a reviewer for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\">When? </label>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\" class=\"select button-sec\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewerFrequency', true)\"\r\n [placeholder]=\"reviewerFrequencyPlaceholder\" readonly />\r\n <button (click)=\"activateSelector('reviewerFrequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\" class=\"selected button-sec\">\r\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\" #formatEvidence\r\n [mode]=\"'policyReviewer'\" [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\">\r\n </app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Overseer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addOverseers\" [class.active]=\"\r\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\r\n \">\r\n <img *ngIf=\"\r\n (policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCEmail?.length == 0) ||\r\n activeSelector === 'ccEmail' ||\r\n activeSelector === 'ccFail'\r\n \" [src]=\"ASSETS.oversight\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n (policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCEmail?.length > 0) &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Oversight</label>\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCEmail?.length == 0 &&\r\n policyForm?.CCGroupEmail.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccEmail', true)\"\r\n placeholder=\"Who should have oversight of this policy?\" readonly />\r\n </div>\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCEmail?.length > 0 ||\r\n policyForm?.CCGroupEmail.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccEmail.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccEmail.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccEmailPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCEmail[0].employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCEmail.length > 0 &&\r\n policyForm?.CCGroupEmail?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCGroupEmail[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\">\r\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccEmail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCFailEmailGroup?.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccFail', true)\"\r\n placeholder=\"Who should be notified if the policy is not attested on time?\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccFail.employee_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccFail.employee_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmail[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 &&\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmailGroup[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerFailGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\">\r\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccFail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccEmail of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n {{ ccEmail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccFail of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n {{ ccFail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Related Documents -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addAssociatedDocuments\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\">\r\n <img *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\" [mode]=\"'policy'\"\r\n [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"></app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Programs & Responsibilities -->\r\n <div *ngIf=\"policyForm?.addLinkProgram\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'linkProgram'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'linkProgram' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.programSelectedValues?.program?.category_id\r\n \">\r\n <img *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\" [src]=\"ASSETS.link_items\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK PROGRAMS & RESPONSIBILITIES</label>\r\n <div *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\r\n (click)=\"activateSelector('linkProgram', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select Programs & responsibilities that are<br />associated with\r\n this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"\r\n remove('linkProgram', policyForm?.programSelectedValues)\r\n \" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.programSelectedValues?.program?.name }}</span>\r\n <!-- <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"programResponsibilityPopover.popover()\"\r\n placement=\"left\"\r\n >\r\n +4\r\n </button> -->\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n 'Reporting information security weaknesses'\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Reporting information security weaknesses\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('linkProgram', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Assessment -->\r\n <div *ngIf=\"policyForm.addLinkAssessment\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isAssessment' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\r\n <img *ngIf=\"!policyForm?.assessment?.length\" [src]=\"ASSETS.assessments\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.assessment?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\r\n <div *ngIf=\"policyForm?.assessment?.length === 0\" (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select assessments that are associated with this<br />policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.assessment?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n }}</span>\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assessment of policyForm.assessment | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n assessment?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n {{ assessment?.assessmentDetails?.assessment_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Related Polices -->\r\n\r\n <div *ngIf=\"policyForm.addLinkPolicies\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isLinkedPolices' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\r\n <img *ngIf=\"!SelectedListOfPolicies?.length\" [src]=\"LINKS.linkedPolicyImage\" alt=\"\" />\r\n\r\n <svg *ngIf=\"SelectedListOfPolicies?.length\" class=\"checkIcon\" [xmlns]=\"LINKS.checked\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\r\n <div *ngIf=\"SelectedListOfPolicies?.length === 0\" (click)=\"activateSelector('isLinkedPolices', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select policies that are associated with this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\">\r\n <i (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policy?.contract_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ policy?.contract_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"SelectedListOfPolicies?.length > 1\" type=\"button\" appPopover (click)=\"relatedPolicy.popover()\"\r\n placement=\"left\">\r\n +{{ SelectedListOfPolicies?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let policy of SelectedListOfPolicies | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"\r\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\r\n \"></i>\r\n {{ policy?.contract_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-cs-switch [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\r\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\" class=\"who-toggle\">DISPLAY ON THE POLICY PORTAL\r\n <i class=\"icons\" [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <app-checkbox-list [config]=\"categoryConfig\" [twoColumn]=\"false\" [itemsList]=\"categoryList\"\r\n [selectedItems]=\"policyForm.selectedCategories\" [identifierKey]=\"'_id'\" [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\" *ngIf=\"activeSelector === 'category'\" (saveList)=\"saveSelectedList('category', $event)\"\r\n (closeList)=\"disableSelector()\" [loaded]=\"!categoriesListLoaded\">\r\n </app-checkbox-list>\r\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\r\n [itemsList]=\"\"\r\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\r\n</app-checkbox-list> -->\r\n\r\n <app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"rcList\"\r\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"disableSelector()\" [loaded]=\"rcListLoaded\">\r\n </app-responsibility-centers-list>\r\n\r\n <app-link-related-policies *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\" [policyId]=\"policyId\" [mode]=\"mode\"\r\n [selectedPolicies]=\"SelectedListOfPolicies\" (closeLinkPolicyList)=\"disableSelector()\"\r\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"></app-link-related-policies>\r\n\r\n <app-users-radio-list *ngIf=\"activeSelector === 'reviewer'\" [itemEmailKey]=\"'member_email'\" [usersList]=\"allReviewers\"\r\n [headerText]=\"'Select a Reviewer'\" [selectedUsers]=\"policyForm.selectedReviewers\" [userIdKey]=\"'member_id'\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-users-radio-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\" [groupEnabled]=\"true\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCEmail\" [selectedGroups]=\"policyForm.CCGroupEmail\" [isPaginationEnabled]=\"isPaginationEnabled\"\r\n (save)=\"saveSelectedList('ccEmail', $event)\" (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccFail' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [selectedGroups]=\"policyForm.CCFailEmailGroup\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (save)=\"saveSelectedList('ccFail', $event)\"\r\n (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-group-users-list *ngIf=\"activeSelector === 'assignees' && !groupEnabled\" [usersList]=\"assigneesList\"\r\n [groupsList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.selectedAssignees\" [userIdKey]=\"'my_member_id'\"\r\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"disableSelector()\">\r\n </app-group-users-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'assignees' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" (save)=\"saveSelectedList('assignees', $event)\" (cancel)=\"disableSelector()\"\r\n [selectedGroups]=\"policyForm.selectedGroupAssignee\" [selectedUsers]=\"policyForm.selectedAssignees\"\r\n [featureflag]=\"groupEnabled\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n </app-owner-list>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [mode]=\"'policy'\"\r\n [frequencyDetails]=\"frequencyDetails\" (selectedFrequency)=\"frequencyData($event)\" [feature]=\"feature\"\r\n [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'reviewerFrequency'\" [mode]=\"'reviewerFrequency'\"\r\n [frequencyDetails]=\"reviewerFrequencyDetails\" (selectedFrequency)=\"reviewerFrequencyData($event)\"\r\n [feature]=\"feature\" [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <vc-link-program *ngIf=\"activeSelector === 'linkProgram'\" (close)=\"disableSelector()\" [policy]=\"policyForm\"\r\n [selectedProgram]=\"policyForm?.programSelectedValues\" [mode]=\"mode\" [selectedLinkProgram]=\"selectedLinkProgram\"\r\n (changeTab)=\"changeTab('linkedPrograms')\" (updatedProgramDetails)=\"updatedProgramDetails($event)\">\r\n </vc-link-program>\r\n\r\n <app-checkpoints-policy-container (closeCheckPoint)=\"disableSelector()\"\r\n [checkpointData]=\"policyForm?.checkpointDetails\" [requiredPoint]=\"policyForm?.passingMarks\"\r\n *ngIf=\"activeSelector === 'checkpoints'\"\r\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"></app-checkpoints-policy-container>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n <app-approval-workflow *ngIf=\"enableApprovalWorkflow\" [selectedCategory]=\"policyForm?.selectedCategories\"\r\n [approverWorkFlowList]=\"approverWorkFlowList\" [allApprovers]=\"allApprovers\"\r\n (listCancelClicked)=\"listCancelClicked($event)\" (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\r\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\" [editApprovalWorkflow]=\"editApprovalWorkflow\"\r\n [createApprovalClick]=\"createApprovalClick\" (closeCreateClicked)=\"closeClickedCreateForm()\"\r\n [editWorkflowLevel]=\"editWorkflowLevel\"></app-approval-workflow>\r\n <!-- <app-select-approvers></app-select-approvers> -->\r\n\r\n <app-policy-access *ngIf=\"activeSelector === 'policyAccess'\" [policyAccessType]=\"policyForm?.policy_access_type\"\r\n (close)=\"disableSelector()\" [orgUsersList]=\"paginatedUsersList?.users\" [usersAccessList]=\"usersAccessList\"\r\n [groupList]=\"overseerGroupsList\" [groupsAccessList]=\"groupsAccessList\"\r\n [selectedUsers]=\"policyForm?.policy_access_owners\" [selectedGroups]=\"policyForm?.policy_access_groups\"\r\n [disabledIds]=\"usersAccessListIds\" [disabledGroupIds]=\"groupsAccessListIds\"\r\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\" (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\r\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\" [loading]=\"paginatedUsersList?.loading\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\" [featureflag]=\"groupEnabled\">\r\n </app-policy-access>\r\n</ng-container>\r\n<ng-container *ngIf=\"showCreateDocuments\">\r\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\r\n [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\"\r\n [userInfo]=\"userInfo\"\r\n [policyId]=\"policyId\"\r\n [policyName]=\"policyForm.policyName\"\r\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\"\r\n ></app-create-documents> -->\r\n <lib-document-section *ngIf=\"showCreateDocuments\" [templateView]=\"templateView\" [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\" [userInfo]=\"userInfo\" [policyId]=\"policyId\" [feature]=\"feature\"\r\n [templateUrl]=\"templateUrl\" [policyName]=\"policyForm.policyName\" (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\" (openTemplate)=\"templateView = true\"></lib-document-section>\r\n</ng-container>\r\n\r\n<app-assessment-list *ngIf=\"activeSelector === 'isAssessment'\" [program_ids]=\"''\"\r\n [isEdit]=\"policyForm?.assessment?.length\" (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\r\n [selectedAssessment]=\"policyForm?.assessment[0]\" [mode]=\"'policy'\" (onAssessmentSelect)=\"\r\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\r\n \"></app-assessment-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n</app-owner-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'owners'\" [listHeading]=\"'Select Owner(s)'\" [singularText]=\"'User selected'\"\r\n [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"false\" [userIdKey]=\"'member_id'\"\r\n [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('owners', $event)\"\r\n (closeUsersList)=\"disableSelector()\" [mode]=\"mode\" [selectedUsers]=\"policyForm?.policy_owners ?? []\">\r\n</app-owner-list>\r\n\r\n<app-select-template-list *ngIf=\"templateView\" [selectedCategoryId]=\"policyForm?.selectedCategories\" [feature]=\"feature\"\r\n (onTemplateSelect)=\"onTemplateSelect($event)\"></app-select-template-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.right app-format-and-evidence~.error-message{position:relative;top:-12px}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}::ng-deep .wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"] }]
|
|
2163
|
-
}], ctorParameters: function () { return [{ type: i1.PolicyService }, { type: i2.SnackBarService }, { type: i3.UiKitService }, { type: i4.AuthService }, { type: i5.ResponsibilityService }, { type: i6.Router }, { type: i6.ActivatedRoute }, { type: i7.FrequencyService }, { type: i8.PlatformLocation }, { type: i0.ChangeDetectorRef }, { type: i9.RestApiService }, { type: i10.CommonService }, { type: i11.OrganizationUserService }, { type: i12.OrganizationCommonService }, { type: i13.ComplianceCommonService }, { type: i14.IframeService }, { type: i15.DateUtilityService }]; }, propDecorators: { pickerChanged: [{
|
|
2194
|
+
args: [{ selector: 'app-workflow-policy', template: "<!-- <p>workflow-policy works!</p> -->\r\n\r\n<ng-container *ngIf=\"!showCreateDocuments\">\r\n <div class=\"workflow-policy\">\r\n <!-- Policy Name -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\r\n <img [src]=\"ASSETS.what\" alt=\"name\" *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\" />\r\n\r\n <svg *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Policy Name <span class=\"required\">*</span>\r\n </label>\r\n <input type=\"text\" (keydown)=\"activeSelector = 'name'\" (focusin)=\"activateSelector('name', true)\"\r\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\r\n (focusout)=\"activateSelector('name', false)\" [ngModel]=\"policyForm.policyName\"\r\n (ngModelChange)=\"policyForm.policyName = changeName($event)\" placeholder=\"Name this policy\" />\r\n <div class=\"selected\" *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\">\r\n <div class=\"chip-container\">\r\n <span class=\"value\">{{ policyForm.policyName }}</span>\r\n </div>\r\n <button class=\"edit\" (click)=\"activateSelector('name', true)\" type=\"button\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"submitted && !policyForm.policyName.trim()\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Please enter a name for this policy.\r\n </p>\r\n <vcomply-editor [(ngModel)]=\"policyForm.policyNotes\" [editorConfig]=\"description\"></vcomply-editor>\r\n <!-- <app-cs-switch\r\n [(ngValue)]=\"policyForm.availableOnPortal\"\r\n (ngValueChange)=\"availabilityOnPortal($event)\"\r\n >\r\n Do you want this policy to be available on the portal?\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n >\r\n </app-cs-switch>\r\n <app-cs-switch\r\n *ngIf=\"policyForm.availableOnPortal\"\r\n [(ngValue)]=\"policyForm.acceptSuggestions\"\r\n >\r\n Accept suggestions\r\n <i\r\n class=\"icons\"\r\n [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \"\r\n placement=\"bottom-right\"\r\n type=\"white\"\r\n delay=\"0\"\r\n [tooltipMandatory]=\"true\"\r\n ></i\r\n ></app-cs-switch> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Category -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'category'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'category' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedCategories?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedCategories?.length == 0 ||\r\n activeSelector === 'category'\r\n \" [src]=\"ASSETS.case_category\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedCategories?.length > 0 &&\r\n activeSelector !== 'category'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Policy Category <span class=\"required\">*</span>\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedCategories?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('category', true)\"\r\n placeholder=\"Select a category for this policy.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedCategories?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"\r\n let category of policyForm?.selectedCategories?.slice(0, 1)\r\n \">\r\n <i (click)=\"remove('category', category)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"category.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ category.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"policyForm?.selectedCategories?.length > 1\" type=\"button\" appPopover (click)=\"category.popover()\"\r\n placement=\"left\">\r\n +{{ policyForm?.selectedCategories?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\r\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\r\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\r\n class=\"icons\" (click)=\"remove('category',category)\"></i>\r\n {{category.item_name}}</span>\r\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\r\n appPopover (click)=\"category.popover()\" placement=\"right\">+\r\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\r\n </div> -->\r\n <button *ngIf=\"activeSelector !== 'category'\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector('category', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #category [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let category of policyForm?.selectedCategories | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('category', category)\"></i>\r\n {{ category.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <p *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\" [appScrollInView]=\"true\"\r\n class=\"error-message\">\r\n Please select the category for this policy.\r\n </p>\r\n </div>\r\n\r\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\r\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\r\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\r\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag.tagname }}\" />\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Effective Date -->\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"false\">\r\n <img [src]=\"ASSETS.when\" alt=\"\" />\r\n\r\n <svg *ngIf=\"false\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the effective date of the policy.\"\r\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\" (click)=\"openDatePicker()\"\r\n id=\"effective-date\" />\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Owner -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'owners'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'owners' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\r\n <img *ngIf=\"!policyForm.policy_owners?.length\" [src]=\"ASSETS.im_creating\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_owners?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\r\n </div>\r\n <div *ngIf=\"!policyForm.policy_owners?.length\" (click)=\"activateSelector('owners', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select owners for this policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm.policy_owners?.length\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_owners[0]?.member_name }}</span>\r\n\r\n <button *ngIf=\"policyForm?.policy_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyUserPopover.popover()\" placement=\"left\">\r\n + {{ policyForm?.policy_owners.length - 1 }}\r\n </button>\r\n </div>\r\n <div *ngIf=\"false\" class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\">\r\n &\r\n </div>\r\n <div *ngIf=\"false\" class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">Samantha Jones</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"policyGroupPopover.popover()\" placement=\"right\">\r\n +4\r\n </button>\r\n </div>\r\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let owner of policyForm?.policy_owners | slice : 1;\r\n let i = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"owner?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i (click)=\"remove('owners', owner, i + 1)\" class=\"icons\"></i>\r\n {{ owner?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"'Harshvardhan Kariwala'\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Harshvardhan Kariwala\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button (click)=\"activateSelector('owners', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"submitted && !policyForm?.policy_owners?.length\" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select owners for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Review -->\r\n <div class=\"form-group-row\" [class.active]=\"\r\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\r\n <img *ngIf=\"!policyForm?.addReviewers\" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.addReviewers\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">REVIEW</label>\r\n <div class=\"reviewSelection vx-p-3 vx-pb-0\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\r\n Does this policy need to be reviewed?\r\n </div>\r\n <app-cs-radio name=\"review-type\" [checked]=\"policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(true)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n YES\r\n </div>\r\n </app-cs-radio>\r\n <app-cs-radio name=\"review-type\" [checked]=\"!policyForm?.addReviewers\" (checkedEvent)=\"typeSelected(false)\">\r\n <div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\r\n NO\r\n </div>\r\n </app-cs-radio>\r\n </div>\r\n\r\n <ng-container *ngIf=\"policyForm?.addReviewers\">\r\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\" [appScrollInView]=\"scrollToBottom\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewer', true)\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the person responsible for reviewing this policy\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\" [class.active]=\"activeSelector === 'reviewer'\"\r\n [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i (click)=\"remove('reviewer', reviewer)\"\r\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"'Samantha Jones'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewer?.member_name }}</span>\r\n </div>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n *ngIf=\"activeSelector !== 'reviewer'\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\"\r\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n [class.active]=\"activeSelector === 'reviewerFrequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <div class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n When does this policy needs to be reviewed?\r\n </div>\r\n <div (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\r\n SET A FREQUENCY\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \" [class.active]=\"activeSelector === 'reviewerFrequency'\">\r\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\" [appTooltip]=\"reviewerFrequencyPlaceholder\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{ reviewerFrequencyPlaceholder }}\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Approval Workflow -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">APPROVAL <span class=\"required\">*</span></label>\r\n <button (click)=\"\r\n createApprovalWorkflow(); activateSelector('approvers', true)\r\n \" [class.disabled]=\"!policyForm?.selectedCategories?.length\"\r\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\">\r\n CREATE A NEW APPROVAL WORKFLOW\r\n </button>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length === 0 ||\r\n !selectedWorkflow[0]?.workflow_name\r\n \" (click)=\"\r\n clickApprovalWorkflow(true); activateSelector('approvers', true)\r\n \" class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select the approval workflow for this policy\r\n </div>\r\n </div>\r\n <div *ngIf=\"\r\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"removeWorkflow()\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n selectedWorkflow[0]?.workflow_name }}</span>\r\n </div>\r\n <button (click)=\"editWorkflow(selectedWorkflow[0])\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\r\n <div *ngFor=\"\r\n let approval of selectedWorkflow[0]?.approval_workflow;\r\n let approvalIndex = index\r\n \" class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"level-left vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block\">\r\n <div class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\" [appTooltip]=\"\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{\r\n approval?.alias_name\r\n ? approval?.alias_name\r\n : approval?.level1\r\n }}\r\n </div>\r\n <div class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\">\r\n {{\r\n approval?.type === \"ROUNDROBIN\"\r\n ? \"ROUND-ROBIN\"\r\n : approval?.type === \"ANYONE\"\r\n ? \"ANY ONE\"\r\n : approval?.type\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\">\r\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n ></i\r\n > -->\r\n <div *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential' &&\r\n approval?.approvers?.length < 2\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\r\n </div>\r\n <div *ngIf=\"\r\n approval?.approvers?.length > 1 &&\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \" class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\r\n 1\r\n </div>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"approval?.approvers[0]?.member_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n approval?.approvers[0]?.member_name }}</span>\r\n <button *ngIf=\"approval?.approvers?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"workflowPopover.popover()\" placement=\"right\">\r\n +{{ approval?.approvers?.length - 1 }}\r\n </button>\r\n </div>\r\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of approval?.approvers | slice : 1;\r\n let approvalIndex = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"approver?.member_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <!-- <i class=\"icons\"></i> -->\r\n <span *ngIf=\"\r\n approval?.type?.toLowerCase() === 'sequential'\r\n \"\r\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">{{\r\n approvalIndex + 1 ===\r\n approval?.approvers?.length - 1\r\n ? \"Final\"\r\n : approvalIndex + 2\r\n }}</span>\r\n {{ approver?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <!-- <div class=\"vx-d-flex vx-align-center\">\r\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n <button (click)=\"deleteLevel(approvalIndex)\"\r\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\r\n >\r\n <i class=\"icons vx-mr-1\"></i> DELETE\r\n </button>\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\r\n !policyApprovalFlag &&\r\n !policyForm?.selectedApprovers[0]?.approvers?.length\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Policy Access -->\r\n <div *ngIf=\"true\" class=\"form-group-row\" [class.active]=\"activeSelector === 'policyAccess'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'policyAccess' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"true\">\r\n <img *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" [src]=\"ASSETS.lock_scope\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length ||\r\n policyForm?.availableOnPortal\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\r\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\r\n </div>\r\n <div *ngIf=\"\r\n !policyForm?.policy_access_owners?.length &&\r\n !policyForm?.policy_access_groups?.length &&\r\n !policyForm?.availableOnPortal\r\n \" (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\r\n [class.disabled]=\"!policyForm?.selectedCategories?.length\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Who should be able to view this policy?\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3\" *ngIf=\"\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \">\r\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\">\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div *ngIf=\"policyForm?.policy_access_owners?.length\"\r\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'policyAccess',\r\n policyForm?.policy_access_owners[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_owners[0]?.employee_name\r\n }}</span>\r\n <button *ngIf=\"policyForm?.policy_access_owners?.length > 1\"\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"policyAccessPopover.popover()\" placement=\"left\">\r\n +{{ policyForm?.policy_access_owners.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.policy_access_owners.length > 0 &&\r\n policyForm?.policy_access_groups.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n *ngIf=\"policyForm?.policy_access_type === 1\" (click)=\"\r\n remove(\r\n 'accessGroup',\r\n policyForm?.policy_access_groups[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.policy_access_groups[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.policy_access_groups[0]?.group_name\r\n }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"accessGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.policy_access_groups.length > 1\">\r\n +{{ policyForm?.policy_access_groups.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let user of policyForm?.policy_access_owners\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"user?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('policyAccess', user)\"></i>\r\n {{ user?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.policy_access_groups\r\n | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" *ngIf=\"policyForm?.policy_access_type === 1\"\r\n (click)=\"remove('accessGroup', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Everyone who has access to this Policy Category\r\n </div></app-cs-radio\r\n >\r\n <app-cs-radio\r\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\r\n class=\"vx-mt-1\"\r\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\r\n Select users/groups\r\n </div></app-cs-radio\r\n >\r\n </div> -->\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.availableOnPortal\">\r\n <span class=\"vx-fs-13 vx-paragraph-txt\">Visible to All Current & Future Users</span>\r\n\r\n <button (click)=\"activateSelector('policyAccess', true)\"\r\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-mt-2\">\r\n <app-cs-switch *ngIf=\"\r\n policyForm.availableOnPortal ||\r\n policyForm?.policy_access_owners?.length ||\r\n policyForm?.policy_access_groups?.length\r\n \" [(ngValue)]=\"policyForm.acceptSuggestions\">ACCEPT SUGGESTIONS\r\n <i class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\" [appTooltip]=\"\r\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\r\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\"\r\n [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Approval Workflow -->\r\n <div class=\"form-group-row\" *ngIf=\"false\" [class.active]=\"activeSelector === 'approvers'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'approvers' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedApprovers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedApprovers?.length == 0 ||\r\n activeSelector === 'approvers'\r\n \" [src]=\"ASSETS.approval\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedApprovers?.length > 0 &&\r\n activeSelector !== 'approvers'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group approval-workflow\" [class.disabled]=\"policyApprovalFlag !== 0\">\r\n <label class=\"vx-control-panel\">\r\n Approval workflow <span class=\"required\">*</span>\r\n <button (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \" class=\"button\">\r\n Create a new Approval Workflow\r\n </button>\r\n </label>\r\n <div class=\"select\" [class.disabled]=\"approverWorkFlowList?.length == 0\" *ngIf=\"\r\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\r\n policyForm?.selectedApprovers.length == 0\r\n \">\r\n <cs-select [ngModel]=\"selectedApprovalWorkflow\" (ngModelChange)=\"selectedWorkflowChange($event)\"\r\n [placeholder]=\"'Select approval workflow for this policy'\" name=\"selectedApprovalWorkflow\"\r\n [setMaxWidth]=\"true\">\r\n <cs-option *ngFor=\"let data of approverWorkFlowList\" [value]=\"data\">\r\n {{ data.workflow_name }}\r\n </cs-option>\r\n <cs-option [value]=\"-1\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">Create a new approval workflow</cs-option>\r\n </cs-select>\r\n </div>\r\n <ng-container *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\">\r\n <div class=\"selected\" *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\">\r\n <div class=\"workflow-label\">\r\n <p class=\"title\">Level {{ i + 1 }}</p>\r\n <p class=\"description\">{{ level.name }}</p>\r\n </div>\r\n <div class=\"vx-d-flex vx-align-center\">\r\n <div class=\"chip-container\">\r\n <span class=\"chip\" *ngFor=\"\r\n let approver of level.approvers.slice(0, 1);\r\n let j = index\r\n \"><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\r\n j + 1\r\n }}</span>{{ approver.member_name }}</span>\r\n\r\n <button class=\"count\" *ngIf=\"level.approvers?.length > 1\" type=\"button\" appPopover\r\n (click)=\"labelName.popover()\" placement=\"left\">\r\n +\r\n\r\n {{ level.approvers.slice(1).length }}\r\n </button>\r\n <app-popover #labelName [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let approver of level.approvers | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('approvers', approver, i)\"></i>\r\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">\r\n {{\r\n j == level.approvers.slice(1).length - 1\r\n ? \"Final\"\r\n : j + 2\r\n }}\r\n </span>\r\n {{ approver.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"\r\n activateSelector('approvers', true, level.name);\r\n approversListIndex = i\r\n \">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <button class=\"close-btn\" (click)=\"remove('workflowLevel', level, i)\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n !policyForm?.selectedApprovers?.length &&\r\n !policyApprovalFlag\r\n \" [appScrollInView]=\"true\" class=\"error-message\">\r\n Select or create an approval workflow for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\" *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"><button\r\n class=\"button\" (click)=\"\r\n activateSelector('approvers', true);\r\n addMoreLevels = true;\r\n workflowType = 'SEQUENTIAL'\r\n \">\r\n + Add More Levels\r\n </button></label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Who / now Attestation -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'assignees' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedAssignees?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedAssignees?.length == 0 ||\r\n activeSelector === 'assignees'\r\n \" [src]=\"ASSETS.case_assignees\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 &&\r\n activeSelector !== 'assignees'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Attestation</label>\r\n <div class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\" *ngIf=\"\r\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\r\n (policyForm?.selectedAssignees?.length == 0 &&\r\n groupEnabled &&\r\n policyForm?.selectedGroupAssignee.length == 0)\r\n \" (click)=\"activateSelector('assignees', true)\"\r\n [class.disabled]=\"policyForm.selectedAllAttestors\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n {{\r\n policyForm.selectedAllAttestors ? 'All users have been selected.' : \r\n 'Select the persons responsible for attesting this policy.'\r\n }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\" *ngIf=\"\r\n policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\r\n \">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('assignees', assignee)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assignee.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assignee.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"assigneePopover.popover()\" placement=\"left\"\r\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\">\r\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"groupEnabled\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('assignees', policyForm?.selectedAssignees[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.selectedAssignees[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"UserPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedAssignees.length > 1\">\r\n +{{ policyForm?.selectedAssignees.length - 1 }}\r\n </button>\r\n </div>\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.selectedAssignees.length > 0 &&\r\n policyForm?.selectedGroupAssignee.length > 0\r\n \">\r\n &\r\n </div>\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove(\r\n 'groupAssignees',\r\n policyForm?.selectedGroupAssignee[0]\r\n )\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm?.selectedGroupAssignee[0]?.group_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.selectedGroupAssignee[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"group.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\">\r\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('assignees', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n\r\n <p *ngIf=\"\r\n submitted &&\r\n (((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors) &&\r\n policyForm.selectedGroupAssignee.length == 0 &&\r\n policyForm?.frequency_details &&\r\n groupEnabled) ||\r\n (isSendForAttestation &&\r\n (policyForm?.selectedAssignees?.length === 0 && !policyForm.selectedAllAttestors)))\r\n \" id=\"whovalidatemsg\" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the persons required to attest to this Policy.\r\n </p>\r\n <app-cs-switch\r\n [(ngValue)]=\"policyForm.selectedAllAttestors\"\r\n (ngValueChange)=\"onAllAttestorsToggle($event)\"\r\n class=\"who-toggle\">Select all users within your organization\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, all users within your organization will be required to attest this policy.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-cs-switch [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\r\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0 && !policyForm.selectedAllAttestors\" class=\"who-toggle\">THIS POLICY REQUIRES\r\n E-SIGNATURE FOR ATTESTATION\r\n <i class=\"icons\" [appTooltip]=\"\r\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\r\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let assignee of policyForm?.selectedAssignees | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"></i>\r\n {{ assignee.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #group [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.selectedGroupAssignee | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"></i>\r\n {{ data.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n <!-- overseer -->\r\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCGroupEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer end -->\r\n\r\n <!-- overseer fail start -->\r\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let overseer of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"></i>\r\n {{ overseer?.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let data of policyForm?.CCFailEmailGroup | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccGroupFailEmail', data)\"></i>\r\n {{ data?.group_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <!-- overseer fail end -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- When -->\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'frequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">When?</label>\r\n\r\n <div *ngIf=\"policyForm?.frequency_details == ''\" class=\"select button-sec\">\r\n <div class=\"custom-input frequency-custom-input\" (click)=\"activateSelector('frequency', true)\">\r\n {{ frequencyPlaceholder }}\r\n </div>\r\n\r\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <!-- <div\r\n *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec\"\r\n > -->\r\n <div *ngIf=\"policyForm?.frequency_details != ''\"\r\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"remove('frequency', rc)\" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n <!-- </div>\r\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\r\n <button\r\n *ngIf=\"activeSelector !== 'frequency'\"\r\n type=\"button\"\r\n class=\"edit\"\r\n (click)=\"activateSelector('frequency', true)\"\r\n >\r\n <i class=\"icons\"></i>Edit\r\n </button> -->\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n ((policyForm?.selectedAssignees?.length > 0 &&\r\n !policyForm?.frequency_details &&\r\n !groupEnabled) ||\r\n ((policyForm?.selectedAssignees?.length > 0 ||\r\n policyForm?.selectedGroupAssignee?.length > 0) &&\r\n !policyForm?.frequency_details &&\r\n groupEnabled))\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select an attestation schedule for this policy.\r\n </p>\r\n\r\n <p *ngIf=\"submitted && policyForm?.frequency_details && policyForm?.selectedAssignees?.length > 0 && isPastDate\"\r\n class=\"error-message\">\r\n Set a future date.\r\n </p>\r\n\r\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\r\n <div class=\"date-time-picker\">\r\n <div class=\"picker-group\">\r\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\r\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\r\n <i class=\"icons\"></i>\r\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\r\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\r\n </dp-date-picker>\r\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Checkpoints / Assessment of Understanding -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"true\"\r\n [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'checkpoints' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">\r\n Assessment of Understanding\r\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\r\n </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\r\n (click)=\"activateSelector('checkpoints', true)\">\r\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\r\n <div class=\"custom-input\">\r\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\r\n of the policy.\r\n </div>\r\n </div>\r\n <div class=\"selected\" *ngIf=\"policyForm?.checkpointDetails?.length > 0\">\r\n <!-- <div class=\"chip-container\">\r\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\r\n\r\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\r\n\r\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\r\n\r\n </div> -->\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\r\n policyForm?.checkpointDetails?.length +\r\n (policyForm?.checkpointDetails?.length > 1\r\n ? \" Questions\"\r\n : \" Question\")\r\n }}</span>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('checkpoints', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\"></i>\r\n {{ checkpoint?.question }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover> -->\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Risk Classification -->\r\n <div class=\"form-group-row\" *ngIf=\"showRiskClassification && false\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\r\n <img [src]=\"ASSETS.risks\" alt=\"im\" *ngIf=\"!policyForm?.riskRating\" />\r\n\r\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"policyForm?.riskRating\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Risk Classification</label>\r\n <div class=\"classification\">\r\n <label class=\"low\" *ngFor=\"let class of riskClassification\" [ngClass]=\"[class.class]\">\r\n <input type=\"radio\" name=\"classification\" [value]=\"class.value\"\r\n [checked]=\"policyForm?.riskRating === class.value\" [(ngModel)]=\"policyForm.riskRating\" />\r\n <span>{{ class.name }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Responsibility Center -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addResponsibilityCenters\"\r\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'rc' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\r\n \" [src]=\"ASSETS.responsibility_center\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Responsibility Center</label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('rc', true)\"\r\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc.item_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ rc.item_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"rcPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.selectedRCs?.length > 1\">\r\n +{{ policyForm?.selectedRCs?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('rc', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let rc of policyForm?.selectedRCs | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\r\n {{ rc.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Version -->\r\n <div *ngIf=\"policyForm.addVersion\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" [class.disabled]=\"\r\n activeSelector && sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\r\n <img [src]=\"ASSETS.associated_risks\" alt=\"name\" *ngIf=\"!policyForm.policy_version\" />\r\n\r\n <svg *ngIf=\"policyForm.policy_version\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">VERSION</label>\r\n <input [(ngModel)]=\"policyForm.policy_version\" (change)=\"onVersion($event)\" type=\"text\"\r\n placeholder=\"Specify the policy version.\" />\r\n <p *ngIf=\"!isVersionValid\" class=\"error-message\" [appScrollInView]=\"true\">\r\n {{ versionErrorMessage }}\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Reviewer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addReviewers && false\"\r\n [class.active]=\"activeSelector === 'reviewer'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'reviewer' &&\r\n activeSelector !== 'reviewerFrequency' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.selectedReviewers?.length > 0\">\r\n <img *ngIf=\"\r\n policyForm?.selectedReviewers?.length == 0 ||\r\n activeSelector === 'reviewer'\r\n \" [src]=\"ASSETS.reviewer\" alt=\"\" />\r\n\r\n <svg *ngIf=\"\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n activeSelector !== 'reviewer'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Reviewer </label>\r\n <div class=\"select\" *ngIf=\"policyForm?.selectedReviewers?.length == 0\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\"\r\n placeholder=\"Select the person responsible for reviewing this policy\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"policyForm?.selectedReviewers?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let reviewer of policyForm?.selectedReviewers\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('reviewer', reviewer)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\r\n </ng-container>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('reviewer', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length == 0 &&\r\n policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select a reviewer for this policy.\r\n </p>\r\n\r\n <label class=\"vx-control-panel\">When? </label>\r\n\r\n <div *ngIf=\"policyForm?.review_frequency_details == ''\" class=\"select button-sec\">\r\n <input type=\"text\" (click)=\"activateSelector('reviewerFrequency', true)\"\r\n [placeholder]=\"reviewerFrequencyPlaceholder\" readonly />\r\n <button (click)=\"activateSelector('reviewerFrequency', true)\" type=\"button\">\r\n Set A frequency\r\n </button>\r\n </div>\r\n <div *ngIf=\"policyForm?.review_frequency_details != ''\" class=\"selected button-sec\">\r\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\r\n <button *ngIf=\"activeSelector !== 'reviewerFrequency'\" type=\"button\" class=\"edit\"\r\n (click)=\"activateSelector('reviewerFrequency', true)\">\r\n <i class=\"icons\"></i>Edit\r\n </button>\r\n </div>\r\n <p *ngIf=\"\r\n submitted &&\r\n policyForm?.selectedReviewers?.length > 0 &&\r\n !policyForm?.review_frequency_details\r\n \" class=\"error-message\" [appScrollInView]=\"true\">\r\n Select the review schedule for this policy.\r\n </p>\r\n\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\" #formatEvidence\r\n [mode]=\"'policyReviewer'\" [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\">\r\n </app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Overseer -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addOverseers\" [class.active]=\"\r\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\r\n \" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\r\n \">\r\n <img *ngIf=\"\r\n (policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCEmail?.length == 0) ||\r\n activeSelector === 'ccEmail' ||\r\n activeSelector === 'ccFail'\r\n \" [src]=\"ASSETS.oversight\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"\r\n (policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCEmail?.length > 0) &&\r\n activeSelector !== 'ccEmail' &&\r\n activeSelector !== 'ccFail'\r\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">Oversight</label>\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCEmail?.length == 0 &&\r\n policyForm?.CCGroupEmail.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccEmail', true)\"\r\n placeholder=\"Who should have oversight of this policy?\" readonly />\r\n </div>\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCEmail?.length > 0 ||\r\n policyForm?.CCGroupEmail.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccEmail.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccEmail.employee_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccEmailPopover.popover()\" placement=\"left\" *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCEmail[0].employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCEmail?.length > 1\">\r\n +{{ policyForm?.CCEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCEmail.length > 0 &&\r\n policyForm?.CCGroupEmail?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCGroupEmail[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\">\r\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccEmail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n\r\n <div class=\"select\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length == 0 &&\r\n policyForm?.CCFailEmailGroup?.length == 0\r\n \">\r\n <input type=\"text\" (click)=\"activateSelector('ccFail', true)\"\r\n placeholder=\"Who should be notified if the policy is not attested on time?\" readonly />\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 ||\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!groupEnabled\">\r\n <ng-container *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"ccFail.employee_name\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ ccFail.employee_name }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"ccFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\r\n </button>\r\n </div>\r\n\r\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\r\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmail[0]?.employee_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4 greenBg\"\r\n appPopover (click)=\"overseerFailPopover.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\">\r\n +{{ policyForm?.CCFailEmail?.length - 1 }}\r\n </button>\r\n </div>\r\n\r\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\r\n policyForm?.CCFailEmail?.length > 0 &&\r\n policyForm?.CCFailEmailGroup?.length > 0\r\n \">\r\n &\r\n </div>\r\n\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\r\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\r\n \"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm?.CCFailEmailGroup[0]?.group_name }}</span>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover (click)=\"overseerFailGroup.popover()\" placement=\"right\"\r\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\">\r\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\r\n </button>\r\n </div>\r\n </div>\r\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('ccFail', true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccEmail of policyForm?.CCEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"></i>\r\n {{ ccEmail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let ccFail of policyForm?.CCFailEmail | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"></i>\r\n {{ ccFail.employee_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Related Documents -->\r\n <div class=\"form-group-row\" [appScrollInView]=\"scrollToBottom\" *ngIf=\"policyForm.addAssociatedDocuments\"\r\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"left\">\r\n <img *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\r\n\r\n <svg *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\r\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\" [mode]=\"'policy'\"\r\n [organization_id]=\"organization_id\"\r\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"></app-format-and-evidence>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Programs & Responsibilities -->\r\n <div *ngIf=\"policyForm?.addLinkProgram\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'linkProgram'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'linkProgram' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"\r\n policyForm?.programSelectedValues?.program?.category_id\r\n \">\r\n <img *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\" [src]=\"ASSETS.link_items\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK PROGRAMS & RESPONSIBILITIES</label>\r\n <div *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\r\n (click)=\"activateSelector('linkProgram', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select Programs & responsibilities that are<br />associated with\r\n this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\r\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i (click)=\"\r\n remove('linkProgram', policyForm?.programSelectedValues)\r\n \" class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\"\r\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{ policyForm?.programSelectedValues?.program?.name }}</span>\r\n <!-- <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n appPopover\r\n (click)=\"programResponsibilityPopover.popover()\"\r\n placement=\"left\"\r\n >\r\n +4\r\n </button> -->\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n 'Reporting information security weaknesses'\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n Reporting information security weaknesses\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\r\n (click)=\"activateSelector('linkProgram', true)\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Assessment -->\r\n <div *ngIf=\"policyForm.addLinkAssessment\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isAssessment' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\r\n <img *ngIf=\"!policyForm?.assessment?.length\" [src]=\"ASSETS.assessments\" alt=\"\" />\r\n\r\n <svg *ngIf=\"policyForm?.assessment?.length\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\r\n <div *ngIf=\"policyForm?.assessment?.length === 0\" (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select assessments that are associated with this<br />policy.\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"policyForm?.assessment?.length > 0\"\r\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\r\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\r\n }}</span>\r\n </div>\r\n <app-popover #programResponsibilityPopover [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let assessment of policyForm.assessment | slice : 1\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\" [appTooltip]=\"\r\n assessment?.assessmentDetails?.assessment_name\r\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <i class=\"icons\"></i>\r\n {{ assessment?.assessmentDetails?.assessment_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <button (click)=\"activateSelector('isAssessment', true)\"\r\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\">\r\n <i class=\"icons vx-mr-1\"></i> EDIT\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Link Related Polices -->\r\n\r\n <div *ngIf=\"policyForm.addLinkPolicies\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\r\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\" [class.disabled]=\"\r\n activeSelector &&\r\n activeSelector !== 'isLinkedPolices' &&\r\n sideSelectorElements.includes(activeSelector)\r\n \">\r\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\r\n <img *ngIf=\"!SelectedListOfPolicies?.length\" [src]=\"LINKS.linkedPolicyImage\" alt=\"\" />\r\n\r\n <svg *ngIf=\"SelectedListOfPolicies?.length\" class=\"checkIcon\" [xmlns]=\"LINKS.checked\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"right\">\r\n <div class=\"vx-form-group\">\r\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\r\n <div *ngIf=\"SelectedListOfPolicies?.length === 0\" (click)=\"activateSelector('isLinkedPolices', true)\"\r\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\" [class.disabled]=\"false\">\r\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\r\n Select policies that are associated with this policy.\r\n </div>\r\n </div>\r\n\r\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\r\n <ng-container *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\">\r\n <i (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\r\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"policy?.contract_name\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ policy?.contract_name\r\n }}</span>\r\n </ng-container>\r\n <button\r\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\r\n *ngIf=\"SelectedListOfPolicies?.length > 1\" type=\"button\" appPopover (click)=\"relatedPolicy.popover()\"\r\n placement=\"left\">\r\n +{{ SelectedListOfPolicies?.slice(1).length }}\r\n </button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\" class=\"edit\" type=\"button\"\r\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\">\r\n <i class=\"icons\"></i> Edit\r\n </button>\r\n </div>\r\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"\r\n let policy of SelectedListOfPolicies | slice : 1;\r\n let j = index\r\n \">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"\r\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\r\n \"></i>\r\n {{ policy?.contract_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n <app-cs-switch [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\r\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\" class=\"who-toggle\">DISPLAY ON THE POLICY PORTAL\r\n <i class=\"icons\" [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\" placement=\"bottom-right\" type=\"white\"\r\n delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-switch>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <app-checkbox-list [config]=\"categoryConfig\" [twoColumn]=\"false\" [itemsList]=\"categoryList\"\r\n [selectedItems]=\"policyForm.selectedCategories\" [identifierKey]=\"'_id'\" [displayKey]=\"'item_name'\"\r\n [tooltipKey]=\"'item_name'\" *ngIf=\"activeSelector === 'category'\" (saveList)=\"saveSelectedList('category', $event)\"\r\n (closeList)=\"disableSelector()\" [loaded]=\"!categoriesListLoaded\">\r\n </app-checkbox-list>\r\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\r\n [itemsList]=\"\"\r\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\r\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\r\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\r\n</app-checkbox-list> -->\r\n\r\n <app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [responsibilityCentersList]=\"rcList\"\r\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"disableSelector()\" [loaded]=\"rcListLoaded\">\r\n </app-responsibility-centers-list>\r\n\r\n <app-link-related-policies *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\" [policyId]=\"policyId\" [mode]=\"mode\"\r\n [selectedPolicies]=\"SelectedListOfPolicies\" (closeLinkPolicyList)=\"disableSelector()\"\r\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"></app-link-related-policies>\r\n\r\n <app-users-radio-list *ngIf=\"activeSelector === 'reviewer'\" [itemEmailKey]=\"'member_email'\" [usersList]=\"allReviewers\"\r\n [headerText]=\"'Select a Reviewer'\" [selectedUsers]=\"policyForm.selectedReviewers\" [userIdKey]=\"'member_id'\"\r\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-users-radio-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\" [groupEnabled]=\"true\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCEmail\" [selectedGroups]=\"policyForm.CCGroupEmail\" [isPaginationEnabled]=\"isPaginationEnabled\"\r\n (save)=\"saveSelectedList('ccEmail', $event)\" (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\" [usersList]=\"overseersList\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\r\n (closeUsersList)=\"disableSelector()\">\r\n </app-owner-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'ccFail' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.CCFailEmail\"\r\n [selectedGroups]=\"policyForm.CCFailEmailGroup\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (save)=\"saveSelectedList('ccFail', $event)\"\r\n (cancel)=\"disableSelector()\" [featureflag]=\"groupEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-group-users-list *ngIf=\"activeSelector === 'assignees' && !groupEnabled\" [usersList]=\"assigneesList\"\r\n [groupsList]=\"overseerGroupsList\" [selectedUsers]=\"policyForm.selectedAssignees\" [userIdKey]=\"'my_member_id'\"\r\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"disableSelector()\">\r\n </app-group-users-list>\r\n\r\n <user-group-list *ngIf=\"activeSelector === 'assignees' && groupEnabled\" [groupEnabled]=\"true\"\r\n [groupList]=\"overseerGroupsList\" (save)=\"saveSelectedList('assignees', $event)\" (cancel)=\"disableSelector()\"\r\n [selectedGroups]=\"policyForm.selectedGroupAssignee\" [selectedUsers]=\"policyForm.selectedAssignees\"\r\n [featureflag]=\"groupEnabled\" [loading]=\"paginatedUsersList?.loading\" [userlist]=\"paginatedUsersList?.users\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\">\r\n </user-group-list>\r\n\r\n <app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n </app-owner-list>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [mode]=\"'policy'\"\r\n [frequencyDetails]=\"frequencyDetails\" (selectedFrequency)=\"frequencyData($event)\" [feature]=\"feature\"\r\n [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <app-frequency-container *ngIf=\"activeSelector === 'reviewerFrequency'\" [mode]=\"'reviewerFrequency'\"\r\n [frequencyDetails]=\"reviewerFrequencyDetails\" (selectedFrequency)=\"reviewerFrequencyData($event)\"\r\n [feature]=\"feature\" [pageType]=\"'policy'\" (closeFrequency)=\"disableSelector()\"></app-frequency-container>\r\n\r\n <vc-link-program *ngIf=\"activeSelector === 'linkProgram'\" (close)=\"disableSelector()\" [policy]=\"policyForm\"\r\n [selectedProgram]=\"policyForm?.programSelectedValues\" [mode]=\"mode\" [selectedLinkProgram]=\"selectedLinkProgram\"\r\n (changeTab)=\"changeTab('linkedPrograms')\" (updatedProgramDetails)=\"updatedProgramDetails($event)\">\r\n </vc-link-program>\r\n\r\n <app-checkpoints-policy-container (closeCheckPoint)=\"disableSelector()\"\r\n [checkpointData]=\"policyForm?.checkpointDetails\" [requiredPoint]=\"policyForm?.passingMarks\"\r\n *ngIf=\"activeSelector === 'checkpoints'\"\r\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"></app-checkpoints-policy-container>\r\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\r\n\r\n <app-approval-workflow *ngIf=\"enableApprovalWorkflow\" [selectedCategory]=\"policyForm?.selectedCategories\"\r\n [approverWorkFlowList]=\"approverWorkFlowList\" [allApprovers]=\"allApprovers\"\r\n (listCancelClicked)=\"listCancelClicked($event)\" (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\r\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\" [editApprovalWorkflow]=\"editApprovalWorkflow\"\r\n [createApprovalClick]=\"createApprovalClick\" (closeCreateClicked)=\"closeClickedCreateForm()\"\r\n [editWorkflowLevel]=\"editWorkflowLevel\"></app-approval-workflow>\r\n <!-- <app-select-approvers></app-select-approvers> -->\r\n\r\n <app-policy-access *ngIf=\"activeSelector === 'policyAccess'\" [policyAccessType]=\"policyForm?.policy_access_type\"\r\n (close)=\"disableSelector()\" [orgUsersList]=\"paginatedUsersList?.users\" [usersAccessList]=\"usersAccessList\"\r\n [groupList]=\"overseerGroupsList\" [groupsAccessList]=\"groupsAccessList\"\r\n [selectedUsers]=\"policyForm?.policy_access_owners\" [selectedGroups]=\"policyForm?.policy_access_groups\"\r\n [disabledIds]=\"usersAccessListIds\" [disabledGroupIds]=\"groupsAccessListIds\"\r\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\" (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\r\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\" [loading]=\"paginatedUsersList?.loading\" [userListInfo]=\"paginatedUsersList\" [isPaginationEnabled]=\"isPaginationEnabled\" (fetchUserData)=\"getUsersListWithPagination($event)\" [featureflag]=\"groupEnabled\">\r\n </app-policy-access>\r\n</ng-container>\r\n<ng-container *ngIf=\"showCreateDocuments\">\r\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\r\n [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\"\r\n [userInfo]=\"userInfo\"\r\n [policyId]=\"policyId\"\r\n [policyName]=\"policyForm.policyName\"\r\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\"\r\n ></app-create-documents> -->\r\n <lib-document-section *ngIf=\"showCreateDocuments\" [templateView]=\"templateView\" [organization_id]=\"organization_id\"\r\n [member_obj_id]=\"member_obj_id\" [userInfo]=\"userInfo\" [policyId]=\"policyId\" [feature]=\"feature\"\r\n [templateUrl]=\"templateUrl\" [policyName]=\"policyForm.policyName\" (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\r\n (editPolicy)=\"editPolicyFromDocuments()\" (openTemplate)=\"templateView = true\"></lib-document-section>\r\n</ng-container>\r\n\r\n<app-assessment-list *ngIf=\"activeSelector === 'isAssessment'\" [program_ids]=\"''\"\r\n [isEdit]=\"policyForm?.assessment?.length\" (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\r\n [selectedAssessment]=\"policyForm?.assessment[0]\" [mode]=\"'policy'\" (onAssessmentSelect)=\"\r\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\r\n \"></app-assessment-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'approvers' && false\" [listHeading]=\"'Select Approvers'\"\r\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"true\"\r\n [selectedUsers]=\"\r\n addMoreLevels\r\n ? []\r\n : policyForm.selectedApprovers[approversListIndex].approvers\r\n \" [userIdKey]=\"'member_id'\" [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\"\r\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\" (closeUsersList)=\"disableSelector()\" [mode]=\"mode\"\r\n [reviewerWorkflowType]=\"workflowType\" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\r\n [workflowList]=\"workflowList\" [workflowText]=\"'Approval Workflow'\">\r\n</app-owner-list>\r\n\r\n<app-owner-list *ngIf=\"activeSelector === 'owners'\" [listHeading]=\"'Select Owner(s)'\" [singularText]=\"'User selected'\"\r\n [pluralText]=\"'Users selected'\" [usersList]=\"allApprovers\" [showWorkflow]=\"false\" [userIdKey]=\"'member_id'\"\r\n [itemEmailKey]=\"'member_email'\" [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('owners', $event)\"\r\n (closeUsersList)=\"disableSelector()\" [mode]=\"mode\" [selectedUsers]=\"policyForm?.policy_owners ?? []\">\r\n</app-owner-list>\r\n\r\n<app-select-template-list *ngIf=\"templateView\" [selectedCategoryId]=\"policyForm?.selectedCategories\" [feature]=\"feature\"\r\n (onTemplateSelect)=\"onTemplateSelect($event)\"></app-select-template-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.right app-format-and-evidence~.error-message{position:relative;top:-12px}.form-group-row{display:flex;position:relative;transition:all .2s ease-in-out}.form-group-row.disabled{-webkit-user-select:none;user-select:none;pointer-events:none;filter:grayscale(1);z-index:2}.form-group-row.disabled .left{position:relative}.form-group-row.disabled .left:before{content:\"\";position:absolute;inset:2px 0 0 2px;background:#fff;opacity:.7;border-radius:50%;width:32px;height:32px}.form-group-row.disabled .right{opacity:.3}.form-group-row.active{pointer-events:none;filter:grayscale(0);z-index:2;opacity:1}.form-group-row.active .right .vx-form-group input,.form-group-row.active .right .vx-form-group .custom-input,.form-group-row.active .right .vx-form-group .selectBoxEnable{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}.form-group-row.active .right .vx-form-group .selectBoxEnable.disabled{border-color:#dbdbdb;box-shadow:none}::ng-deep .radio-group-selector app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .radio-group-selector app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .radio-group-selector app-cs-radio label.radio-item .radio,::ng-deep .radio-group-selector app-cs-radio label.radio-item .radiomark{position:absolute!important;top:9px;left:12px}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value{font-size:11px!important;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0!important;max-width:100%!important;font-weight:500!important;color:#707070!important}::ng-deep .radio-group-selector app-cs-radio label.radio-item .value i{font-size:12px;color:#1e5dd3}::ng-deep .radio-group-selector app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}::ng-deep .wf-action-list{width:220px}::ng-deep .wf-action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}::ng-deep .wf-action-list ul.action-item{display:block}::ng-deep .wf-action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}::ng-deep .wf-action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}::ng-deep .wf-action-list ul.action-item li button i{font-size:16px;margin-right:10px;color:#1e5dd3}::ng-deep .wf-action-list ul.action-item li button:hover{background:#f3f3f3}::ng-deep .wf-action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.within-con{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#1e5dd3;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar img{width:100%}::ng-deep .wf-action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}::ng-deep .wf-action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#747576;cursor:pointer;margin-right:5px}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image{display:block}::ng-deep .wf-action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}::ng-deep .wf-action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}::ng-deep .wf-action-list ul.action-item li .chip-item i{color:#747576;margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}::ng-deep .wf-action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .wf-action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}::ng-deep .wf-action-list ul.action-item li .chip-item span.id{font-size:9px}::ng-deep .wf-action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}::ng-deep .wf-action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}::ng-deep .wf-action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}::ng-deep .wf-action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}::ng-deep .wf-action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes scale-up-center{0%{transform:scale(.5);opacity:0}to{transform:scale(1);opacity:1}}p.error-message{font-size:11px;font-weight:400;color:#eb2424;line-height:16px;margin-top:8px;margin-bottom:0}.edit-loader{position:absolute;top:-3px;left:-3px;width:46px;height:46px;transform:rotate(180deg)}.circular-loader{animation:rotate 2s linear infinite;height:100%;transform-origin:center center;width:100%;position:absolute;top:0;left:0;margin:auto}.loader-path{stroke-dasharray:150,200;stroke-dashoffset:-10;animation:dash 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}::ng-deep .dropdown{position:fixed;background:#fff;box-shadow:0 3px 6px #00000029;padding:24px 0;z-index:9;max-height:calc(100vh - 200px);overflow:auto}::ng-deep .dropdown ul.dropdown-list{padding:0 20px;margin:0;display:block}::ng-deep .dropdown ul.dropdown-list li{list-style:none}::ng-deep .dropdown ul.dropdown-list li app-cs-radio{display:flex}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.radio{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item span.value{padding:11px 12px 11px 32px;width:100%;border:1px solid #bcbcbc;border-radius:4px;margin-left:0;max-width:100%}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item svg{position:absolute;top:12px;left:12px}::ng-deep .dropdown ul.dropdown-list li app-cs-radio label.radio-item input[type=radio]:checked~span.value{background:#e8feeb;border-color:#34aa44}::ng-deep .dropdown ul.dropdown-list li+li{margin-top:8px}app-smiley-dialog{position:relative;z-index:10}app-smiley-dialog-inline{position:absolute;top:-3px;right:0;bottom:0;z-index:999;width:520px;height:calc(100vh + 3px)}::ng-deep .vx-overlay{position:fixed;z-index:3;inset:0}::ng-deep dp-date-picker{width:100%;position:fixed!important;z-index:14;top:-40px;left:0}::ng-deep dp-date-picker input{width:100%;border:none;opacity:0;pointer-events:none}::ng-deep dp-date-picker input:focus{outline:none}::ng-deep dp-date-picker .dp-popup{width:412px;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep dp-date-picker .dp-popup dp-day-calendar,::ng-deep dp-date-picker .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep dp-date-picker .dp-popup dp-day-calendar button,::ng-deep dp-date-picker .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep dp-date-picker .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep dp-date-picker .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep dp-date-picker .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}::ng-deep dp-date-picker .dp-open+div{position:fixed!important;inset:0!important;display:flex;justify-content:center;align-items:center;z-index:99;pointer-events:none;background:#0000004d}::ng-deep .cdk-overlay-container{z-index:2147483002!important}::ng-deep .dp-popup{z-index:999;display:flex!important;align-items:center;justify-content:center;width:100vw;height:100vh;background:#0000004d!important;box-shadow:unset!important}::ng-deep .dp-popup dp-day-calendar{width:412px!important;box-shadow:0 0 20px #161b2f26;background-color:#fff;border-radius:4px;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both}::ng-deep .dp-popup dp-day-calendar,::ng-deep .dp-popup dp-month-calendar{width:100%;pointer-events:auto}::ng-deep .dp-popup dp-day-calendar button,::ng-deep .dp-popup dp-month-calendar button{background:transparent;border:none;outline:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:50%;font-size:14px}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-left:hover,::ng-deep .dp-popup dp-day-calendar button.dp-calendar-nav-right:hover,::ng-deep .dp-popup dp-month-calendar button.dp-calendar-nav-right:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn{display:none}::ng-deep .dp-popup dp-day-calendar button.dp-current-location-btn:before,::ng-deep .dp-popup dp-month-calendar button.dp-current-location-btn:before{content:\"\";height:10px;width:10px;border-radius:50%;background:#000;display:inline-flex}::ng-deep .dp-popup dp-day-calendar .dp-weekdays,::ng-deep .dp-popup dp-month-calendar .dp-weekdays,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week{display:flex;justify-content:space-around}::ng-deep .dp-popup dp-day-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-weekdays .dp-calendar-weekday,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week .dp-calendar-weekday,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week .dp-calendar-weekday{width:52px;border-left:none;border-bottom-color:#fff;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button{width:40px;height:40px;border-radius:50%;display:inline-flex;justify-content:center;align-items:center}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button:hover,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button:hover,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button:hover{background-color:#f3f3f3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-selected,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-selected,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-selected{background:#1e5dd3}::ng-deep .dp-popup dp-day-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-weekdays button.dp-current-day,::ng-deep .dp-popup dp-day-calendar .dp-calendar-week button.dp-current-day,::ng-deep .dp-popup dp-month-calendar .dp-calendar-week button.dp-current-day{border:1px solid rgba(0,0,0,.38);color:#1e5dd3;background-color:#fff}::ng-deep .dp-popup dp-day-calendar .dp-day-calendar-container,::ng-deep .dp-popup dp-month-calendar .dp-day-calendar-container{padding:20px;border-radius:2px}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container{display:flex;margin:0 0 20px;border:none}::ng-deep .dp-popup dp-day-calendar .dp-calendar-nav-container .dp-nav-header button,::ng-deep .dp-popup dp-month-calendar .dp-calendar-nav-container .dp-nav-header button{color:#000;font-size:17px;font-weight:500;margin:0 0 0 12px;padding:0}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container{width:80px;display:flex}::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-left button,::ng-deep .dp-popup dp-day-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button,::ng-deep .dp-popup dp-month-calendar .dp-nav-btns-container .dp-calendar-nav-container-right button{margin:0!important}::ng-deep .dp-popup dp-day-calendar .dp-calendar-wrapper,::ng-deep .dp-popup dp-month-calendar .dp-calendar-wrapper{border:none}@keyframes slide-bottom{0%{transform:translateY(-100px)}to{transform:translateY(0)}}::ng-deep span.file{display:block;width:20px;min-width:20px;border-radius:0 0 2px 2px;border:1px solid transparent;border-color:#747576;position:relative;margin-right:5px;border-top:none;margin-top:5px;background:#fff}::ng-deep span.file.table{margin-right:8px;width:18px;min-width:18px}::ng-deep span.file.table i{font-size:8px}::ng-deep span.file.table .format{height:8px;font-size:7px;line-height:8px;font-weight:400}::ng-deep span.file:before{position:absolute;border-radius:0;top:-4px;right:-1px;content:\"\";height:4px;width:4px;display:block;background:linear-gradient(45deg,#747576 0% 1%,#747576 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file:after{height:4px;left:-1px;right:3px;border-top:1px solid;border-right:none;border-left:1px solid;content:\"\";top:-4px;position:absolute;border-radius:2px 0 0;background:#fff}::ng-deep span.file .format{height:10px;font-size:6px;text-transform:uppercase;background:transparent;font-weight:600;text-align:center;display:block;line-height:10px}::ng-deep span.file i{font-size:10px;height:10px;display:flex;align-items:center;justify-content:center;color:#dbdbdb}::ng-deep span.file.docx{width:22px!important}::ng-deep span.file.pdf,::ng-deep span.file.template{border-color:#f31c39}::ng-deep span.file.pdf:before,::ng-deep span.file.template:before{background:linear-gradient(45deg,#f31c39 0% 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#f31c39\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.pdf:after,::ng-deep span.file.template:after{border-color:#f31c39}::ng-deep span.file.pdf .format,::ng-deep span.file.template .format{color:#f31c39}::ng-deep span.file.xlsx,::ng-deep span.file.xls,::ng-deep span.file.css,::ng-deep span.file.scss,::ng-deep span.file.less{border-color:#34aa44}::ng-deep span.file.xlsx:before,::ng-deep span.file.xls:before,::ng-deep span.file.css:before,::ng-deep span.file.scss:before,::ng-deep span.file.less:before{background:linear-gradient(45deg,#34aa44 0% 1%,#34aa44 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.xlsx:after,::ng-deep span.file.xls:after,::ng-deep span.file.css:after,::ng-deep span.file.scss:after,::ng-deep span.file.less:after{border-color:#34aa44;color:#34aa44}::ng-deep span.file.xlsx .format,::ng-deep span.file.xls .format,::ng-deep span.file.css .format,::ng-deep span.file.scss .format,::ng-deep span.file.less .format{color:#34aa44}::ng-deep span.file.doc,::ng-deep span.file.docx,::ng-deep span.file.psd{border-color:#1e5dd3}::ng-deep span.file.doc:before,::ng-deep span.file.docx:before,::ng-deep span.file.psd:before{background:linear-gradient(45deg,#1e5dd3 0% 1%,#1e5dd3 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.doc:after,::ng-deep span.file.docx:after,::ng-deep span.file.psd:after{border-color:#1e5dd3}::ng-deep span.file.doc .format,::ng-deep span.file.docx .format,::ng-deep span.file.psd .format{color:#1e5dd3}::ng-deep span.file.ppt,::ng-deep span.file.ai,::ng-deep span.file.html,::ng-deep span.file.jpg,::ng-deep span.file.jpeg,::ng-deep span.file.png{border-color:#f6882f}::ng-deep span.file.ppt:before,::ng-deep span.file.ai:before,::ng-deep span.file.html:before,::ng-deep span.file.jpg:before,::ng-deep span.file.jpeg:before,::ng-deep span.file.png:before{background:linear-gradient(45deg,#f6882f 0% 1%,#f6882f 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.ppt:after,::ng-deep span.file.ai:after,::ng-deep span.file.html:after,::ng-deep span.file.jpg:after,::ng-deep span.file.jpeg:after,::ng-deep span.file.png:after{border-color:#f6882f}::ng-deep span.file.ppt .format,::ng-deep span.file.ai .format,::ng-deep span.file.html .format,::ng-deep span.file.jpg .format,::ng-deep span.file.jpeg .format,::ng-deep span.file.png .format{color:#f6882f}::ng-deep span.file.php{border-color:#7aa6f7}::ng-deep span.file.php:before{background:linear-gradient(45deg,#7aa6f7 0% 1%,#7aa6f7 50%,#2989d800 51%,#7db9e800);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#34aa44\",endColorstr=\"#007db9e8\",GradientType=1)}::ng-deep span.file.php:after{border-color:#7aa6f7}::ng-deep span.file.php .format{color:#7aa6f7}::ng-deep ngx-material-timepicker-container .timepicker-backdrop-overlay{background-color:#0000000d!important;z-index:9999999999!important}::ng-deep ngx-material-timepicker-container .timepicker-overlay{z-index:9999999999!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker{width:232px!important;border-radius:2px!important;box-shadow:0 4px 30px #161b2f26!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header{background-color:#fff!important;padding:0!important;border-radius:2px 2px 0 0}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container{display:block!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time{color:#000!important;width:150px!important;margin:0 auto;line-height:60px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control{font-size:40px;background-color:transparent!important;color:#000!important;font-weight:600;text-align:right;caret-color:transparent;outline:none;font-family:Poppins;line-height:56px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:focus,::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control .timepicker-dial__control:hover{background-color:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time ngx-material-timepicker-dial-control:last-of-type .timepicker-dial__control{text-align:left}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__time span{padding:0 8px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period{display:flex!important;width:182px;margin:0 auto!important;background:#f1f1f1;padding:4px 10px;border-radius:20px;position:relative}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period:before{background:#f1f1f1;content:\"\";position:absolute;top:15px;left:-25px;width:calc(100% + 50px);height:2px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period{flex-direction:unset!important;position:relative;z-index:1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:after{content:\"\";position:absolute;right:-12px;top:0;border-left:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period:before{content:\"\";position:absolute;left:-18px;top:0;border-right:solid 14px #f1f1f1;border-bottom:solid 12px transparent;border-top:solid 12px transparent;z-index:-1}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button{font-size:11px;background-color:transparent;padding:0;border-radius:20px;color:#747576;font-weight:600;font-family:Poppins;width:84px;height:24px}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button.timepicker-dial__item_active{background:#fff!important;color:#1e5dd3!important;box-shadow:0 1px 2px #dbdbdb}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__header .timepicker-dial__container .timepicker-dial__period .timepicker-period button+button{margin-left:0!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face{width:200px!important;height:200px!important;padding:10px!important;background:transparent!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer{height:92px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span{color:#000}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number--outer span.active{color:#fff}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand{height:80px!important;top:calc(50% - 80px)!important;background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__number>span.active{background-color:#1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .clock-face .clock-face__clock-hand_minute:before{border:4px solid #1e5dd3!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions{display:flex!important;padding:10px 0 0!important;background:#fff!important;justify-content:space-around!important;border-radius:0 0 2px 2px!important;overflow:hidden}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div:first-child ngx-material-timepicker-button button.timepicker-button{background:#f8f8f8;color:#1e5dd3}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button{line-height:28px!important;width:100%;background:#1e5dd3;color:#fff;border-radius:0!important;height:32px!important;width:116px!important}::ng-deep ngx-material-timepicker-container ngx-material-timepicker-content .timepicker .timepicker__main-content .timepicker__actions div ngx-material-timepicker-button button.timepicker-button span{font-weight:500!important;font-size:11px;font-family:Poppins}::ng-deep vcomply-editor{display:block}::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep vcomply-editor .editor-container:hover,::ng-deep vcomply-editor .editor-container:focus-within{border:1px solid #1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep vcomply-editor .editor-container mention-list ul li a{font-size:16px!important}::ng-deep vcomply-editor .editor-container .editable-block{background:#fff;min-height:60px;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep vcomply-editor .editor-container .editable-block:before{color:#747576!important}::ng-deep vcomply-editor .editor-container .editor-tools{border-top:1px solid #dbdbdb;border-radius:0 0 3px 3px}::ng-deep vcomply-editor .editor-container .editor-tools:hover{border-color:#1e5dd3}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}::ng-deep .within-box{background:#f1f1f1;border-radius:.125rem;color:#042e7d}::ng-deep .within-value{overflow:hidden;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;word-break:break-word}.wf-tooltip{pointer-events:none;position:absolute;max-width:300px;font-size:12px;text-align:left;color:#fff;padding:8px 12px;background:#000;border-radius:2px;z-index:-222;top:0;opacity:0;white-space:break-spaces;word-break:break-word}.wf-tooltip *{color:#fff!important}.wf-tooltip:empty{display:none!important}.wf-tooltip.white{box-shadow:0 2px 8px #1c5bd159;color:#747576;background:#fff;text-align:left}.wf-tooltip.white b{color:#747576!important}.wf-tooltip.animate-top{animation:animate-top .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-right{animation:animate-right .3s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-bottom{animation:animate-bottom .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip.animate-left{animation:animate-left .5s cubic-bezier(.25,.46,.45,.94) both}.wf-tooltip-top:after{top:100%;left:50%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-bottom:after{bottom:100%;left:50%;margin-left:-5px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-left.white:after{border-color:transparent transparent transparent #f1f1f1}.wf-tooltip-left:after{top:50%;left:100%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #000000}.wf-tooltip-right.white:after{border-color:transparent #f1f1f1 transparent transparent}.wf-tooltip-right:after{top:50%;right:100%;margin-top:-5px;border-width:5px;border-color:transparent #000000 transparent transparent}.wf-tooltip-bottom-right:after{bottom:100%;left:100%;margin-left:-20px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-right.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-bottom-left:after{bottom:100%;left:0;margin-left:10px;border-width:5px;border-color:transparent transparent #000000 transparent}.wf-tooltip-bottom-left.white:after{border-color:transparent transparent #f1f1f1 transparent}.wf-tooltip-top-left:after{top:100%;left:0;margin-left:10px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-left.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip-top-right:after{top:100%;left:100%;margin-left:-5px;border-width:5px;border-color:#000000 transparent transparent transparent}.wf-tooltip-top-right.white:after{border-color:#f1f1f1 transparent transparent transparent}.wf-tooltip:after{content:\"\";position:absolute;border-style:solid}.wf-tooltip span.within{font-size:80%;display:block;width:100%}.wf-tooltip .small{display:block;font-size:10px}.wf-tooltip .within-box{background:#f1f1f1;border-radius:2px;color:#042e7d!important;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 2px;margin-right:2px}.wf-tooltip-show{pointer-events:none;opacity:1;z-index:2147483001}\n"] }]
|
|
2195
|
+
}], ctorParameters: function () { return [{ type: i1.PolicyService }, { type: i2.SnackBarService }, { type: i3.UiKitService }, { type: i4.AuthService }, { type: i5.ResponsibilityService }, { type: i6.Router }, { type: i6.ActivatedRoute }, { type: i7.FrequencyService }, { type: i8.PlatformLocation }, { type: i0.ChangeDetectorRef }, { type: i9.RestApiService }, { type: i10.CommonService }, { type: i11.OrganizationUserService }, { type: i12.OrganizationCommonService }, { type: i13.ComplianceCommonService }, { type: i14.IframeService }, { type: i15.DateUtilityService }, { type: i16.DialogService }]; }, propDecorators: { pickerChanged: [{
|
|
2164
2196
|
type: Output
|
|
2165
2197
|
}], mode: [{
|
|
2166
2198
|
type: Input
|
|
@@ -2197,4 +2229,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
2197
2229
|
type: HostListener,
|
|
2198
2230
|
args: ['document:click', ['$event']]
|
|
2199
2231
|
}] } });
|
|
2200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXBvbGljeS93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcG9saWN5L3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBVzNDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUtuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakQsTUFBTSxPQUFPLHVCQUF1QjtJQStLbEMsWUFDVSxhQUE0QixFQUM1QixRQUF5QixFQUN6QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixxQkFBNEMsRUFDNUMsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUMxQyxnQkFBa0MsRUFDMUIsU0FBNEIs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Q0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFFM0MsaUNBQWlDO1lBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUN2QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQzsrR0F4aEZVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHd6QkFtQkQsVUFBVSw2QkMvRDdDLDB2bUhBNGlFMkU7OzRGRGhnRTlELHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7MmxCQVFyQixhQUFhO3NCQUF0QixNQUFNO2dCQUNFLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ2tCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDYixjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNFLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUV1QixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFM0IsZUFBZTtzQkFEZCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFrNEU1RCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJ25nMi1kYXRlLXBpY2tlcic7XHJcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uQWxlcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpcm1hdGlvbi1hbGVydCc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2xpY3lGb3JtIH0gZnJvbSAnLi4vd29ya2Zsb3ctaW50ZXJmYWNlcy9jcmVhdGUtcG9saWN5LWZvcm0nO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFBvbGljeVNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9wb2xpY3kuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBsYXRmb3JtTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0QW5kRXZpZGVuY2VDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2Zvcm1hdC1hbmQtZXZpZGVuY2UvZm9ybWF0LWFuZC1ldmlkZW5jZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvbGluay1wcm9ncmFtL3Jlc3RhcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IERFRkFVTFRfMjRIUiwgREVGQVVMVF9USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3RpbWUuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JnYW5pemF0aW9uVXNlclNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9vcmdhbml6YXRpb24tdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3JnYW5pemF0aW9uQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2NvbW1vbi13b3JrZmxvdy1zZXJ2aWNlcy9vcmdhbml6YXRpb24tY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wbGlhbmNlQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2NvbW1vbi13b3JrZmxvdy1zZXJ2aWNlcy9jb21wbGlhbmNlLWNvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ09OU1RBTlRTIH0gZnJvbSAnLi4vbGluay1yZWxhdGVkLXBvbGljaWVzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IExJTktTIH0gZnJvbSAnLi4vd29ya2Zsb3cvc2hhcmVkL2NvbnN0YW50cy9jZG4tbGluay5jb25zdGFudCc7XHJcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IEFTU0VUUyB9IGZyb20gJy4uL2NvbnN0YW50cy9hc3NldHMuY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQVBJIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FwaS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBEYXRlVXRpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9yZXBvcnQtYS1jYXNlL3NlcnZpY2VzL2RhdGUtdXRpbGl0eS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXBvbGljeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93UG9saWN5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBBU1NFVFMgPSBBU1NFVFM7XHJcbiAgQ09OU1RBTlRTOiBhbnkgPSBDT05TVEFOVFM7XHJcbiAgTElOS1M6IGFueSA9IExJTktTO1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcclxuICBASW5wdXQoKSBwb2xpY3lJZCA9ICcnO1xyXG4gIEBJbnB1dCgpIGZlYXR1cmU6IGFueTtcclxuICBAT3V0cHV0KCkgc2hvd0NvbmZpcm1hdGlvbkFsZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzaGlmdFRvRWRpdE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgY29udmVydEZpbGVEYXRhOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3J5ID0gJyc7XHJcbiAgQElucHV0KCkgaXNTZW5kRm9yQXR0ZXN0YXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZUlkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnZm9ybWF0RXZpZGVuY2UnKSBmb3JtYXRFdmlkZW5jZSE6IEZvcm1hdEFuZEV2aWRlbmNlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcclxuICBkYXRlUGlja2VyUG9wVXAhOiBFbGVtZW50UmVmO1xyXG5cclxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBhIGRlc2NyaXB0aW9uIGZvciB0aGlzIHBvbGljeS4nLFxyXG4gIH07XHJcbiAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnO1xyXG4gIHNjcm9sbFRvQm90dG9tID0gZmFsc2U7XHJcbiAgbmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICByY0xpc3Q6IGFueSA9IFtdO1xyXG4gIHVzZXJzTGlzdDogYW55ID0gW107XHJcbiAgYWxsQXBwcm92ZXJzOiBhbnkgPSBbXTtcclxuICBhbGxSZXZpZXdlcnM6IGFueSA9IFtdO1xyXG4gIGFzc2lnbmVlc0xpc3Q6IGFueSA9IFtdO1xyXG4gIG93bmVybGlzdDogYW55ID0gW107XHJcbiAgcmV2aWV3ZXJzTGlzdDogYW55ID0gW107XHJcbiAgb3ZlcnNlZXJzTGlzdDogYW55ID0gW107XHJcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgdXNlcnNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnlMaXN0OiBhbnkgPSBbXTtcclxuICBncm91cHNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHdvcmtGbG93TGlzdDogYW55W10gPSBbXTtcclxuICBhcHByb3ZlcldvcmtGbG93TGlzdDogYW55W10gPSBbXTtcclxuICBzdWJtaXR0ZWQgPSBmYWxzZTtcclxuICBjY0VtYWlsT2JqSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGNjRmFpbEdyb3VwT2JqSWRzOiBhbnlbXSA9IFtdO1xyXG4gIHVzZXJzQWNjZXNzTGlzdDogYW55W10gPSBbXTtcclxuICB1c2Vyc0FjY2Vzc0xpc3RJZHM6IGFueVtdID0gW107XHJcbiAgZ3JvdXBzQWNjZXNzTGlzdElkczogYW55W10gPSBbXTtcclxuICBncm91cHNBY2Nlc3NMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFNlbGVjdGVkTGlzdE9mUG9saWNpZXM6IGFueVtdID0gW107XHJcbiAgcGFnaW5hdGVkVXNlcnNMaXN0OiBhbnkgPSB7fTtcclxuICBpc1BhZ2luYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFnaW5hdGVkVXNlcnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBncm91cHNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnlDb25maWcgPSB7XHJcbiAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IFBvbGljeSBDYXRlZ29yeScsXHJcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1BvbGljeSBDYXRlZ29yeSBTZWxlY3RlZCcsXHJcbiAgICBmbG9hdGluZ1RleHRQbHVyYWw6ICdQb2xpY3kgQ2F0ZWdvcmllcyBTZWxlY3RlZCcsXHJcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBQb2xpY3kgQ2F0ZWdvcnknLFxyXG4gICAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcclxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICB3b3JrZmxvdzogJ3BvbGljeScsXHJcbiAgICBub0RhdGFUZXh0OiAnJ1xyXG4gIH07XHJcbiAgYXBwcm92YWxXb3JrZmxvd0NvbmZpZyA9IHtcclxuICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgdXNlcihzKScsXHJcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1VzZXIgc2VsZWN0ZWQnLFxyXG4gICAgZmxvYXRpbmdUZXh0UGx1cmFsOiAnVXNlcnMgc2VsZWN0ZWQnLFxyXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgc2VsZWN0QWxsRW5hYmxlZDogdHJ1ZSxcclxuICB9O1xyXG5cclxuICBhZGRNb3JlTGV2ZWxzID0gZmFsc2U7XHJcbiAgYXBwcm92ZXJzTGlzdEluZGV4ID0gMDtcclxuICB3b3JrZmxvd0xpc3QgPSBbJ1NFUVVFTlRJQUwnLCAnUk9VTkQtUk9CSU4nLCAnQU5ZIE9ORSddO1xyXG4gIGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgZGF0ZUNvbmZpZyA9IHtcclxuICAgIGRpc2FibGVLZXlwcmVzczogdHJ1ZSxcclxuICAgIGZvcm1hdDogJ0REIE1NIFlZWVknLFxyXG4gICAgdW5TZWxlY3RPbkNsaWNrOiB0cnVlLFxyXG4gICAgb3Blbk9uQ2xpY2s6IGZhbHNlLFxyXG4gICAgb3Blbk9uRm9jdXM6IGZhbHNlLFxyXG4gIH07XHJcbiAgZnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgIHBhdHRlcm46ICcnLFxyXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcclxuICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXHJcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcclxuICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICB3aW5kb3c6IDAsXHJcbiAgICBmYWlsZWQ6IDAsXHJcbiAgICB0aW1lOiBERUZBVUxUX1RJTUUsXHJcbiAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXHJcbiAgfTtcclxuICByZXZpZXdlckZyZXF1ZW5jeURldGFpbHMgPSB7XHJcbiAgICBwYXR0ZXJuOiAnJyxcclxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXHJcbiAgICBkYXRlT2ZNb2RpZmllZDogMCxcclxuICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxyXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXHJcbiAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcclxuICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgd2luZG93OiAwLFxyXG4gICAgZmFpbGVkOiAwLFxyXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxyXG4gICAgZmFpbGVkVGltZTogJycsXHJcbiAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAzLFxyXG4gIH07XHJcbiAgZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnV2hhdCBpcyB0aGUgYXR0ZXN0YXRpb24gc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5Pyc7XHJcbiAgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdXaGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZD8nO1xyXG5cclxuICBzaWRlU2VsZWN0b3JFbGVtZW50cyA9IFtcclxuICAgICdhcHByb3ZhbFdvcmtmbG93JyxcclxuICAgICdhc3NpZ25lZXMnLFxyXG4gICAgJ2FwcHJvdmVycycsXHJcbiAgICAncmV2aWV3ZXInLFxyXG4gICAgJ2NjRW1haWwnLFxyXG4gICAgJ2NjRmFpbCcsXHJcbiAgICAncmMnLFxyXG4gICAgJ2NhdGVnb3J5JyxcclxuICAgICdmcmVxdWVuY3knLFxyXG4gICAgJ3Jldmlld2VyRnJlcXVlbmN5JyxcclxuICAgICdjaGVja3BvaW50cycsXHJcbiAgICAnbGlua1Byb2dyYW0nLFxyXG4gICAgJ2lzQXNzZXNzbWVudCcsXHJcbiAgICAnaXNMaW5rZWRQb2xpY2VzJyxcclxuICAgICdvd25lcnMnLFxyXG4gICAgJ3BvbGljeUFjY2VzcycsXHJcbiAgXTtcclxuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXHJcbiAgICB7IG5hbWU6ICdMT1cnLCB2YWx1ZTogMSwgY2xhc3M6ICdsb3cnIH0sXHJcbiAgICB7IG5hbWU6ICdMT1ctTWVkaXVtJywgdmFsdWU6IDIsIGNsYXNzOiAnbG93LW1lZCcgfSxcclxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXHJcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6IDQsIGNsYXNzOiAnaGlnaCcgfSxcclxuICBdO1xyXG4gIHNob3dSaXNrQ2xhc3NpZmljYXRpb24gPSB0cnVlO1xyXG4gIHNob3dDcmVhdGVEb2N1bWVudHMgPSBmYWxzZTtcclxuICBvcmdhbml6YXRpb25faWQgPSAnJztcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIHVzZXJJbmZvITogYW55O1xyXG5cclxuICBwb2xpY3lBcHByb3ZhbEZsYWcgPSAwO1xyXG4gIGJhc2VVUkwgPSAnJztcclxuICBncm91cEVuYWJsZWQ6IGFueSA9IHRydWU7XHJcbiAgb3ZlcnNlZXJHcm91cHNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGVuYWJsZUFwcHJvdmFsV29ya2Zsb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1ZlcnNpb25WYWxpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2VsZWN0ZWRMaW5rUHJvZ3JhbTogYW55ID0ge307XHJcbiAgdmVyc2lvbkVycm9yTWVzc2FnZTogc3RyaW5nID1cclxuICAgICdZb3UgaGF2ZSBlbnRlcmVkIGFuIGluY29ycmVjdCBmb3JtYXQuIFRoZSB2ZXJzaW9uIGZpZWxkIGNhbiBlaXRoZXIgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLic7XHJcbiAgc2VsZWN0ZWRXb3JrZmxvdzogYW55W10gPSBbXTtcclxuICBlZGl0QXBwcm92YWxXb3JrZmxvdyE6IGFueTtcclxuICBhcHByb3ZhbFdvcmtmbG93SWRzOiBhbnlbXSA9IFtdO1xyXG4gIGRlZmF1bHRFZGl0QXBwcm92ZXJzOiBhbnkgPSB7fTtcclxuICBjcmVhdGVBcHByb3ZhbENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdFdvcmtmbG93TGV2ZWwgPSB7fTtcclxuICBub1dvcmtmbG93U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZW1wbGF0ZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZW1wbGF0ZVVybDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwb2xpY3lTZXJ2aWNlOiBQb2xpY3lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5U2VydmljZSxcclxuICAgIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIGNoYW5nZVJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlc3RBcGlTZXJ2aWNlOiBSZXN0QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgb3JnYW5pemF0aW9uVXNlclNlcnZpY2U6IE9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvcmdhbml6YXRpb25Db21tb25TZXJ2aWNlOiBPcmdhbml6YXRpb25Db21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wbGlhbmNlQ29tbW9uU2VydmljZTogQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlmcmFtZVNlcnZpY2U6IElmcmFtZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVVdGlsaXR5U2VydmljZTogRGF0ZVV0aWxpdHlTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJhc2VVUkwgPSBsb2NhdGlvbj8ub3JpZ2luO1xyXG4gICAgaWYgKHRoaXMuYmFzZVVSTCA9PSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJykge1xyXG4gICAgICB0aGlzLmJhc2VVUkwgPSAnaHR0cHM6Ly9kZXYudi1jb21wbHkuY29tJztcclxuICAgIH1cclxuICB9XHJcbiAgcG9saWN5Rm9ybTogUG9saWN5Rm9ybSA9IHtcclxuICAgIHBvbGljeU5hbWU6ICcnLFxyXG4gICAgcG9saWN5Tm90ZXM6ICcnLFxyXG4gICAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBbXSxcclxuICAgIHNlbGVjdGVkQXBwcm92ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkQXNzaWduZWVzOiBbXSwgLy9kb3VidCBpbiBuYW1lXHJcbiAgICBzZWxlY3RlZEdyb3VwQXNzaWduZWU6IFtdLFxyXG4gICAgc2VsZWN0ZWRSZXZpZXdlcnM6IFtdLFxyXG5cclxuICAgIHNlbGVjdGVkUkNzOiBbXSxcclxuICAgIENDRmFpbEVtYWlsOiBbXSxcclxuICAgIENDRmFpbEVtYWlsR3JvdXA6IFtdLFxyXG4gICAgQ0NFbWFpbDogW10sXHJcbiAgICBDQ0dyb3VwRW1haWw6IFtdLFxyXG4gICAgYXZhaWxhYmxlT25Qb3J0YWw6IGZhbHNlLFxyXG4gICAgYWNjZXB0U3VnZ2VzdGlvbnM6IGZhbHNlLFxyXG4gICAgcmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvbjogZmFsc2UsXHJcbiAgICByaXNrUmF0aW5nOiAxLFxyXG4gICAgYXNzb2NpYXRlZERvY3VtZW50czoge1xyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICB9LFxyXG4gICAgcG9saWN5RHVlRGF0ZTogbW9tZW50KCksXHJcbiAgICBjdXN0b21UYWdzOiBbXSxcclxuICAgIGNoZWNrcG9pbnREZXRhaWxzOiBbXSxcclxuICAgIExpbmtlZFBvbGljaWVzOiBbXSxcclxuICAgIHRvdGFsUXVlc3Rpb246IDAsXHJcbiAgICBwYXNzaW5nTWFya3M6IDAsXHJcbiAgICBkb2N1bWVudHNBbmRMaW5rczoge1xyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgIH0sXHJcbiAgICBhZGRSZXNwb25zaWJpbGl0eUNlbnRlcnM6IGZhbHNlLFxyXG4gICAgYWRkUmV2aWV3ZXJzOiBmYWxzZSxcclxuICAgIGFkZENoZWNrcG9pbnRzOiBmYWxzZSxcclxuICAgIGFkZE92ZXJzZWVyczogZmFsc2UsXHJcbiAgICBhZGRBc3NvY2lhdGVkRG9jdW1lbnRzOiBmYWxzZSxcclxuICAgIGFkZFZlcnNpb246IGZhbHNlLFxyXG4gICAgYWRkTGlua0Fzc2Vzc21lbnQ6IGZhbHNlLFxyXG4gICAgYWRkTGlua1Byb2dyYW06IGZhbHNlLFxyXG4gICAgYWRkTGlua1BvbGljaWVzOiBmYWxzZSxcclxuICAgIGlzUG9ydGFsRGlzcGxheUVuYWJsZWQ6IGZhbHNlLFxyXG5cclxuICAgIGZhaWxlZF90aW1lOiAnJyxcclxuICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiAnJyxcclxuICAgIGZyZXF1ZW5jeV90ZXh0OiAnJyxcclxuICAgIG1hcmtfZmFpbGVkX2FmdGVyOiAwLFxyXG4gICAgcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOiAwLFxyXG5cclxuICAgIHJldmlld0ZhaWxlZEFmdGVyOiAwLFxyXG4gICAgcmV2aWV3RmFpbGVkVGltZTogJycsXHJcbiAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxyXG4gICAgcmV2aWV3X2ZyZXF1ZW5jeV90eXBlOiAnJyxcclxuICAgIHJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGU6IDAsXHJcbiAgICByZXZpZXc6IGZhbHNlLFxyXG4gICAgbGlua1Byb2dyYW06IHt9LFxyXG4gICAgcHJvZ3JhbVNlbGVjdGVkVmFsdWVzOiB7fSxcclxuICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxyXG4gICAgcmV2aWV3ZXJfc3RhcnRfZGF0ZTogJycsIC8vVGh1IEZlYiAyMiAyMDI0XHJcbiAgICBwb2xpY3lfdmVyc2lvbjogJycsIC8vIGl0IHdpbGwgYWNjZXB0IG1hdGNoZXMgYWxwaGFiZXRzLCBoeXBoZW5zICgtKSwgZG90cyAoLiksIGFuZCBudW1lcmljIHZhbHVlcyBvbmx5IGFuZCBzaG91bGQgYmUgc21hbGxlciBvciBlcXVhbCB0byA2IGNoYXJhY3RlcnNcclxuICAgIGFzc2Vzc21lbnQ6IFtdLFxyXG4gICAgcG9saWN5X293bmVyczogW10sXHJcbiAgICBwb2xpY3lfZ3JvdXBfb3duZXJzOiBbXSxcclxuICAgIGJ1c2luZXNzQ3ljbGU6IHt9LFxyXG4gICAgcG9saWN5X2lkOiAwLFxyXG4gICAgcG9saWN5X2FjY2Vzc190eXBlOiAwLFxyXG4gICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IFtdLFxyXG4gICAgcG9saWN5X2FjY2Vzc19ncm91cHM6IFtdLFxyXG4gICAgc2VsZWN0ZWRBbGxBdHRlc3RvcnM6IGZhbHNlLFxyXG4gIH07XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0aWF0ZUFQSSgpO1xyXG4gICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgX2luaXRpYXRlQVBJKCkge1xyXG4gICAgdGhpcy5ncm91cEVuYWJsZWQgPVxyXG4gICAgICB0aGlzLmZlYXR1cmU/LmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX3BvbGljeV9ncm91cHMnKSB8fCB0cnVlO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuX2luaXRpYXRlRWRpdEFQSSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRVc2Vyc0xpc3QoKTtcclxuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgIHRoaXMubG9hZGVyID0gdGhpcy5tb2RlID09PSAnRURJVCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLmdldE9yZ0RldGFpbHMoKTtcclxuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldFVzZXJEZXRhaWxzKCk/Ll9pZDtcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmF1dGhTZXJ2aWNlPy5nZXRVc2VyRGV0YWlscygpPy51c2VyO1xyXG4gICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldE1lbWJlcklkKCk7XHJcbiAgICB0aGlzLmNoYW5nZVJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYnVzaW5lc3NDeWNsZSA9IHRoaXMucmVzdEFwaVNlcnZpY2U/LmdldEJ1c2luZXNzQ3ljbGUoKTtcclxuICAgIC8vdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0VXNlcnNMaXN0V2l0aFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIF9pbml0aWF0ZUVkaXRBUEkoKSB7XHJcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmdEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25Db21tb25TZXJ2aWNlPy5nZXRPcmdEZXRhaWxzSW5mbygpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXJlcz8uZW5hYmxlX3Jpc2tjbGFzcykge1xyXG4gICAgICAgICAgdGhpcy5zaG93Umlza0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXM/Ll9pZCkge1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25faWQgPSByZXM/Ll9pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlua2VkUG9saWNpZXMocG9saWN5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLkxpbmtlZFBvbGljaWVzTGlzdChwb2xpY3lJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IFsuLi5uZXcgU2V0KHJlc3BvbnNlPy5kYXRhKV0ucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcyA9IHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkXHJcbiAgICAgICAgKS5tYXAoKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uaXNQb3J0YWxEaXNwbGF5RW5hYmxlZCA9IHJlc3BvbnNlPy5kaXNwbGF5T25Qb3J0YWw7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXlzIHRoZSBsaXN0aW5nIHBhZ2VzIHRoZSBsZWZ0IHNpZGUgb2YgcG9saWN5IGZvcm0gdG8gc2V0IGFuZCBlZGl0IHRoZSBkcm9wZG93biBmaWVsZHMgdmFsdWVzXHJcbiAgICogQHBhcmFtIHR5cGUgaG9sZHMgbmFtZSBvZiBwYXJ0aWN1bGFyIGxpc3QgaXMgdG8gYmUgZGlzcGxheWVkXHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcclxuICAgKiBAcGFyYW0gd29ya2Zsb3dUeXBlIGl0IHNldHMgdGhlIGFwcHJvdmFsIHdvcmtmbG93IHR5cGUgd2hpbGUgZWRpdGluZyB0aGUgYXBwcm92YWwgd29ya2Zsb3cuXHJcbiAgICovXHJcbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuLCB3b3JrZmxvd1R5cGU/OiBhbnkpIHtcclxuICAgIGlmICh3b3JrZmxvd1R5cGUpIHtcclxuICAgICAgdGhpcy53b3JrZmxvd1R5cGUgPSB3b3JrZmxvd1R5cGU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gZXZlbnQgPyB0eXBlIDogJyc7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxyXG4gICAgICBjYXNlICdjY0ZhaWwnOlxyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cExpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlcyB0aGUgbGlzdGluZyBwYWdlc1xyXG4gICAqL1xyXG4gIGRpc2FibGVTZWxlY3RvcigpIHtcclxuICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuaXNQYWdpbmF0aW9uRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0ZWRVc2Vyc0xpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgUmVzcG9uc2liaWxpdHkgY2VudGVycyBsaXN0XHJcbiAgICovXHJcbiAgZ2V0UkNMaXN0KCkge1xyXG4gICAgdGhpcy5jb21wbGlhbmNlQ29tbW9uU2VydmljZT8uZ2V0UmNMaXN0SW5mbygpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJjTGlzdCA9IHJlcztcclxuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgb3JnYW5pemF0aW9uIHVzZXJzIGxpc3RcclxuICAgKi9cclxuICBnZXRVc2Vyc0xpc3QoKSB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMudXNlcnNMaXN0ID0gdGhpcy51cGRhdGVNZW1iZXJJZEtleShyZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVwbGFjZSBtZW1iZXJfaWQgdmFsdWUgdG8gbXlfbWVtYmVyX2lkXHJcbiAgdXBkYXRlTWVtYmVySWRLZXkobGlzdDogYW55KSB7XHJcbiAgICBsZXQgdXBkYXRlZExpc3QgPSBsaXN0Lm1hcCgoZWxlOiBhbnkpID0+ICh7XHJcbiAgICAgIC4uLmVsZSxcclxuICAgICAgbWVtYmVyX2lkOiBlbGU/Lm15X21lbWJlcl9pZCxcclxuICAgIH0pKTtcclxuICAgIHJldHVybiB1cGRhdGVkTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgUG9saWN5IENhdGVnb3JpZXMgbGlzdFxyXG4gICAqL1xyXG4gIGdldENhdGVnb3JpZXNMaXN0KCkge1xyXG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IHJlcztcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAocmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUNvbmZpZy5ub0RhdGFUZXh0ID0gJ05vIHJlc3VsdHMgbWF0Y2hlZCB5b3VyIHNlYXJjaCBjcml0ZXJpYS4nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBncm91cHMgbGlzdFxyXG4gICAqL1xyXG4gIGdldEdyb3Vwc0xpc3QoKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRPcmdhbml6YXRpb25Qb2xpY3lHcm91cHMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICBjb25zdCBncm91cHM6IGFueSA9IFtdO1xyXG4gICAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICBncm91cE5hbWU6IGVsZW1lbnQuZ3JvdXBfbmFtZSxcclxuICAgICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGdyb3Vwcy5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZ3JvdXBzO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy9HZXQgdGhlIGxpc3Qgb2Ygb3ZlcnNlZXJzIGdyb3VwLlxyXG4gIG92ZXJzZWVyR3JvdXBMaXN0KCkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2U/LmdldE9yZ2FuaXphdGlvbk92ZXJzZWVyc0dyb3VwcygpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QgPSByZXM/LmRhdGE7XHJcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYXBwcm92ZXJzIHdvcmtmbG93IGZyb20gdGhlIHNlbGVjdGVkIHdvcmtmbG93IG9uIEFwcHJvdmVycyB3b3JrZmxvdyBsaXN0XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHByZWRlZmluZWQgd29ya2Zsb3dcclxuICAgKi9cclxuICBzZWxlY3RlZFdvcmtmbG93Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCA9PT0gLTEpIHtcclxuICAgICAgLy8gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XHJcbiAgICAgIC8vIHRoaXMuYWRkTW9yZUxldmVscyA9IHRydWVcclxuICAgICAgLy8gdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkYXRhID0gY2xvbmVEZWVwKGV2ZW50LmFwcHJvdmFsX3dvcmtmbG93KTtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaXRlbS5uYW1lID0gaXRlbS50eXBlO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW0uYXBwcm92ZXJzLm1hcCgoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkKTtcclxuICAgICAgICBpdGVtLmFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbEFwcHJvdmVycywgaWRzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSB0aGlzLnByZXNlcnZlQXBwcm92YWxGbGFncyhuZXdBcnJheSwgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZXMgYXBwcm92ZXJzIGZyb20gbmV3TGV2ZWxzIHdpdGggYXBwcm92ZXJzIGZyb20gY3VycmVudExldmVsc1xyXG4gICAqIHdoaWxlIHByZXNlcnZpbmcgYXBwcm92YWwtcmVsYXRlZCBmbGFncy5cclxuICAgKiBBbHNvIGZpbHRlcnMgb3V0IGxldmVscyB0aGF0IGVuZCB1cCB3aXRoIG5vIGFwcHJvdmVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBuZXdMZXZlbHMgLSBBcnJheSBvZiBuZXcgbGV2ZWxzIHdpdGggYXBwcm92ZXJzLlxyXG4gICAqIEBwYXJhbSBjdXJyZW50TGV2ZWxzIC0gT2JqZWN0IGNvbnRhaW5pbmcgZXhpc3RpbmcgbGV2ZWxzLlxyXG4gICAqIEByZXR1cm5zIEEgbmV3IGFycmF5IG9mIGxldmVscyB3aXRoIG1lcmdlZCBhcHByb3ZlcnMgYW5kIHByZXNlcnZlZCBmbGFncy5cclxuICAgKi9cclxuICBwcml2YXRlIHByZXNlcnZlQXBwcm92YWxGbGFncyhuZXdMZXZlbHM6IGFueVtdLCBjdXJyZW50TGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55W10ge1xyXG4gICAgcmV0dXJuIChuZXdMZXZlbHMgfHwgW10pLnJlZHVjZTxhbnlbXT4oKGFjYzogYW55W10sIGxldmVsOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbGV2ZWxLZXkgPSBgbGV2ZWwke2luZGV4ICsgMX1gO1xyXG4gICAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWxzPy5bbGV2ZWxLZXldO1xyXG5cclxuICAgICAgLy8gUHJlc2VydmUgZmxhZ3MgaWYgYXBwcm92ZXIgYWxyZWFkeSBleGlzdHMgaW4gY3VycmVudExldmVsXHJcbiAgICAgIGNvbnN0IGFwcHJvdmVycyA9IHRoaXMubWVyZ2VBcHByb3ZlcnNGb3JMZXZlbChsZXZlbD8uYXBwcm92ZXJzLCBjdXJyZW50TGV2ZWwpO1xyXG5cclxuICAgICAgLy8gT25seSBpbmNsdWRlIHRoaXMgbGV2ZWwgaWYgaXQgaGFzIGF0IGxlYXN0IG9uZSBhcHByb3ZlclxyXG4gICAgICBpZiAoYXBwcm92ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhY2MucHVzaCh7XHJcbiAgICAgICAgICAuLi5sZXZlbCxcclxuICAgICAgICAgIGFwcHJvdmVycyxcclxuICAgICAgICAgIGFwcHJvdmFsX2RvbmU6IGN1cnJlbnRMZXZlbD8uYXBwcm92YWxfZG9uZSA/PyBsZXZlbD8uYXBwcm92YWxfZG9uZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBBcHByb3ZlcnMgd29ya2Zsb3cgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xyXG4gICAqIEBwYXJhbSBpZCBjb250YWlucyBzZWxlY3RlZCBjYXRlZ29yaWVzIGlkJ3NcclxuICAgKi9cclxuICBnZXRBcHByb3ZlcldvcmtGbG93KGlkOiBhbnksIGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRXb3JrZmxvd0xpc3QoaWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8ubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgIHRoaXMuYXBwcm92ZXJXb3JrRmxvd0xpc3QgPSByZXM7IC8vIGdldHRpbmcgYWxsIGFwcHJvdmVyIHNhdmVkIHdvcmtmbG93c1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmVyV29ya0Zsb3dMaXN0Py5mb3JFYWNoKCh3b3JrZmxvdykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzPy5pbmNsdWRlcyh3b3JrZmxvdz8uX2lkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlRGVmYXVsdFdvcmtmbG93KHdvcmtmbG93KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYXBwcm92YWxEYXRhOiBhbnkgPSBbXTtcclxuICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5ub1dvcmtmbG93U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgYXBwcm92YWxXb3JrZmxvdzogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVXb3JrZmxvdygpO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzKS5mb3JFYWNoKChhcHByb3ZlcnNMZXZlbCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLmFwcHJvdmVycyA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2FwcHJvdmVyc0xldmVsXT8uYXBwcm92ZXJzPy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgIChhcHA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXBwLm1lbWJlcl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHByb3ZlclVzZXIgPSB0aGlzLnVzZXJzTGlzdD8uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXI6IGFueSkgPT4gdXNlci5teV9tZW1iZXJfaWQgPT0gYXBwLm1lbWJlcl9pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlclVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLm1lbWJlcl9uYW1lID0gYXBwcm92ZXJVc2VyPy5tZW1iZXJfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEFwcHJvdmFsU3RhdHVzID0gdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVyc1thcHByb3ZlcnNMZXZlbF0/LmFwcHJvdmFsX2RvbmUgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGV2ZWxEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgbGV2ZWwxOiBhcHByb3ZlcnNMZXZlbCxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLFxyXG4gICAgICAgICAgICAgICAgYXBwcm92YWxfZG9uZTogb3JpZ2luYWxBcHByb3ZhbFN0YXR1cyxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGFwcHJvdmFsV29ya2Zsb3cucHVzaChsZXZlbERhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXBwcm92YWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIHdvcmtmbG93X25hbWU6ICcnLFxyXG4gICAgICAgICAgICAgIHdvcmtmbG93X21vZHVsZTogJ1BPTElDWScsXHJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHt9LFxyXG4gICAgICAgICAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiBhcHByb3ZhbFdvcmtmbG93LFxyXG4gICAgICAgICAgICAgIGNhdGVnb3J5X2FycjogW10sXHJcbiAgICAgICAgICAgICAgY3JlYXRvcjoge30sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdLmFwcHJvdmFsX3dvcmtmbG93ID0gYXBwcm92YWxEYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSB0aGlzLnNlbGVjdGVkV29ya2Zsb3c7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3QoXHJcbiAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICBbZGF0YS5SZXZpZXdlck1lbWJlcklkXSxcclxuICAgICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGVmYXVsdFdvcmtmbG93KHdvcmtmbG93OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzICYmIHdvcmtmbG93Py5hcHByb3ZhbF93b3JrZmxvdykge1xyXG4gICAgICBjb25zdCB1cGRhdGVkV29ya2Zsb3cgPSB7IC4uLndvcmtmbG93IH07XHJcbiAgICAgIHVwZGF0ZWRXb3JrZmxvdy5hcHByb3ZhbF93b3JrZmxvdyA9IHdvcmtmbG93LmFwcHJvdmFsX3dvcmtmbG93Lm1hcCgobGV2ZWw6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxldmVsS2V5ID0gYGxldmVsJHtpbmRleCArIDF9YDtcclxuICAgICAgICBjb25zdCBjdXJyZW50UG9saWN5TGV2ZWwgPSB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2xldmVsS2V5XTtcclxuXHJcbiAgICAgICAgLy8gSWYgYXBwcm92YWwgc3RhdHVzIGV4aXN0cywgcHJlc2VydmUgaXQ7IG90aGVyd2lzZSwga2VlcCB0aGUgZXhpc3Rpbmcgc3RhdHVzIGluIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKGN1cnJlbnRQb2xpY3lMZXZlbCkge1xyXG4gICAgICAgICAgY29uc3QgbWVyZ2VkQXBwcm92ZXJzID0gdGhpcy5tZXJnZUFwcHJvdmVyc0ZvckxldmVsKGxldmVsLmFwcHJvdmVycywgY3VycmVudFBvbGljeUxldmVsKTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLmxldmVsLFxyXG4gICAgICAgICAgICBhcHByb3ZlcnM6IG1lcmdlZEFwcHJvdmVycyxcclxuICAgICAgICAgICAgYXBwcm92YWxfZG9uZTogY3VycmVudFBvbGljeUxldmVsLmFwcHJvdmFsX2RvbmUgPyBjdXJyZW50UG9saWN5TGV2ZWwuYXBwcm92YWxfZG9uZSA6IGxldmVsLmFwcHJvdmFsX2RvbmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsZXZlbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ucHVzaCh1cGRhdGVkV29ya2Zsb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5wdXNoKHdvcmtmbG93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VBcHByb3ZlcnNGb3JMZXZlbChsZXZlbEFwcHJvdmVyczogYW55W10sIGN1cnJlbnRMZXZlbDogYW55KTogYW55W10ge1xyXG4gICAgcmV0dXJuIChsZXZlbEFwcHJvdmVycyB8fCBbXSkubWFwKChhcHByb3ZlcjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gY3VycmVudExldmVsPy5hcHByb3ZlcnM/LmZpbmQoXHJcbiAgICAgICAgKGE6IGFueSkgPT4gYT8ubWVtYmVyX2lkID09PSBhcHByb3Zlcj8ubWVtYmVyX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5hcHByb3ZlcixcclxuICAgICAgICAgIGFwcHJvdmFsX2ZsYWc6IGV4aXN0aW5nLmFwcHJvdmFsX2ZsYWcgPz8gYXBwcm92ZXIuYXBwcm92YWxfZmxhZyxcclxuICAgICAgICAgIHJlamVjdF9mbGFnOiBleGlzdGluZy5yZWplY3RfZmxhZyA/PyBhcHByb3Zlci5yZWplY3RfZmxhZyxcclxuICAgICAgICAgIHJlbW92ZV9mbGFnOiBleGlzdGluZy5yZW1vdmVfZmxhZyA/PyBhcHByb3Zlci5yZW1vdmVfZmxhZ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFwcHJvdmVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVXb3JrZmxvdygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtdO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBbXTtcclxuICAgIHRoaXMuZWRpdEFwcHJvdmFsV29ya2Zsb3cgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIEFwcHJvdmVycyBhbmQgcmV2aWV3ZXJzIGxpc3QgYmFzZWQgb24gc2VsZWN0ZWQgcG9saWN5IGNhdGVnb3JpZXNcclxuICAgKiBAcGFyYW0gY2F0ZWdvcnlJZHMgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXHJcbiAgICovXHJcbiAgZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChcclxuICAgIGNhdGVnb3J5SWRzOiBhbnksXHJcbiAgICBhcHByb3Zlcklkcz86IGFueSxcclxuICAgIHJldmlld2VySWRzPzogYW55LFxyXG4gICAgcG9saWN5PzogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmFsbEFwcHJvdmVycyA9IFtdO1xyXG4gICAgdGhpcy5hbGxSZXZpZXdlcnMgPSBbXTtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRSZXZpZXdlcnMoY2F0ZWdvcnlJZHMpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8ubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgIHJlcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMgPSB1bmlxQnkoXHJcbiAgICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMuY29uY2F0KGVsZW1lbnQuYWxsX2FwcHJvdmVycyksXHJcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMgPSB1bmlxQnkoXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5hbGxfYXBwcm92ZXJzLmNvbmNhdChcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hbGxfYXV0aG9yc1xyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHRoaXMuc2V0T3duZXJzT25Mb2FkKCk7XHJcbiAgICAgICAgICAgIGlmIChwb2xpY3k/LnBvbGljeV9vd25lcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsbEFwcHJvdmVycyxcclxuICAgICAgICAgICAgICAgIHBvbGljeT8ucG9saWN5X293bmVycyA/PyBbXSxcclxuICAgICAgICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJzQWNjZXNzTGlzdEJ5Q2F0ZWdvcnkoZWxlbWVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcHJvdmVySWRzPy5hcHByb3ZlcnMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmhhc1dvcmtmbG93Q2hhbmdlcyhhcHByb3ZlcklkcykpIHtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IGFwcHJvdmVySWRzPy5hcHByb3ZlcnM7XHJcbiAgICAgICAgICAgIGxldCBhcHByb3ZlckxldmVscyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIG9iaikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGlkcyA9IG9ialtpdGVtXT8uYXBwcm92ZXJzPy5tYXAoXHJcbiAgICAgICAgICAgICAgICAoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IG9ialtpdGVtXT8ubmFtZSA/PyBvYmpbaXRlbV0/LnR5cGUsXHJcbiAgICAgICAgICAgICAgICBhcHByb3ZlcnM6IG9ialtpdGVtXT8uYXBwcm92ZXJzLFxyXG4gICAgICAgICAgICAgICAgYXBwcm92YWxfZG9uZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDE6IG9ialtpdGVtXT8ubGV2ZWwxIHx8IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICBhbGlhc19uYW1lOiBvYmpbaXRlbV0/LmFsaWFzX25hbWUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBhcHByb3ZlckxldmVscy5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmVyTGV2ZWxzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgYXBwcm92YWxfd29ya2Zsb3c6IGFwcHJvdmVyTGV2ZWxzLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldmlld2VySWRzKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxyXG4gICAgICAgICAgICByZXZpZXdlcklkcyxcclxuICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1dvcmtmbG93Q2hhbmdlcyhuZXdBcHByb3ZlcklkczogYW55KTogYm9vbGVhbiB7XHJcbiAgICAvLyBJZiB0aGVyZSBpcyBubyB3b3JrZmxvdyBzZWxlY3RlZFxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCB8fCAhdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZ1dvcmtmbG93ID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdztcclxuICAgIGNvbnN0IG5ld0FwcHJvdmVycyA9IG5ld0FwcHJvdmVySWRzPy5hcHByb3ZlcnM7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgbmV3IGFwcHJvdmVycyBleGlzdCBhbmQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgbGV2ZWxzIFxyXG4gICAgaWYgKCFuZXdBcHByb3ZlcnMgfHwgT2JqZWN0LmtleXMobmV3QXBwcm92ZXJzKS5sZW5ndGggIT09IGV4aXN0aW5nV29ya2Zsb3cubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ29tcGFyZSBlYWNoIGxldmVsIGluIHRoZSB3b3JrZmxvd1xyXG4gICAgZm9yIChjb25zdCBsZXZlbEtleSBpbiBuZXdBcHByb3ZlcnMpIHtcclxuICAgICAgY29uc3QgbmV3TGV2ZWwgPSBuZXdBcHByb3ZlcnNbbGV2ZWxLZXldO1xyXG4gICAgICBsZXQgZXhpc3RpbmdMZXZlbCA9IGV4aXN0aW5nV29ya2Zsb3cuZmluZChcclxuICAgICAgICAobGV2ZWw6IGFueSkgPT4gbGV2ZWwuYWxpYXNfbmFtZSA9PT0gbmV3TGV2ZWwuYWxpYXNfbmFtZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWV4aXN0aW5nTGV2ZWwgJiYgZXhpc3RpbmdXb3JrZmxvd1twYXJzZUludChsZXZlbEtleS5yZXBsYWNlKCdsZXZlbCcsICcnKSkgLSAxXSkge1xyXG4gICAgICAgIGV4aXN0aW5nTGV2ZWwgPSBleGlzdGluZ1dvcmtmbG93W3BhcnNlSW50KGxldmVsS2V5LnJlcGxhY2UoJ2xldmVsJywgJycpKSAtIDFdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBubyBleGlzdGluZyBsZXZlbCBmb3VuZCwgY29uc2lkZXIgdGhpcyBhcyBhIG5ldyBsZXZlbFxyXG4gICAgICBpZiAoIWV4aXN0aW5nTGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFwcHJvdmFsIHR5cGUgaGFzIGNoYW5nZWRcclxuICAgICAgaWYgKGV4aXN0aW5nTGV2ZWwgJiYgbmV3TGV2ZWwudHlwZSAhPT0gZXhpc3RpbmdMZXZlbC50eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBhcHByb3ZlciBuYW1lIGhhcyBjaGFuZ2VkXHJcbiAgICAgIGlmIChleGlzdGluZ0xldmVsICYmIG5ld0xldmVsLmFsaWFzX25hbWUgIT09IGV4aXN0aW5nTGV2ZWwuYWxpYXNfbmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBuZXdNZW1iZXJJZHMgPSAobmV3TGV2ZWw/LmFwcHJvdmVycyB8fCBbXSlcclxuICAgICAgICAubWFwKChhOiBhbnkpID0+IGE/Lm1lbWJlcl9pZClcclxuICAgICAgICAuZmlsdGVyKChpZDogYW55KSA9PiBpZCAhPSBudWxsKTtcclxuXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVtYmVySWRzID0gKGV4aXN0aW5nTGV2ZWw/LmFwcHJvdmVycyB8fCBbXSlcclxuICAgICAgICAubWFwKChhOiBhbnkpID0+IGE/Lm1lbWJlcl9pZClcclxuICAgICAgICAuZmlsdGVyKChpZDogYW55KSA9PiBpZCAhPSBudWxsKTtcclxuXHJcbiAgICAgIC8vIElmIG1lbWJlciBjb3VudCBvZiBhcHByb3ZlcnMgZGlmZmVyc1xyXG4gICAgICBpZiAobmV3TWVtYmVySWRzLmxlbmd0aCAhPT0gZXhpc3RpbmdNZW1iZXJJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbXBhcmUgbWVtYmVycyBwZXIgbGV2ZWxcclxuICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChuZXdNZW1iZXJJZHMpO1xyXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIGV4aXN0aW5nTWVtYmVySWRzKSB7XHJcbiAgICAgICAgaWYgKCFuZXdTZXQuaGFzKGlkKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKioqKioqKlxyXG4gICAqIEl0IGlzIHRvIHBvcHVsYXRlIG1vcmUgb3B0aW9ucyBlbGVtZW50cyB3aGlsZSBlZGl0aW5nIHRoZSBwb2xpY3kgZm9ybVxyXG4gICAqL1xyXG4gIHBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKSB7XHJcbiAgICBjb25zdCBhY3RpdmF0ZWRPcHRpb25zID0gW107XHJcbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycykge1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ1JFU1BPTlNJQklMSVRZX0NFTlRFUicpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpOyB9XHJcbiAgICAvLyBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZENoZWNrcG9pbnRzKSB7IGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFMnKTsgfVxyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRPdmVyc2VlcnMpIHtcclxuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzKSB7XHJcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVMQVRFRF9ET0NVTUVOVFMnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24pIHtcclxuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdWRVJTSU9OJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50Lmxlbmd0aCkge1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfQVNTRVNTTUVOVFMnKTtcclxuICAgICAgdGhpcy5nZXRBc3Nlc3NtZW50RGV0YWlscyh0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudFswXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtICYmXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxyXG4gICAgKSB7XHJcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnTElOS19QUk9HUkFNX1JFU1BPTlNJQklMSVRJRVMnKTtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUycpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGFjdGl2YXRlZE9wdGlvbnMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJdCBpcyB0byBhZGQgYW5kIHJlbW92ZSB0aGUgZWxlbWVudHMgZnJvbSBNb3JlIG9wdGlvbiB0byB0aGUgcG9saWN5IEZvcm1cclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgZGV0YWlscyByZWxhdGVkIHRvIGNoZWNrZWQgdmFsdWUsIGNvZGUgcGFydGljdWxhciBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uc1xyXG4gICAqL1xyXG4gIGFkZE1vcmVJbmZvKGV2ZW50OiBhbnkpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICBjYXNlICdSRVNQT05TSUJJTElUWV9DRU5URVInOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSBldmVudC5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlICdSRVZJRVdFUic6XHJcbiAgICAgIC8vICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgIC8vICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0NIRUNLUE9JTlRTJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkQ2hlY2twb2ludHMgPSBldmVudC5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdPVkVSU0VFUic6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZE92ZXJzZWVycyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1JFTEFURURfRE9DVU1FTlRTJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkQXNzb2NpYXRlZERvY3VtZW50cyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1ZFUlNJT04nOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRWZXJzaW9uID0gZXZlbnQuY2hlY2tlZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTElOS19QUk9HUkFNX1JFU1BPTlNJQklMSVRJRVMnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rUHJvZ3JhbSA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0xJTktfQVNTRVNTTUVOVFMnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rQXNzZXNzbWVudCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XHJcbiAgICovXHJcbiAgY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKSB7XHJcbiAgICBjb25zdCBlZGl0TG9hZGVyID1cclxuICAgICAgdGhpcy5tb2RlID09PSAnRURJVCdcclxuICAgICAgICA/IHRoaXMucmNMaXN0TG9hZGVkICYmXHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCAmJlxyXG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZFxyXG4gICAgICAgIDogdHJ1ZTtcclxuICAgIGlmICh0aGlzLnVzZXJzTGlzdExvYWRlZCAmJiBlZGl0TG9hZGVyKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YSAmJiB0aGlzLmNvbnZlcnRGaWxlRGF0YS5maWxlTmFtZSkge1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gdGhpcy5jb252ZXJ0RmlsZURhdGEuZmlsZU5hbWUuc3Vic3RyaW5nKFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YS5jYXRlZ29yeUlkKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkTGlzdCgnY2F0ZWdvcnknLCBbdGhpcy5zZWxlY3RlZENhdGVnb3J5XSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0UG9saWN5KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcnMgdGhlIGNvbmZpcm1hdGlvbiBwb3B1cCB3aGVuIGF2YWlsYWJpbGl0eSBvbiBQb2xpY3kgcG9ydGFsIHRvZ2dsZSBpbiBPTlxyXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyB0b2dnbGUgdmFsdWUgd2hpY2ggaXMgYWx3YXlzIHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBhdmFpbGFiaWxpdHlPblBvcnRhbChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgY29uc3QgY29uZmlybWF0aW9uRGV0YWlsczogQ29uZmlybWF0aW9uQWxlcnQgPSB7XHJcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIG1lc3NhZ2U6IGBUaGUgcG9saWNpZXMgdGhhdCB5b3UgaW50ZW5kIHRvIG1ha2UgYWNjZXNzaWJsZSB0byB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbiBjYW4gYmUgYWRkZWQgdG8gdGhlIHBvbGljeSBwb3J0YWwuXHJcbiAgICAgICAgSXQgaXMgbGlrZSBhIHNoYXJlZCBjYXRhbG9nIG9mIGFsbCBhY3RpdmUgJiB1cGRhdGVkIHBvbGljaWVzIHRoYXQgYW55IGxvZ2dlZCBpbiB1c2VyIGNhbiByZWFkLyBkb3dubG9hZCBmb3IgcmVmZXJlbmNlLlxyXG4gICAgICAgIEhlbmNlLCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciB5b3UgdG8gc2V0IHVwIGFuIGF0dGVzdGF0aW9uIHNjaGVkdWxlIG9yIHNlbGVjdFxyXG4gICAgICAgIHJlYWRlcnMgdG8gYXR0ZXN0IHRoZSBwb2xpY2llcy5gLFxyXG4gICAgICAgIGFjdGlvbjogJ1BPTElDWV9QT1JUQUwnLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb25BbGVydC5lbWl0KGNvbmZpcm1hdGlvbkRldGFpbHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjZWl2ZXMgdGhlIGlucHV0IGZyb20gdGhlIENvbmZpcm1hdGlvbiBkaWFsb2cgb2YgYXZhaWxhYmxlIG9uIFBvbGljeSBwb3J0YWxcclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgb3B0aW9uIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2hpY2ggaXMgYWx3YXlzIGVpdGhlciAnWUVTJyBvciAnTk8nXHJcbiAgICovXHJcbiAgY29uZmlybVBvbGljeVBvcnRhbChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPSBldmVudCA9PSAnWUVTJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChldmVudCA9PSAnTk8nKSB7XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9ucyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgcG9saWN5Rm9ybSB3aXRoIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlIGxpc3RpbmcsIGZyZXF1ZW5jeSwgZmlsZSB1cGxvYWQgY29tcG9uZW50c1xyXG4gICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgZmllbGQgb24gUG9saWN5IGZvcm0uXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkSXRlbXMgY29udGFpbnMgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgbGlzdFxyXG4gICAqL1xyXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiVHlwZTo6IFwiLCB0eXBlKTtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICAgICAgdGhpcy5yY0xpc3QsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgJ2l0ZW1faWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXHJcbiAgICAgICAgICAnX2lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLFxyXG4gICAgICAgICAgJ19pZCdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcclxuICAgICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3cob2JqZWN0SWRzKTtcclxuICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3Qob2JqZWN0SWRzKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGFnID0gZWxlbWVudC5jdXN0b21fdGFncztcclxuICAgICAgICAgIGlmICh0YWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ25hbWUgPT0gdGFnRGF0YS50YWduYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XHJcbiAgICAgICAgbGV0IHVzZXJJZHMsIGdyb3VwSWRzO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xyXG4gICAgICAgICAgdXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMudXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgICAgIGdyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy5ncm91cHMsICdncm91cF9pZCcpO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZSA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXHJcbiAgICAgICAgICAgIGdyb3VwSWRzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1c2VySWRzID0gc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0LFxyXG4gICAgICAgICAgdXNlcklkcyxcclxuICAgICAgICAgICdteV9tZW1iZXJfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRlZFVzZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxyXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSxcclxuICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NFbWFpbCc6XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkVXNlcklkcywgc2VsZWN0ZWRHcm91cElkcztcclxuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgICAgIHNlbGVjdGVkVXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXM/LnVzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBzZWxlY3RlZEdyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0dyb3VwRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEdyb3VwSWRzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXJJZHMsXHJcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jY0VtYWlsT2JqSWRzID0gdGhpcy5nZXRHcm91cE9iamVjdElkKFxyXG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRlZFVzZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjY0ZhaWwnOlxyXG4gICAgICAgIGxldCBzZWxlY3RlZEZhaWxVc2VySWRzLCBzZWxlY3RlZEZhaWxHcm91cElkcztcclxuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgICAgIHNlbGVjdGVkRmFpbFVzZXJJZHMgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8udXNlcnMsXHJcbiAgICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc2VsZWN0ZWRGYWlsR3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXAgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEZhaWxHcm91cElkcyxcclxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRmFpbFVzZXJJZHMsXHJcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jY0ZhaWxHcm91cE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcclxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRlZFVzZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhcHByb3ZlcnMnOlxyXG4gICAgICAgIGNvbnN0IGFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5hZGRNb3JlTGV2ZWxzKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxyXG4gICAgICAgICAgICBhcHByb3ZlcnMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW3RoaXMuYXBwcm92ZXJzTGlzdEluZGV4XSA9IHtcclxuICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxyXG4gICAgICAgICAgYXBwcm92ZXJzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyX2F0dGFjaG1lbnRzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXMgPVxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XHJcblxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rcyA9XHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5saW5rcyA/PyBbXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzb2NpYXRlZERvY3VtZW50cyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXMgPVxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzID1cclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzID8/IFtdO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID1cclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPz8gMDtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucGFzc2luZ01hcmtzID0gc2VsZWN0ZWRJdGVtcz8ucmVxdWlyZWRQb2ludCA/PyAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvd25lcnMnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwb2xpY3lBY2Nlc3MnOlxyXG4gICAgICAgIGxldCBhY2Nlc3NJZHMsIGFjY2Vzc0dyb3VwSWRzO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCA9XHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5mdXR1cmVVc2Vyc1dpbGxTZWxlY3Q7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XHJcbiAgICAgICAgICBhY2Nlc3NJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zLnVzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBhY2Nlc3NHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMuZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXHJcbiAgICAgICAgICAgIGFjY2Vzc0dyb3VwSWRzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhY2Nlc3NJZHMgPSBzZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXHJcbiAgICAgICAgICBhY2Nlc3NJZHMsXHJcbiAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0ZWRVc2Vyc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaXNMaW5rZWRQb2xpY2VzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uTGlua2VkUG9saWNpZXMgPSB0aGlzLmxpc3RPZlNlbGVjdGVkUG9saWNpZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5zZWxlY3RlZFBvbGljeUxpc3RcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IHNlbGVjdGVkSXRlbXM/LnNlbGVjdGVkUG9saWN5TGlzdDtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgbGlzdE9mU2VsZWN0ZWRQb2xpY2llcyhzZWxlY3RlZFBvbGljaWVzOiBhbnkpIHtcclxuICAgIHJldHVybiBzZWxlY3RlZFBvbGljaWVzPy5tYXAoKHBvbGljeTogYW55KSA9PiBwb2xpY3k/LmNvbnRyYWN0X2lkKTtcclxuICB9XHJcblxyXG4gIC8vcmV0dXJuIHRoZSBfaWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3ZlcnNlZXIgZ3JvdXAuXHJcbiAgZ2V0R3JvdXBPYmplY3RJZChvdmVyc2Vlckdyb3VwPzogYW55KSB7XHJcbiAgICBsZXQgb3ZlcnNlZXJHcm91cElkQXJyYXkgPSBvdmVyc2Vlckdyb3VwLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5faWQpO1xyXG4gICAgcmV0dXJuIG92ZXJzZWVyR3JvdXBJZEFycmF5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyB0aGUgcGFydGljdWxhciBlbGVtZW50IGZyb20gc2VsZWN0ZWQgbGlzdFxyXG4gICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgY2FzZVxyXG4gICAqIEBwYXJhbSBldmVudCBob2xkcyB0aGUgaWQgb3Iga2V5IG9mIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqIEBwYXJhbSByZW1vdmVJbmRleCBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqL1xyXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3Muc3BsaWNlKHJjSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAob3duZXI6IGFueSkgPT4gb3duZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdncm91cEFzc2lnbmVlcyc6XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleDogYW55ID1cclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWU/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWU/LnNwbGljZShncm91cEluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsLnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjY0dyb3VwRW1haWwnOlxyXG4gICAgICAgIGNvbnN0IGNjR3JvdXBJbmRleDogYW55ID0gdGhpcy5wb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWw/LmZpbmRJbmRleChcclxuICAgICAgICAgIChncm91cDogYW55KSA9PiBncm91cD8uZ3JvdXBfaWQgPT0gZXZlbnQ/Lmdyb3VwX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NHcm91cEVtYWlsPy5zcGxpY2UoY2NHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNjRW1haWxPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NGYWlsJzpcclxuICAgICAgICBjb25zdCBvdmVyc2Vlck5vdGlmeUluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsLmZpbmRJbmRleChcclxuICAgICAgICAgIChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwuc3BsaWNlKG92ZXJzZWVyTm90aWZ5SW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjR3JvdXBGYWlsRW1haWwnOlxyXG4gICAgICAgIGNvbnN0IGNjRmFpbEdyb3VwSW5kZXg6IGFueSA9XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXA/LnNwbGljZShjY0ZhaWxHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNjRmFpbEdyb3VwT2JqSWRzID0gdGhpcy5nZXRHcm91cE9iamVjdElkKFxyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhcHByb3ZlcnMnOlxyXG4gICAgICAgIGNvbnN0IGFwcHJvdmVyc0luZGV4ID0gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW1xyXG4gICAgICAgICAgcmVtb3ZlSW5kZXhcclxuICAgICAgICBdLmFwcHJvdmVycy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkID09IGV2ZW50Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW3JlbW92ZUluZGV4XS5hcHByb3ZlcnMuc3BsaWNlKFxyXG4gICAgICAgICAgYXBwcm92ZXJzSW5kZXgsXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbcmVtb3ZlSW5kZXhdLmFwcHJvdmVycy5sZW5ndGggPT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yeSc6XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5Lml0ZW1faWQgPT0gZXZlbnQuaXRlbV9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgY29uc3QgdGFnID0gZXZlbnQuY3VzdG9tX3RhZ3M7XHJcbiAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q1QgPSB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWduYW1lID09IHRhZ0RhdGEudGFnbmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhDVCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5jdXN0b21UYWdzLnNwbGljZShpbmRleENULCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcclxuICAgICAgICAgICdfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5sZW5ndGhcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0gPSBPYmplY3QuYXNzaWduKHRoaXMucG9saWN5Rm9ybSk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XHJcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KG9iamVjdElkcyk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBvbGljeUFjY2Vzc0RldGFpbHMoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnRzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0udG90YWxRdWVzdGlvbiA9IDA7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBhc3NpbmdNYXJrcyA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dvcmtmbG93TGV2ZWwnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlbW92ZVdvcmtmbG93KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xpbmtQcm9ncmFtJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSB7XHJcbiAgICAgICAgICBhZGRlZDogW10sXHJcbiAgICAgICAgICByZW1vdmVkOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwb2xpY3lJZHM6IFt0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9pZCA/PyAwXSxcclxuICAgICAgICAgICAgICBwcm9ncmFtSWQ6IHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbT8uX2lkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnb3duZXJzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncG9saWN5QWNjZXNzJzpcclxuICAgICAgICBjb25zdCB1c2VyQWNjZXNzSW5kZXggPSB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmZpbmRJbmRleChcclxuICAgICAgICAgIChvd25lcjogYW55KSA9PiBvd25lcj8uZW1wbG95ZWVfaWQgPT0gZXZlbnQ/LmVtcGxveWVlX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5zcGxpY2UodXNlckFjY2Vzc0luZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhY2Nlc3NHcm91cCc6XHJcbiAgICAgICAgY29uc3QgZ3JvdXBBY2Nlc3NJbmRleDogYW55ID1cclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8uc3BsaWNlKGdyb3VwQWNjZXNzSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJlcXVlbmN5KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2lzTGlua2VkUG9saWNlcyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzPy5maWx0ZXIoXHJcbiAgICAgICAgICAocG9saWN5SWQ6IGFueSkgPT4gZXZlbnQgIT09IHBvbGljeUlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMgPSB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/LmZpbHRlcihcclxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZCAhPT0gZXZlbnRcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZWZyZXNoZXMgdGhlIGFzc2lnbmVlcyBhbmQgb3ZlcnNlZXJzIGxpc3Qgc3VjaCB0aGF0IGJvdGggbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBzYW1lIHVzZXJzIGJhc2VkIG9uIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIHJlZnJlc2hBbGxMaXN0cygpIHtcclxuICAgIGxldCBhc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XHJcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgYWxsVXNlcnMgPSBjbG9uZURlZXAodGhpcy51c2Vyc0xpc3QpO1xyXG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyk7XHJcbiAgICBjb25zdCBvdmVyc2Vlckxpc3QgPSBjbG9uZURlZXAodGhpcy5wb2xpY3lGb3JtLkNDRW1haWwpO1xyXG4gICAgY29uc3Qgbm90aWZ5T3ZlcnNlZXJzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCk7XHJcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBhc3NpZ25lZXNJZHMucHVzaCh1c2VyLmVtcGxveWVlX2lkKTtcclxuICAgIH0pO1xyXG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyLmVtcGxveWVlX2lkKTtcclxuICAgIH0pO1xyXG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyLmVtcGxveWVlX2lkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbmVlc0lkcyldO1xyXG4gICAgcmV2aWV3ZXJzSWRzID0gWy4uLm5ldyBTZXQocmV2aWV3ZXJzSWRzKV07XHJcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XHJcblxyXG4gICAgLy8gdGhpcy5hc3NpZ25vcnNMaXN0ID0gYmVoYWxmVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEocmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSB8fCBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcclxuICAgICAgKHVzZXI6IGFueSkgPT5cclxuICAgICAgICAhKFxyXG4gICAgICAgICAgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8XHJcbiAgICAgICAgICBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgdXNlck9iaiA9IHRoaXMuYXNzaWduZWVzTGlzdDtcclxuICAgICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfaWQgPSB1c2VyLm15X21lbWJlcl9pZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMub3duZXJsaXN0ID0gdXNlck9iajtcclxuICAgIH1cclxuICAgIC8vIHRoaXMucmV2aWV3ZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKGFzc2lnbmVlc0lkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSB8fCBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSkpO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxyXG4gICAgICAodXNlcjogYW55KSA9PlxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBhc3NpZ25lZXNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZCkgfHxcclxuICAgICAgICAgIHJldmlld2Vyc0lkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdob2xlIGxpc3QgYmFzZWQgb24gc2VsZWN0ZWQgaWQncyBmcm9tIGEgcGFydGljdWxhciBsaXN0IGVsZW1lbnRzXHJcbiAgICogQHBhcmFtIGxpc3QgaXQgaXMgdGhlIG1haW4gbGlzdCAgd2hpY2ggY29udGFpbnMgYWxsIGVsZW1lbnRzIGxpc3RcclxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBmaWx0ZXIgc2VsZWN0ZWQgbGlzdCBmcm9tIHRoZSBsaXN0XHJcbiAgICogQHBhcmFtIGlkcyBzZWxlY3RlZCBpZHMgYXJyYXlcclxuICAgKi9cclxuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XHJcbiAgICBpZHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGxpc3Q/LmZpbmRJbmRleChcclxuICAgICAgICAobGlzdEVsZW1lbnQ6IGFueSkgPT4gbGlzdEVsZW1lbnRba2V5XSA9PSBlbGVtZW50XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBpZCdzIGZyb20gYSBwYXJ0aWN1bGFyIGxpc3QgZWxlbWVudHNcclxuICAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxyXG4gICAqIEBwYXJhbSBrZXkgY29udGFpbnMga2V5IHRvIGV4dHJhY3QgaWQgZnJvbSB0aGUgbGlzdFxyXG4gICAqL1xyXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBsaXN0Lm1hcCgoZWxlKSA9PiB7XHJcbiAgICAgIGlmIChlbGVba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBlbGVba2V5XTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSByZXZpZXdlciB0eXBlIGluIGFwcHJvdmFsIHdvcmtmbG93XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHJldmlld2VyIHR5cGVcclxuICAgKi9cclxuICByZXZpZXdlclR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy53b3JrZmxvd1R5cGUgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZnJlcXVlbmN5IGluIGVkaXQgIG1vZGVcclxuICAgKi9cclxuICBmcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihldmVudDogYW55LCBtb2RlOiAnU0VMRUNUJyB8ICdQT1BVTEFURScgPSAnU0VMRUNUJykge1xyXG4gICAgLy9uZWVkcyB0byBkaXNjdXNzIHdpdGggYmFja2VuZCBhYm91dCBlZGl0IGFuZCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgcGF0dGVybjogZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzLCAvL1xyXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUsXHJcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8ubWFya19mYWlsZWRfYWZ0ZXIsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogJycsXHJcbiAgICAgIGxpZmVjeWNsZURldGFpbHM6ICcwMDAwLTAwLTAwfn4wJyxcclxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZmFpbGVkX3RpbWUgIT0gJycgPyBldmVudC5mYWlsZWRfdGltZSA6IERFRkFVTFRfMjRIUixcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogMCxcclxuICAgICAgc3RhcnRGcm9tOiBNYXRoLmZsb29yKFxyXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LmFzc2lnbmVlX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcclxuICAgICAgKSxcclxuICAgICAgc3RhcnREYXRlOiAnJyxcclxuICAgICAgcmVwb3J0SWQ6IDAsXHJcbiAgICAgIHRpbWVJbjEyaHI6IHRoaXMuZnJlcXVlbmN5U2VydmljZS50aW1lSW4xMihcclxuICAgICAgICBldmVudC5mYWlsZWRfdGltZSAhPSAnJyA/IGV2ZW50LmZhaWxlZF90aW1lIDogREVGQVVMVF8yNEhSXHJcbiAgICAgICksXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5mcmVxdWVuY3lfdGV4dCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mcmVxdWVuY3lEYXRhKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHMgaW4gdGhlIHBvbGljeUZvcm1cclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcclxuICAgKi9cclxuICBmcmVxdWVuY3lEYXRhKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGV2ZW50LnBhdHRlcm47XHJcbiAgICAodGhpcy5wb2xpY3lGb3JtLmZyZXF1ZW5jeV90ZXh0ID0gZXZlbnQucGxhY2Vob2xkZXIpLFxyXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLm1hcmtfZmFpbGVkX2FmdGVyID0gZXZlbnQuZmFpbGVkQWZ0ZXIpO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IGV2ZW50LndpbmRvdztcclxuICAgIHRoaXMucG9saWN5Rm9ybS5mYWlsZWRfdGltZSA9IGV2ZW50LnRpbWVJbjI0SHI7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzaWduZWVfc3RhcnRfZGF0ZSA9IG1vbWVudChldmVudC5zdGFydEZyb20gKiAxMDAwKS5mb3JtYXQoXHJcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXHJcbiAgICApO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCBmYWxzZSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXHJcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcclxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXHJcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcclxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcclxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlcixcclxuICAgIH07XHJcbiAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3B1bGF0ZXMgdGhlIGZyZXF1ZW5jeSBmaWVsZCB3aXRoIHNlbGVjdGVkIGRhdGEgZnJvbSBmcmVxdWVuY3kgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXHJcbiAgICovXHJcbiAgZnJlcXVlbmN5UG9wdWxhdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IGV2ZW50Py5yZW1pbmRlcl9iZWZvcmVfZGF5cztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID0gZXZlbnQ/Lm9uX2NvbXBsZXRpb25fb2ZbMF0gPz8gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGV2ZW50Py5wbGFjZWhvbGRlclxyXG4gICAgICA/IGV2ZW50LnBsYWNlaG9sZGVyXHJcbiAgICAgIDogJ0hvdyBvZnRlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgYXR0ZXN0ZWQ/JztcclxuICB9XHJcblxyXG4gIHJldmlld2VyRnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgLy9uZWVkcyB0byBkaXNjdXNzIHdpdGggYmFja2VuZCBhYm91dCBlZGl0IGFuZCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgcGF0dGVybjogZXZlbnQ/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscywgLy9cclxuICAgICAgd2luZG93OiBldmVudD8ucmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSxcclxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5yZXZpZXdGYWlsZWRBZnRlcixcclxuICAgICAgZmFpbGVkX3RpbWVfdXRjOiAnJyxcclxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgICB0aW1lSW4yNEhyOlxyXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwLFxyXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXHJcbiAgICAgICAgbmV3IERhdGUoZXZlbnQucmV2aWV3ZXJfc3RhcnRfZGF0ZSkuZ2V0VGltZSgpIC8gMTAwMFxyXG4gICAgICApLFxyXG4gICAgICBzdGFydERhdGU6ICcnLFxyXG4gICAgICByZXBvcnRJZDogMCxcclxuICAgICAgdGltZUluMTJocjogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKFxyXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSXHJcbiAgICAgICksXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5yZXZpZXdmcmVxdWVuY3lEZXRhaWxzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIHJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKSB7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgICAgcGF0dGVybjogJycsXHJcbiAgICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXHJcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXHJcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgICB3aW5kb3c6IDAsXHJcbiAgICAgIGZhaWxlZDogMCxcclxuICAgICAgdGltZTogREVGQVVMVF9USU1FLFxyXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogMyxcclxuICAgIH07XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfZGV0YWlscyA9ICcnO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfdHlwZSA9ICcnO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBERUZBVUxUXzI0SFI7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQgPyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCByZXZpZXdlciBmcmVxdWVuY3kgZGV0YWlscyBpbiB0aGUgcG9saWN5Rm9ybVxyXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBmcmVxdWVuY3kgZGV0YWlsc1xyXG4gICAqL1xyXG4gIHJldmlld2VyRnJlcXVlbmN5RGF0YShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSBldmVudC5mYWlsZWRBZnRlcjtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfdHlwZSA9IGV2ZW50LnBhdHRlcm4uc3BsaXQoJ34nKVswXTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID0gZXZlbnQud2luZG93O1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBldmVudC50aW1lSW4yNEhyO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld2VyX3N0YXJ0X2RhdGUgPSBtb21lbnQoZXZlbnQuc3RhcnRGcm9tICogMTAwMCkuZm9ybWF0KFxyXG4gICAgICAnZGRkIE1NTSBERCBZWVlZJ1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgZmFsc2UpO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGV2ZW50LnBhdHRlcm4sXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBldmVudC50aW1lSW4xMmhyLFxyXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZXZlbnQud2luZG93LFxyXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZXZlbnQuZmFpbGVkQWZ0ZXIsXHJcbiAgICAgIGxpZmVjeWNsZV9kZXRhaWxzOiBldmVudC5saWZlY3ljbGVEZXRhaWxzLFxyXG4gICAgICBzdGFydF9vZl9kYXlfdXRjOiBldmVudC5zdGFydEZyb20sXHJcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IFtldmVudC5yZXBvcnRJZF0sXHJcbiAgICAgIGRvbV91dGM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxyXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQucGxhY2Vob2xkZXIsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3B1bGF0ZXMgdGhlIHJldmlld2VyIGZyZXF1ZW5jeSBmaWVsZCB3aXRoIHNlbGVjdGVkIGRhdGEgZnJvbSBmcmVxdWVuY3kgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXHJcbiAgICovXHJcbiAgcmV2aWV3ZXJGcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnBhdHRlcm4gPSBldmVudD8uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZmFpbGVkID0gZXZlbnQ/LmZhaWxlZF9hZnRlcl9kYXlzO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9XHJcbiAgICAgIGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDA7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDM7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBldmVudD8ucGxhY2Vob2xkZXJcclxuICAgICAgPyBldmVudC5wbGFjZWhvbGRlclxyXG4gICAgICA6ICdXaGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZCA/JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIHBvbGljeSBmb3JtXHJcbiAgICovXHJcbiAgdmFsaWRhdGVQb2xpY3koKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgfSwgMTAwKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWU7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpID09ICcnIHx8XHJcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICgoKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgfHwgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSAmJlxyXG4gICAgICAgICAgIXRoaXMuZ3JvdXBFbmFibGVkKSB8fFxyXG4gICAgICAgICAgKCgodGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fCB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMpIHx8XHJcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwRW5hYmxlZCkpKSB8fFxyXG4gICAgICAodGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJiAhdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSAmJlxyXG4gICAgICAgICghdGhpcy5ncm91cEVuYWJsZWQgfHxcclxuICAgICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5ncm91cEVuYWJsZWQpKSkgfHxcclxuICAgICAgKHRoaXMucG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICAodGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fCB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMpICYmXHJcbiAgICAgICAgdGhpcy5pc1Bhc3REYXRlKSB8fFxyXG4gICAgICAoIXRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID4gMCkgfHxcclxuICAgICAgKHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID09IDApIHx8XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09IDAgfHxcclxuICAgICAgKCF0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZhbF93b3JrZmxvdz8ubGVuZ3RoICYmXHJcbiAgICAgICAgIXRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoICYmXHJcbiAgICAgICAgdGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgPT09IDApIHx8XHJcbiAgICAgICh0aGlzLmZvcm1hdEV2aWRlbmNlICYmIHRoaXMuZm9ybWF0RXZpZGVuY2UubmV3TGluay5jb250YWluc0Vycm9yKSB8fFxyXG4gICAgICAhdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aCB8fFxyXG4gICAgICAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxyXG4gICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2VzIGFuIGFwaSBjYWxsIHRvIGNyZWF0ZSBhIHBvbGljeVxyXG4gICAqIEBwYXJhbSBwb2xpY3kgY29udGFpbnMgcG9saWN5Rm9ybSBkYXRhXHJcbiAgICovXHJcbiAgc3VibWl0UG9saWN5KCkge1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZVBvbGljeSgpO1xyXG4gICAgaWYgKCF2YWxpZCB8fCAhdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5ub1dvcmtmbG93U2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9saWN5ID0gdGhpcy5wb2xpY3lGb3JtO1xyXG4gICAgbGV0IGFwcHJvdmVyc0RhdGE6IGFueSA9IHRoaXMuY29udmVydEFwcHJvdmFsV29ya2Zsb3coXHJcbiAgICAgIHBvbGljeS5zZWxlY3RlZEFwcHJvdmVyc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBvbGljeS5wb2xpY3lEdWVEYXRlPy4kZCA/PyBwb2xpY3kucG9saWN5RHVlRGF0ZTtcclxuICAgIGxldCByZXZpZXdlckZpbGVzQXJyYXkgPSBjbG9uZURlZXAocG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzKTtcclxuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSByZXZpZXdlckZpbGVzQXJyYXkubWFwKChmaWxlOiBhbnkpID0+IHtcclxuICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlbmFtZTtcclxuICAgICAgZmlsZS5maWxlX3BhdGggPSBmaWxlLmZpbGVwYXRoO1xyXG4gICAgICBmaWxlLm9yZ19uYW1lID0gZmlsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGZpbGUuZmlsZW5hbWU7XHJcbiAgICAgIGRlbGV0ZSBmaWxlLmZpbGVwYXRoO1xyXG4gICAgICBkZWxldGUgZmlsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGZpbGUubGlua1NldDtcclxuICAgICAgcmV0dXJuIGZpbGU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgYXR0ZXN0YXRpb25GaWxlc0FycmF5ID0gY2xvbmVEZWVwKFxyXG4gICAgICBwb2xpY3kuYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGF0dGVzdGF0aW9uRmlsZXMgPSBhdHRlc3RhdGlvbkZpbGVzQXJyYXkubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBlbGUubmFtZSA9IGVsZS5maWxlbmFtZTtcclxuICAgICAgZWxlLmZpbGVfcGF0aCA9IGVsZS5maWxlcGF0aDtcclxuICAgICAgZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZSA9IGVsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZWxlLmZvbGRlcl9pZCA9IGVsZT8uZm9sZGVyX2lkID8gZWxlLmZvbGRlcl9pZCA6IDA7XHJcbiAgICAgIGVsZS5wYXRoID0gZWxlPy5wYXRoID8gZWxlLnBhdGggOiBlbGUuZmlsZXBhdGggKyBlbGUuZmlsZW5hbWU7XHJcbiAgICAgIGVsZS5pc0xpbmtTZXQgPSBlbGUubGlua1NldDtcclxuICAgICAgZWxlLm90aGVyX3R5cGUgPSBlbGU/Lm90aGVycztcclxuICAgICAgZGVsZXRlIGVsZS5maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGVsZS5maWxlcGF0aDtcclxuICAgICAgZGVsZXRlIGVsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGVsZS5saW5rU2V0O1xyXG4gICAgICBkZWxldGUgZWxlLmZpbGVfbmFtZTtcclxuICAgICAgZGVsZXRlIGVsZS5vdGhlcnM7XHJcbiAgICAgIHJldHVybiBlbGU7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHJldmlld2VySUQgPSB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSZXZpZXdlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgIGNvbnN0IHBvbGljeUFjY2Vzc1VzZXJzSWRzID1cclxuICAgICAgdGhpcy5yZXR1cm5JZHMocG9saWN5LnBvbGljeV9hY2Nlc3Nfb3duZXJzLCAnbWVtYmVyX2lkJykgPz8gW107XHJcbiAgICBjb25zdCBwb2xpY3lBY2Nlc3NHcm91cHNJZHMgPVxyXG4gICAgICB0aGlzLnJldHVybklkcyhwb2xpY3kucG9saWN5X2FjY2Vzc19ncm91cHMsICdfaWQnKSA/PyBbXTtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBwb2xpY3lfbmFtZTogcG9saWN5LnBvbGljeU5hbWUsXHJcbiAgICAgIG5vdGVzOiBwb2xpY3kucG9saWN5Tm90ZXMsXHJcbiAgICAgIGlzX3BvcnRhbF9lbmFibGU6IHBvbGljeS5hdmFpbGFibGVPblBvcnRhbCA/IDEgOiAwLFxyXG4gICAgICBpc19zdWdnZXRpb25fZW5hYmxlOiBwb2xpY3kuYWNjZXB0U3VnZ2VzdGlvbnMgPyAxIDogMCxcclxuICAgICAgY2F0ZWdvcnlfaWRfYXJyOiB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRDYXRlZ29yaWVzLCAnaXRlbV9pZCcpLFxyXG4gICAgICBhcHByb3ZlcnM6IGFwcHJvdmVyc0RhdGEsXHJcbiAgICAgIGFzc2lnbmVlX2lkczogcG9saWN5LnNlbGVjdGVkQWxsQXR0ZXN0b3JzID8gW10gOiB0aGlzLnJldHVybklkcyhcclxuICAgICAgICBwb2xpY3k/LnNlbGVjdGVkQXNzaWduZWVzLFxyXG4gICAgICAgICdlbXBsb3llZV9pZCdcclxuICAgICAgKS5tYXAoKGlkKSA9PiBOdW1iZXIoaWQpKSxcclxuICAgICAgdXNlcmdyb3VwX2lkczogdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkR3JvdXBBc3NpZ25lZSwgJ19pZCcpID8/IFtdLFxyXG4gICAgICBJc19hcHByb3ZhbDogMCwgLy9uZWVkcyB0byBjaGVjayBpbiBmZVxyXG5cclxuICAgICAgYXNzb2NpYXRlZF9kb2N1bWVudHM6IHBvbGljeS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXHJcbiAgICAgICAgPyBhdHRlc3RhdGlvbkZpbGVzXHJcbiAgICAgICAgOiBbXSxcclxuXHJcbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShwb2xpY3kuY3VzdG9tVGFncyksXHJcblxyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgPyBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICA6ICcnLFxyXG4gICAgICBmcmVxdWVuY3lfdGV4dDogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZyZXF1ZW5jeV90ZXh0IDogJycsXHJcbiAgICAgIHJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgPyBwb2xpY3kucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXHJcbiAgICAgICAgOiAwLFxyXG4gICAgICBmYWlsZWRfdGltZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZhaWxlZF90aW1lIDogJycsXHJcbiAgICAgIG1hcmtfZmFpbGVkX2FmdGVyOiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICA/IHBvbGljeS5tYXJrX2ZhaWxlZF9hZnRlclxyXG4gICAgICAgIDogJycsXHJcbiAgICAgIC8vIHN0YXJ0RGF0ZTogcG9saWN5LnBvbGljeUR1ZURhdGUudG9EYXRlU3RyaW5nKCksXHJcbiAgICAgIHN0YXJ0RGF0ZTogbW9tZW50KHN0YXJ0RGF0ZSkuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVknKSxcclxuXHJcbiAgICAgIFJldmlld2VyQXR0YWNobWVudHM6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXNcclxuICAgICAgICAgID8gcmV2aWV3ZXJGaWxlc1xyXG4gICAgICAgICAgOiBbXSxcclxuICAgICAgUmV2aWV3ZXJMaW5rczpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rc1xyXG4gICAgICAgICAgPyBwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3NcclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIFJldmlld2VyTWVtYmVySWQ6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiByZXZpZXdlcklEWzBdID8gcmV2aWV3ZXJJRFswXSA6IDAsXHJcbiAgICAgIGlzUmV2aWV3OlxyXG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiZcclxuICAgICAgICAgIChwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXMgfHxcclxuICAgICAgICAgICAgcG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdExpbmtzKSAmJlxyXG4gICAgICAgICAgcmV2aWV3ZXJJRFswXVxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IDAsXHJcblxyXG4gICAgICByZXZpZXdGYWlsZWRBZnRlcjpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgID8gcG9saWN5LnJldmlld0ZhaWxlZEFmdGVyXHJcbiAgICAgICAgICA6IDAsXHJcbiAgICAgIHJldmlld0ZhaWxlZFRpbWU6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdGYWlsZWRUaW1lXHJcbiAgICAgICAgICA6ICcnLFxyXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgIDogJycsXHJcbiAgICAgIHJldmlld19mcmVxdWVuY3lfdHlwZTpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfdHlwZVxyXG4gICAgICAgICAgOiAnJyxcclxuICAgICAgcmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgID8gcG9saWN5LnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGVcclxuICAgICAgICAgIDogMCxcclxuXHJcbiAgICAgIGVudGl0aWVzOiB0aGlzLnBvbGljeUZvcm0/LmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVyc1xyXG4gICAgICAgID8gdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkUkNzLCAnaXRlbV9pZCcpLnRvU3RyaW5nKClcclxuICAgICAgICA6ICcnLFxyXG4gICAgICByaXNrX2NsYXNzOiBwb2xpY3kucmlza1JhdGluZy50b1N0cmluZygpLFxyXG5cclxuICAgICAgQ0NGYWlsRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcclxuICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHBvbGljeS5DQ0ZhaWxFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJykudG9TdHJpbmcoKVxyXG4gICAgICAgIDogJycsXHJcbiAgICAgIENDRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcclxuICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHBvbGljeS5DQ0VtYWlsLCAnZW1wbG95ZWVfZW1haWwnKS50b1N0cmluZygpXHJcbiAgICAgICAgOiAnJyxcclxuXHJcbiAgICAgIGNoZWNrcG9pbnREZXRhaWxzOiBwb2xpY3kuY2hlY2twb2ludERldGFpbHMgPz8gW10sXHJcbiAgICAgIHRvdGFsUXVlc3Rpb246IHBvbGljeS50b3RhbFF1ZXN0aW9uID8gcG9saWN5LnRvdGFsUXVlc3Rpb24gOiAwLCAvL1xyXG4gICAgICBwYXNzaW5nTWFya3M6IHBvbGljeS5wYXNzaW5nTWFya3MgPyBwb2xpY3kucGFzc2luZ01hcmtzIDogMCwgLy9cclxuXHJcbiAgICAgIHBvbGljeUFwcHJvdmFsRmxhZzogMCxcclxuXHJcbiAgICAgIGlzX3NpZ25hdHVyZV9yZXF1aXJlZDogcG9saWN5LnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb24gPyAxIDogMCxcclxuICAgICAgY2NfdXNlcmdyb3VwX2lkczogdGhpcy5jY0VtYWlsT2JqSWRzLFxyXG4gICAgICBjY19mYWlsX3VzZXJncm91cF9pZHM6IHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMsXHJcbiAgICAgIHJldmlld2VyX3N0YXJ0X2RhdGU6IHBvbGljeS5yZXZpZXdlcl9zdGFydF9kYXRlID8/ICcnLFxyXG4gICAgICBhc3NpZ25lZV9zdGFydF9kYXRlOiBwb2xpY3kuYXNzaWduZWVfc3RhcnRfZGF0ZSxcclxuICAgICAgcG9saWN5X3ZlcnNpb246IHBvbGljeS5hZGRWZXJzaW9uID8gcG9saWN5LnBvbGljeV92ZXJzaW9uIDogJycsXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHBvbGljeS5hZGRMaW5rQXNzZXNzbWVudFxyXG4gICAgICAgID8gcG9saWN5LmFzc2Vzc21lbnQubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogZWxlLmFzc2Vzc21lbnRfaWQsXHJcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOiBlbGUuY2F0ZWdvcnlfaWQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgOiBbXSxcclxuICAgICAgcG9saWN5X293bmVyczogdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMubWFwKFxyXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlLm1lbWJlcl9pZFxyXG4gICAgICApLFxyXG4gICAgICBhcHByb3ZhbF93b3JrZmxvd19pZDogcG9saWN5Py5zZWxlY3RlZEFwcHJvdmVyc1swXT8uX2lkXHJcbiAgICAgICAgPyBbcG9saWN5Py5zZWxlY3RlZEFwcHJvdmVyc1swXT8uX2lkXVxyXG4gICAgICAgIDogW10sXHJcbiAgICAgIGxpbmtQcm9ncmFtOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcclxuICAgICAgICA/IHBvbGljeT8ubGlua1Byb2dyYW1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgIGFkZGVkOiBbXSxcclxuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIGJ1c2luZXNzX2N5Y2xlOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcclxuICAgICAgICA/IHBvbGljeT8uYnVzaW5lc3NDeWNsZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IHBvbGljeS5wb2xpY3lfYWNjZXNzX3R5cGUgPz8gMCxcclxuICAgICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IHBvbGljeS5hdmFpbGFibGVPblBvcnRhbFxyXG4gICAgICAgID8gW11cclxuICAgICAgICA6IHBvbGljeUFjY2Vzc1VzZXJzSWRzID8/IFtdLFxyXG4gICAgICBwb2xpY3lfYWNjZXNzX2dyb3VwczogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsXHJcbiAgICAgICAgPyBbXVxyXG4gICAgICAgIDogcG9saWN5QWNjZXNzR3JvdXBzSWRzID8/IFtdLFxyXG4gICAgICBkaXNwbGF5T25Qb3J0YWw6IHBvbGljeS5pc1BvcnRhbERpc3BsYXlFbmFibGVkID8/IGZhbHNlLFxyXG4gICAgICBsaW5rZWRQb2xpY2llczogWy4uLm5ldyBTZXQocG9saWN5LkxpbmtlZFBvbGljaWVzKV0sXHJcbiAgICAgIHNlbGVjdGVkQWxsQXR0ZXN0b3JzOiBwb2xpY3kuc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPyAxIDogMFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlLnN1Ym1pdFBvbGljeShwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUlkID0gcmVzLl9pZDtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YT8uZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxpbmtEb2N1bWVudFdpdGhQb2xpY3kodGhpcy5jb252ZXJ0RmlsZURhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uVGVtcGxhdGVTZWxlY3QoW3sgX2lkOiB0aGlzLnRlbXBsYXRlSWQgfV0sIHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAgICdhbGVydCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgaWYgKHRoaXMucG9saWN5QXBwcm92YWxGbGFnICE9PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHBheWxvYWQuYXBwcm92ZXJzO1xyXG4gICAgICAgIHBheWxvYWQucG9saWN5QXBwcm92YWxGbGFnID0gMjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UudXBkYXRlUG9saWN5KHBheWxvYWQsIHRoaXMucG9saWN5SWQpLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lJZCA9IHJlcy5faWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZURvY3VtZW50cyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICAgICAgICdUaGUgcG9saWN5IGhhcyBiZWVuIHNlbnQgZm9yIGF0dGVzdGF0aW9uJyxcclxuICAgICAgICAgICAgICAgICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdUaGUgcG9saWN5IGhhcyBiZWVuIHVwZGF0ZWQnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5iYXNlVVJMICsgJy9hbGwvcG9saWN5L3dvcmtyb29tP2lkPScgKyB0aGlzLnBvbGljeUlkO1xyXG4gICAgICAgICAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS93b3Jrcm9vbSddLCB7IHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcclxuICAgICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaW5rRG9jdW1lbnRXaXRoUG9saWN5KGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKFxyXG4gICAgICBkb2N1bWVudC5maWxlTmFtZSAmJlxyXG4gICAgICAoZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ3BkZicgfHxcclxuICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnUERGJyB8fFxyXG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdkb2N4JyB8fFxyXG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdET0NYJylcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2VcclxuICAgICAgICAuZXh0cmFjdEZpbGUoZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiwgZG9jdW1lbnQuZmlsZVBhdGgsIHRoaXMucG9saWN5SWQpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHRoaXMucG9saWN5SWQpIHtcclxuICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgPT09ICdkb25lJyB8fCByZXMuY29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ2RvY3gnIHx8XHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdET0NYJ1xyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuYmFzZVVSTCArIEFQSS5lZGl0UG9saWN5ICsgdGhpcy5wb2xpY3lJZDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdwZGYnIHx8XHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdQREYnXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgdXJsID0gdGhpcy5iYXNlVVJMICsgQVBJLmdvVG9Qb2xpY3lXb3Jrcm9vbSArIHRoaXMucG9saWN5SWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgICAgIFwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5LCBzaGFsbCB3ZT9cIixcclxuICAgICAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICBcIk9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3ZXJlIHVuYWJsZSB0byBjb21wbGV0ZSB0aGlzIGFjdGlvbi4gTGV0J3MgZ2l2ZSBpdCBhbm90aGVyIHRyeSwgc2hhbGwgd2U/XCIsXHJcbiAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbnMgdGhlIGRhdGUgcGlja2VyIG9uIHBvbGljeSBmb3JtXHJcbiAgICovXHJcbiAgb3BlbkRhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgICAvLyB0aGlzLnNldEFjdGl2ZUZpZWxkU2VsZWN0b3IoJ0lTU1VFX0RBVEVfVElNRScsICdJU1NVRV9EQVRFX1RJTUUnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNsb3NlcyB0aGUgZGF0ZSBwaWNrZXIgZnJvbSBwb2xpY3kgZm9ybVxyXG4gICAqL1xyXG4gIGNsb3NlRGF0ZVBpY2tlcihldnQ6IGFueSkge1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghZXZ0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChldnQ/LmRhdGU/LiRkKSB7XHJcbiAgICAgIGxldCBtb250aEFycmF5ID0gW1xyXG4gICAgICAgICdKYW4nLFxyXG4gICAgICAgICdGZWInLFxyXG4gICAgICAgICdNYXInLFxyXG4gICAgICAgICdBcHInLFxyXG4gICAgICAgICdNYXknLFxyXG4gICAgICAgICdKdW4nLFxyXG4gICAgICAgICdKdWwnLFxyXG4gICAgICAgICdBdWcnLFxyXG4gICAgICAgICdTZXAnLFxyXG4gICAgICAgICdPY3QnLFxyXG4gICAgICAgICdOb3YnLFxyXG4gICAgICAgICdEZWMnLFxyXG4gICAgICBdO1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXREYXRlKCk7XHJcbiAgICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aEFycmF5W25ldyBEYXRlKGV2dD8uZGF0ZT8uJGQpLmdldE1vbnRoKCldO1xyXG4gICAgICBjb25zdCB5ZWFyVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZVZhbHVlfSAke21vbnRoVmFsdWV9ICR7eWVhclZhbHVlfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZXZ0Py5kYXRlPy4kZCkge1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSA9IGV2dD8uZGF0ZT8uJGQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8uY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGVkaXRQb2xpY3lGcm9tRG9jdW1lbnRzKCkge1xyXG4gICAgdGhpcy5tb2RlID0gJ0VESVQnO1xyXG4gICAgdGhpcy5zaGlmdFRvRWRpdE1vZGUuZW1pdCgpO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gZmFsc2U7XHJcbiAgICB0aGlzLm5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdFBvbGljeSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tGb3JDcmVhdGVEb2N1bWVudHMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Nob3dDcmVhdGVEb2N1bWVudHMnKTtcclxuICAgIHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBkYXRhID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbikge1xyXG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Nob3dDcmVhdGVEb2N1bWVudHMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRQb2xpY3koKSB7XHJcbiAgICB0aGlzLm1vZGUgPSAnRURJVCc7XHJcblxyXG4gICAgaWYgKHRoaXMucG9saWN5SWQpIHtcclxuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmVkaXRQb2xpY3kodGhpcy5wb2xpY3lJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWRzID0gZGF0YS5jYXRlZ29yeV9kZXRhaWxzX2Fyci5tYXAoXHJcbiAgICAgICAgICAgIChpZDogYW55KSA9PiBpZC5jYXRPYmpJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5QXBwcm92YWxGbGFnID0gZGF0YS5wb2xpY3lBcHByb3ZhbEZsYWc7XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBkYXRhPy5hcHByb3ZhbFdvcmtmbG93RGV0YWlscz8ubWFwKFxyXG4gICAgICAgICAgICAod29ya2Zsb3c6IGFueSkgPT4gd29ya2Zsb3c/Ll9pZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycyA9IGRhdGE/LmFwcHJvdmVycztcclxuICAgICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJXb3JrRmxvdyhjYXRlZ29yeUlkcywgZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLmdldExpbmtlZFBvbGljaWVzKGRhdGE/Ll9pZCk7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9saWN5Rm9ybShkYXRhLCBjYXRlZ29yeUlkcyk7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvbGljeUFjY2Vzc0RldGFpbHMoZGF0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvcHVsYXRlUG9saWN5Rm9ybShkYXRhOiBhbnksIGNhdGVnb3J5SWRzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRGF0YSBGb3IgZWRpdDo6IFwiLCBkYXRhKTtcclxuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSBkYXRhLlJldmlld2VyQXR0YWNobWVudHMubWFwKChmaWxlOiBhbnkpID0+IHtcclxuICAgICAgZmlsZS5maWxlbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgZmlsZS5maWxlcGF0aCA9IGZpbGUuZmlsZV9wYXRoO1xyXG4gICAgICBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZS5vcmdfbmFtZTtcclxuICAgICAgZmlsZS5maWxlX25hbWUgPSBmaWxlLm9yZ19uYW1lO1xyXG4gICAgICBmaWxlLmxpbmtTZXQgPSAnJztcclxuICAgICAgZGVsZXRlIGZpbGUubmFtZTtcclxuICAgICAgZGVsZXRlIGZpbGUuZmlsZV9wYXRoO1xyXG4gICAgICBkZWxldGUgZmlsZS5vcmdfbmFtZTtcclxuXHJcbiAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50cy5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIGVsZS5maWxlbmFtZSA9IGVsZS5uYW1lO1xyXG4gICAgICBlbGUuZmlsZXBhdGggPSBlbGUuZmlsZV9wYXRoO1xyXG4gICAgICBlbGUub3JpZ2luYWxfZmlsZW5hbWUgPSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xyXG4gICAgICBlbGUuZmlsZV9uYW1lID0gZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZTtcclxuICAgICAgZWxlLmxpbmtTZXQgPSBlbGUuaXNMaW5rU2V0O1xyXG4gICAgICBlbGUub3RoZXJzID0gZWxlPy5vdGhlcl90eXBlO1xyXG5cclxuICAgICAgZGVsZXRlIGVsZS5uYW1lO1xyXG4gICAgICBkZWxldGUgZWxlLmZpbGVfcGF0aDtcclxuICAgICAgZGVsZXRlIGVsZS5vcmlnaW5hbF9maWxlX25hbWU7XHJcbiAgICAgIGRlbGV0ZSBlbGUuaXNMaW5rU2V0O1xyXG4gICAgICBkZWxldGUgZWxlPy5vdGhlcl90eXBlO1xyXG4gICAgICByZXR1cm4gZWxlO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBncm91cF9lbXBsb3llZUlkcyA9IGRhdGEuZ3JvdXBfZW1wbG95ZWVOYW1lcy5tYXAoXHJcbiAgICAgIChpZDogYW55KSA9PiBpZD8uZW1wbG95ZWVfaWRcclxuICAgICk7XHJcbiAgICBjb25zdCBncm91cF9JZHMgPSBkYXRhPy51c2VyZ3JvdXBfaWRzPy5tYXAoKGlkOiBhbnkpID0+IGlkKSA/PyBbXTtcclxuXHJcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcclxuICAgICAgY2F0ZWdvcnlJZHMsXHJcbiAgICAgICdfaWQnXHJcbiAgICApO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9pZCA9IGRhdGE/LnBvbGljeV9pZDtcclxuICAgICh0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGRhdGEucG9saWN5X25hbWUpLFxyXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLnBvbGljeU5vdGVzID0gZGF0YS5ub3RlcyksXHJcbiAgICAgICh0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncyA9IGRhdGEuY3VzdG9tX3RhZ3MgPyBkYXRhLmN1c3RvbV90YWdzIDogW10pO1xyXG5cclxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9ICghZGF0YT8uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgfHwgZGF0YT8uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPT0gMCkgJiYgIFxyXG4gICAgICBncm91cF9lbXBsb3llZUlkcy5sZW5ndGggPiAwXHJcbiAgICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCBncm91cF9lbXBsb3llZUlkcywgJ215X21lbWJlcl9pZCcpXHJcbiAgICAgICAgOiBbXTsgLy9kb3VidCBpbiBuYW1lXHJcblxyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZSA9XHJcbiAgICAgIGdyb3VwX0lkcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBncm91cF9JZHMsICdfaWQnKVxyXG4gICAgICAgIDogW107XHJcblxyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gZGF0YS5lbnRpdGllc1xyXG4gICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLnJjTGlzdCwgZGF0YS5lbnRpdGllcy5zcGxpdCgnLCcpLCAnaXRlbV9pZCcpXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSBkYXRhLkNDRmFpbEVtYWlsXHJcbiAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgZGF0YS5DQ0ZhaWxFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJylcclxuICAgICAgOiBbXTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwID1cclxuICAgICAgZGF0YT8uY2NfZmFpbF91c2VyZ3JvdXBfaWRzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgPyB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcclxuICAgICAgICAgIGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkcyxcclxuICAgICAgICAgICdfaWQnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IGRhdGEuQ0NFbWFpbFxyXG4gICAgICA/IHRoaXMuc2V0TGlzdChcclxuICAgICAgICB0aGlzLm92ZXJzZWVyc0xpc3QsXHJcbiAgICAgICAgZGF0YS5DQ0VtYWlsLnNwbGl0KCcsJyksXHJcbiAgICAgICAgJ2VtcGxveWVlX2VtYWlsJ1xyXG4gICAgICApXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NHcm91cEVtYWlsID1cclxuICAgICAgZGF0YT8uY2NfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBkYXRhPy5jY191c2VyZ3JvdXBfaWRzLCAnX2lkJylcclxuICAgICAgICA6IFtdO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsID0gZGF0YS5lbmFibGVQb3J0YWwgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBkYXRhLmVuYWJsZVN1Z2dlc3Rpb24gPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvbiA9IGRhdGEuaXNfc2lnbmF0dXJlX3JlcXVpcmVkXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJpc2tSYXRpbmcgPSBkYXRhLnJpc2tfY2xhc3MgPyBOdW1iZXIoZGF0YS5yaXNrX2NsYXNzKSA6IDE7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cyA9IGRhdGEuYXNzb2NpYXRlZF9kb2N1bWVudHNcclxuICAgICAgPyB7XHJcbiAgICAgICAgZm9ybWF0RmlsZXM6IGF0dGVzdGF0aW9uRmlsZXMsXHJcbiAgICAgIH1cclxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSB9O1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgPSBkYXRhLnN0YXJ0RGF0ZVxyXG4gICAgICA/IG1vbWVudChkYXRhLnN0YXJ0RGF0ZSlcclxuICAgICAgOiBtb21lbnQoKTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscyA9IGRhdGEuY2hlY2twb2ludHNcclxuICAgICAgPyBkYXRhLmNoZWNrcG9pbnRzXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0udG90YWxRdWVzdGlvbiA9IGRhdGEudG90YWxfbWFya3MgPyBkYXRhLnRvdGFsX21hcmtzIDogMDtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBkYXRhLnBhc3NfbWFya3MgPyBkYXRhLnBhc3NfbWFya3MgOiAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzID0gZGF0YS5SZXZpZXdlckF0dGFjaG1lbnRzXHJcbiAgICAgID8ge1xyXG4gICAgICAgIGZvcm1hdEZpbGVzOiByZXZpZXdlckZpbGVzLFxyXG4gICAgICAgIGZvcm1hdExpbmtzOiBkYXRhLlJldmlld2VyTGlua3MsXHJcbiAgICAgIH1cclxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSwgZm9ybWF0TGlua3M6IFtdIH07XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzID1cclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZGF0YS5SZXZpZXdlck1lbWJlcklkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZENoZWNrcG9pbnRzID1cclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID1cclxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID1cclxuICAgICAgZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50cy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5jY0VtYWlsT2JqSWRzID1cclxuICAgICAgZGF0YT8uY2NfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMCA/IGRhdGE/LmNjX3VzZXJncm91cF9pZHMgOiBbXTtcclxuICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPVxyXG4gICAgICBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDBcclxuICAgICAgICA/IGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkc1xyXG4gICAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IGRhdGE/LmFzc2Vzc21lbnQgPz8gW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua0Fzc2Vzc21lbnQgPSBkYXRhPy5hc3Nlc3NtZW50Py5sZW5ndGg7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkVmVyc2lvbiA9IGRhdGE/LnBvbGljeV92ZXJzaW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5jaGVja0ZvckNyZWF0ZURvY3VtZW50cygpO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uID0gZGF0YS5wb2xpY3lfdmVyc2lvbjtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMucHJvZ3JhbSA9XHJcbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcclxuICAgICAgICA/IGRhdGE/LnByb2dyYW1DYXREZXRhaWxzWzBdXHJcbiAgICAgICAgOiB7fTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbSA9XHJcbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcclxuICAgICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YT8ucHJvZ3JhbUNhdERldGFpbHNbMF0pKVxyXG4gICAgICAgIDoge307XHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPSBkYXRhLnNlbGVjdGVkQWxsQXR0ZXN0b3JzID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICBjaGFuZ2VOYW1lKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIGxldCB0ZXh0ID0gZXZlbnQ7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88KC4qPyk+L2dpLCAnJyk7XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIHR5cGVTZWxlY3RlZChldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50O1xyXG4gIH1cclxuICBvblZlcnNpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgcmVnZXhNYXRjaCA9IG5ldyBSZWdFeHAoJ15bQS1aYS16MC05XFxcXC4tXSokJyk7XHJcbiAgICB0aGlzLmlzVmVyc2lvblZhbGlkID0gcmVnZXhNYXRjaC50ZXN0KHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbik7XHJcbiAgICBpZiAoIXRoaXMuaXNWZXJzaW9uVmFsaWQpIHtcclxuICAgICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjApIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25FcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgJ1lvdXIgaW5wdXQgaXMgaW52YWxpZC4gVGhlIHZlcnNpb24gZmllbGQgY2FuIG9ubHkgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLiBUaGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgaXMgMjAgY2hhcmFjdGVycy4nO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmlzVmVyc2lvblZhbGlkICYmXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjBcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZlcnNpb25FcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3VyIGlucHV0IGlzIGludmFsaWQuIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBpcyAyMCBjaGFyYWN0ZXJzLic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3RoaXMgZnVuY3Rpb24gcmVzcG9uc2libGUgd2hlbiB3ZSBjbGljayBvbiBkaXYgc2VsZWN0XHJcbiAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBldmVudDtcclxuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIGxpc3RDYW5jZWxDbGlja2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcclxuICAgICAgLy8gdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtldmVudF07XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBldmVudD8uX2lkID8gW2V2ZW50Py5faWRdIDogW107XHJcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtldmVudF07XHJcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlZFByb2dyYW1EZXRhaWxzKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5saW5rUHJvZ3JhbSA9IGV2ZW50Py5saW5rUHJvZ3JhbTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSBldmVudD8uc2VsZWN0ZWRWYWx1ZXM7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYnVzaW5lc3NDeWNsZSA9IGV2ZW50Py5idXNpbmVzc0N5Y2xlO1xyXG4gICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcclxuICB9XHJcblxyXG4gIG9uQXNzZXNzbWVudFNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IFtldmVudF07XHJcbiAgfVxyXG4gIGdldEFzc2Vzc21lbnREZXRhaWxzKGFzc2Vzc21lbnREZXRhaWxzOiBhbnksIHR5cGU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXHJcbiAgICAgIC5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZClcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeURldGFpbHMgPSByZXNbMF0uY2F0ZWdvcnkuZmluZChcclxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuX2lkID09IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkLFxyXG4gICAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQsXHJcbiAgICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgYXNzZXNzbWVudF9uYW1lOiByZXNbMF0uYXNzZXNzbWVudF9uYW1lLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiByZXNbMF0ucXVlc3Rpb25zQ291bnQsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjYXRlZ29yeV9kZXRhaWxzOiBjYXRlZ29yeURldGFpbHMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRPd25lcnNPbkxvYWQoKSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXHJcbiAgICAgIFt0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCldLFxyXG4gICAgICAnbWVtYmVyX2lkJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFwcHJvdmFsV29ya2Zsb3dBUElDYWxsKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBjb25zdCBvYmplY3RJZHMgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLFxyXG4gICAgICAgICdfaWQnXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ2V0QXBwcm92ZXJXb3JrRmxvdyhvYmplY3RJZHMpO1xyXG4gICAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydEFwcHJvdmFsV29ya2Zsb3coYXBwcm92ZXJMaXN0OiBhbnkpIHtcclxuICAgIGxldCByZXR1cm5Kc29uOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXBwcm92ZXJMaXN0KSk7XHJcbiAgICBtb2RpZmllZERhdGE/LmZvckVhY2goKHdvcmtmbG93OiBhbnkpID0+IHtcclxuICAgICAgd29ya2Zsb3c/LmFwcHJvdmFsX3dvcmtmbG93Py5mb3JFYWNoKChhcHByb3ZlcjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleCArIDE7XHJcbiAgICAgICAgcmV0dXJuSnNvblsnbGV2ZWwnICsgaV0gPSBhcHByb3ZlcjtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5Kc29uO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTGV2ZWwoaW5kZXg6IGFueSkge1xyXG4gICAgLy8gQXBwcm92ZXIgTGV2ZWwgZGVsZXRlXHJcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgaSA9IGluZGV4O1xyXG4gICAgICBpIDwgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdy5sZW5ndGg7XHJcbiAgICAgIGkrK1xyXG4gICAgKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydsZXZlbDEnXSA9PT1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93W2luZGV4XVsnYWxpYXNfbmFtZSddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bXHJcbiAgICAgICAgICAnYWxpYXNfbmFtZSdcclxuICAgICAgICBdID0gYExldmVsICR7aSArIDF9YDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydsZXZlbDEnXSA9IGBMZXZlbCAke2kgKyAxXHJcbiAgICAgICAgfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0V29ya2Zsb3coZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdEFwcHJvdmFsV29ya2Zsb3cgPSBldmVudDtcclxuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vRnVuY3Rpb24gcmVzcG9uc2libGUgd2hlbiB3ZSBjbGljayBvbiBDUkVBVEUgQSBORVcgQVBQUk9WQUwgV09SS0ZMT1dcclxuICBjcmVhdGVBcHByb3ZhbFdvcmtmbG93KCkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNsaWNrZWRDcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgZWRpdExldmVsQ2xpY2tlZChlZGl0TGV2ZWw6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdFdvcmtmbG93TGV2ZWwgPSB7XHJcbiAgICAgIGVkaXRMZXZlbDogZWRpdExldmVsLFxyXG4gICAgICBpbmRleDogaW5kZXgsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHNldEFjY2Vzc0ZpZWxkKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPSBldmVudDtcclxuICAgIGlmIChldmVudCA9PSAwKSB7XHJcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMudXNlcnNBY2Nlc3NMaXN0O1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsIHtcclxuICAgICAgICB1c2VyczogdGhpcy51c2Vyc0FjY2Vzc0xpc3QsXHJcbiAgICAgICAgZ3JvdXBzOiBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRVc2Vyc0FjY2Vzc0xpc3RCeUNhdGVnb3J5KGNhdGVnb3J5RGV0YWlsczogYW55KSB7XHJcbiAgICBsZXQgdW5pcXVlVXNlcnM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHVuaXF1ZUdyb3Vwc0lkOiBhbnkgPSBbXTtcclxuICAgIHVuaXF1ZVVzZXJzID0gdW5pcUJ5KFxyXG4gICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9tYW5hZ2Vycz8uY29uY2F0KFxyXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYWxsX2FwcHJvdmVycyxcclxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9hdXRob3JzXHJcbiAgICAgICksXHJcbiAgICAgICdtZW1iZXJfaWQnXHJcbiAgICApO1xyXG4gICAgdGhpcy51c2Vyc0FjY2Vzc0xpc3QgPSB1bmlxdWVVc2VycztcclxuICAgIHRoaXMudXNlcnNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy51c2Vyc0FjY2Vzc0xpc3QsICdtZW1iZXJfaWQnKTtcclxuXHJcbiAgICB1bmlxdWVHcm91cHNJZCA9IFtcclxuICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmF1dGhvcl91c2VyZ3JvdXBfaWRzPy5jb25jYXQoXHJcbiAgICAgICAgICBjYXRlZ29yeURldGFpbHM/Lm93bmVyX3VzZXJncm91cF9pZHNcclxuICAgICAgICApXHJcbiAgICAgICksXHJcbiAgICBdO1xyXG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0ID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcclxuICAgICAgdW5pcXVlR3JvdXBzSWQsXHJcbiAgICAgICdfaWQnXHJcbiAgICApO1xyXG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXHJcbiAgICAgIHRoaXMuZ3JvdXBzQWNjZXNzTGlzdCxcclxuICAgICAgJ2dyb3VwX2lkJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhwb2xpY3lEZXRhaWxzOiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPSBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX3R5cGU7XHJcbiAgICBpZiAocG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgdGhpcy51c2Vyc0xpc3QsXHJcbiAgICAgICAgcG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc19vd25lcnMsXHJcbiAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcclxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3VwcyxcclxuICAgICAgICAnX2lkJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCkge1xyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPT0gMCkge1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSBbXTtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGcmVxdWVuY3koKSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSAnJztcclxuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9ICcnO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLm1hcmtfZmFpbGVkX2FmdGVyID0gMDtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gJyc7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzaWduZWVfc3RhcnRfZGF0ZSA9ICcnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnBhdHRlcm4gPSAnJztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gJyc7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9ICcnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IDA7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0ZVBpY2tlck9iamVjdCA9IHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICBjbGFzczogJ2VmZmVjdGl2ZS1kYXRlJyxcclxuICAgICAgcG9wdXA6IHRoaXMuZGF0ZVBpY2tlclBvcFVwLFxyXG4gICAgICBjb21wb25lbnQ6IHRoaXMuZGF0ZVBpY2tlcixcclxuICAgICAgb3ZlcmxheTogdGhpcy5kYXRlUGlja2VyT3ZlcmxheSxcclxuICAgIH07XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuaGFuZGxlRG9jdW1lbnRDbGljayhkYXRlUGlja2VyT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIG9uVGVtcGxhdGVTZWxlY3QoZXZlbnQ6IGFueSwgaXNQcmVzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZXZlbnQ/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlVmlldyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UudGVtcGxhdGVWaWV3Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IHVuYW1lID0gdGhpcy51c2VySW5mbyA/IHRoaXMudXNlckluZm8ubmFtZSA6ICcnO1xyXG4gICAgY29uc3QgdWlkID0gdGhpcy5tZW1iZXJfb2JqX2lkO1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lLnRyaW0oKTtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5wb2xpY3lJZDtcclxuICAgIHRoaXMudGVtcGxhdGVJZCA9IGV2ZW50WzBdPy5faWQ7XHJcbiAgICB0aGlzLnBvbGljeVNlcnZpY2VcclxuICAgICAgLnNhdmVQb2xpY3lEZXRhaWxzKHVuYW1lLCB1aWQsIGlkLCBuYW1lLCAnJywgMClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25VcmwoKTtcclxuICAgICAgICBpZiAoaXNQcmVzZWxlY3RlZCkge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVGVtcGxhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0TmF2aWdhdGlvblVybCgpIHtcclxuICAgIGNvbnN0IGJhc1VybCA9XHJcbiAgICAgIHRoaXMuYmFzZVVSTCArXHJcbiAgICAgICcvYWxsL3BvbGljeS9lZGl0LXBvbGljeT9pZD0nICtcclxuICAgICAgdGhpcy5wb2xpY3lJZCArXHJcbiAgICAgICcmdGVtcGxhdGVJZD0nICtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUlkO1xyXG4gICAgdGhpcy50ZW1wbGF0ZVVybCA9IGJhc1VybDtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9UZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodGhpcy50ZW1wbGF0ZVVybCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNQYXN0RGF0ZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscz8uc3BsaXQoJ34nKTtcclxuXHJcbiAgICBpZihmcmVxdWVuY3lbMF0gPT09ICcwJykge1xyXG4gICAgICBjb25zdCBteURhdGUgPSBmcmVxdWVuY3lbMV0gKyAnLScgKyBmcmVxdWVuY3lbMl0gKyAnLScgKyBmcmVxdWVuY3lbM107XHJcbiAgICAgICByZXR1cm4gdGhpcy5kYXRlVXRpbGl0eVNlcnZpY2UuaXNQYXN0RGF0ZShteURhdGUpO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKGV2ZW50PzogYW55KSB7XHJcbiAgICBsZXQgcGFnZTogbnVtYmVyID0gZXZlbnQ/LnBhZ2UgfHwgMSxcclxuICAgIHNlYXJjaEtleTogc3RyaW5nID0gZXZlbnQ/LnNlYXJjaEtleS50b0xvd2VyQ2FzZSgpLnRyaW0oKSB8fCAnJyxcclxuICAgIHBhZ2luYXRpb25UeXBlOiBzdHJpbmcgPSAnbWVkaXVtJztcclxuICAgIFxyXG4gICAgaWYoc2VhcmNoS2V5Lmxlbmd0aCA9PT0gMCAmJnRoaXMuaXNDYWNoZWREYXRhKHBhZ2UudG9TdHJpbmcoKSkpIHtcclxuICAgICAgbGV0IGNhY2hlZERhdGEgPSB0aGlzLnBhZ2luYXRlZFVzZXJzQ2FjaGUuZ2V0KHBhZ2UudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbk9wdGlvbnMoY2FjaGVkRGF0YSwgJycpO1xyXG4gICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucGFnaW5hdGVkVXNlcnNMaXN0Wydsb2FkaW5nJ10gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGVkVXNlcnNMaXN0Wydsb2FkaW5nJ10gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzV2l0aFBhZ2luYXRpb24ocGFnZSwgc2VhcmNoS2V5LCBwYWdpbmF0aW9uVHlwZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3VjY2VzcyAmJiByZXM/LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoc2VhcmNoS2V5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5hdGVkVXNlcnNDYWNoZS5zZXQocGFnZS50b1N0cmluZygpLCByZXM/LmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbk9wdGlvbnMocmVzPy5kYXRhLCBzZWFyY2hLZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRlZFVzZXJzTGlzdCA9IHt9O1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRlZFVzZXJzTGlzdFsnbG9hZGluZyddID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRlZFVzZXJzTGlzdFsnc2VhcmNoS2V5J10gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoUGFnaW5hdGVkVXNlcnNMaXN0KCkge1xyXG4gICAgdGhpcy5wYWdpbmF0ZWRVc2Vyc0xpc3RbJ3NlYXJjaEtleSddID0gJyc7XHJcbiAgICB0aGlzLmdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKHsgcGFnZTogMSwgc2VhcmNoS2V5OiAnJyB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2luYXRpb25PcHRpb25zKGRhdGE6IGFueSwgc2VhcmNoS2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMucGFnaW5hdGVkVXNlcnNMaXN0ID0ge1xyXG4gICAgICB1c2VyczogZGF0YT8udXNlcnMsXHJcbiAgICAgIHRvdGFsX3BhZ2VzOiBkYXRhPy50b3RhbFBhZ2VzLFxyXG4gICAgICB0b3RhbF9pdGVtczogZGF0YT8udG90YWxVc2VycyxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgIGZyb206IGRhdGE/LmRpc3BsYXlGcm9tLFxyXG4gICAgICB0bzogZGF0YT8uZGlzcGxheVRvLFxyXG4gICAgICBzZWFyY2hLZXk6IHNlYXJjaEtleSxcclxuICAgICAgdG90YWw6IGRhdGE/LnRvdGFsVXNlcnNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQWxsQXR0ZXN0b3JzVG9nZ2xlKHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPSBzZWxlY3RlZDtcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAvLyBEZXNlbGVjdCBhbGwgY3VycmVudGx5IHNlbGVjdGVkIGFzc2lnbmVlcyBhbmQgZ3JvdXBzXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9IFtdO1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlID0gW107XHJcbiAgXHJcbiAgICAgIC8vIEtlZXAgdGhlIGRlcml2ZWQgbGlzdHMgaW4gc3luY1xyXG4gICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0ZWRVc2Vyc0xpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ2FjaGVkRGF0YShwYWdlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRlZFVzZXJzQ2FjaGUuaGFzKHBhZ2UudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPHA+d29ya2Zsb3ctcG9saWN5IHdvcmtzITwvcD4gLS0+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dDcmVhdGVEb2N1bWVudHNcIj5cclxuICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctcG9saWN5XCI+XHJcbiAgICA8IS0tIFBvbGljeSBOYW1lIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5wb2xpY3lOYW1lXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy53aGF0XCIgYWx0PVwibmFtZVwiICpuZ0lmPVwiIXBvbGljeUZvcm0/LnBvbGljeU5hbWUgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICduYW1lJ1wiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lOYW1lICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIiBjbGFzcz1cImNoZWNrSWNvblwiXHJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XHJcbiAgICAgICAgICAgIFBvbGljeSBOYW1lIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChrZXlkb3duKT1cImFjdGl2ZVNlbGVjdG9yID0gJ25hbWUnXCIgKGZvY3VzaW4pPVwiYWN0aXZhdGVTZWxlY3RvcignbmFtZScsIHRydWUpXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUgPT0gJycgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICduYW1lJ1wiXHJcbiAgICAgICAgICAgIChmb2N1c291dCk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgZmFsc2UpXCIgW25nTW9kZWxdPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lXCJcclxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gY2hhbmdlTmFtZSgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJOYW1lIHRoaXMgcG9saWN5XCIgLz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lLmxlbmd0aCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57eyBwb2xpY3lGb3JtLnBvbGljeU5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgdHJ1ZSlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgIXBvbGljeUZvcm0ucG9saWN5TmFtZS50cmltKClcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgUGxlYXNlIGVudGVyIGEgbmFtZSBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8dmNvbXBseS1lZGl0b3IgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeU5vdGVzXCIgW2VkaXRvckNvbmZpZ109XCJkZXNjcmlwdGlvblwiPjwvdmNvbXBseS1lZGl0b3I+XHJcbiAgICAgICAgICA8IS0tIDxhcHAtY3Mtc3dpdGNoXHJcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbFwiXHJcbiAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cImF2YWlsYWJpbGl0eU9uUG9ydGFsKCRldmVudClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBEbyB5b3Ugd2FudCB0aGlzIHBvbGljeSB0byBiZSBhdmFpbGFibGUgb24gdGhlIHBvcnRhbD9cclxuICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICdUaGUgcG9saWNpZXMgdGhhdCB5b3UgaW50ZW5kIHRvIG1ha2UgYWNjZXNzaWJsZSB0byB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbiBjYW4gYmUgYWRkZWQgdG8gdGhlIHBvbGljeSBwb3J0YWwuIEl0IGlzIGxpa2UgYSBzaGFyZWQgY2F0YWxvZyBvZiBhbGwgYWN0aXZlICYgdXBkYXRlZCBwb2xpY2llcyB0aGF0IGFueSBsb2dnZWQgaW4gdXNlciBjYW4gcmVhZC9kb3dubG9hZCBmb3IgcmVmZXJlbmNlLidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XHJcbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxyXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWxcIlxyXG4gICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBBY2NlcHQgc3VnZ2VzdGlvbnNcclxuICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcclxuICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCB1c2VycyBjYW4gcHJvdmlkZSBpbXByb3ZlbWVudCBzdWdnZXN0aW9ucyB0byB0aGUgcG9saWNpZXMgdGhhdCBhcmUgbGlzdGVkIG9uIHRoZSBQb2xpY3kgUG9ydGFsLidcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxyXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFBvbGljeSBDYXRlZ29yeSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5JyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDAgfHxcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcclxuICAgICAgICAgIFwiIFtzcmNdPVwiQVNTRVRTLmNhc2VfY2F0ZWdvcnlcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5J1xyXG4gICAgICAgICAgXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UG9saWN5IENhdGVnb3J5IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NhdGVnb3J5JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGEgY2F0ZWdvcnkgZm9yIHRoaXMgcG9saWN5LlwiIHJlYWRvbmx5IC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgIGxldCBjYXRlZ29yeSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDAsIDEpXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JywgY2F0ZWdvcnkpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiY2F0ZWdvcnkuaXRlbV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IGNhdGVnb3J5Lml0ZW1fbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDFcIiB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2F0ZWdvcnkucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDEpLmxlbmd0aCB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCIgW2NsYXNzLm1vcmUtb25lXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoPjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wbHVzXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoPjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5zbGljZSgwLDIpXCI+PGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsY2F0ZWdvcnkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnkuaXRlbV9uYW1lfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDJcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2F0ZWdvcnkucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdjYXRlZ29yeSdcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2F0ZWdvcnknLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNjYXRlZ29yeSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcyB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2F0ZWdvcnknLCBjYXRlZ29yeSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNhdGVnb3J5Lml0ZW1fbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwic3VibWl0dGVkICYmIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB0aGUgY2F0ZWdvcnkgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uY3VzdG9tVGFncz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvbGljeUZvcm0/LmN1c3RvbVRhZ3NcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+e3sgdGFnLnRhZ25hbWUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInRhZy52YWx1ZVwiIHBsYWNlaG9sZGVyPVwie3sgdGFnLnRhZ25hbWUgfX1cIiAvPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBFZmZlY3RpdmUgRGF0ZSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLndoZW5cIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwiZmFsc2VcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5FZmZlY3RpdmUgRGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lLXBpY2tlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIGVmZmVjdGl2ZSBkYXRlIG9mIHRoZSBwb2xpY3kuXCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgfCBkYXRlIDogJ2RkIE1NTSB5eXl5J1wiIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigpXCJcclxuICAgICAgICAgICAgICAgIGlkPVwiZWZmZWN0aXZlLWRhdGVcIiAvPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cclxuICAgICAgICAgICAgICA8ZHAtZGF0ZS1waWNrZXIgI2RhdGVQaWNrZXIgKG9uU2VsZWN0KT1cImRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7IGNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiZGF0ZUNvbmZpZ1wiIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlXCI+XHJcbiAgICAgICAgICAgICAgPC9kcC1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtb3ZlcmxheVwiIChjbGljayk9XCJjbG9zZURhdGVQaWNrZXIoJGV2ZW50KVwiICpuZ0lmPVwiZGF0ZVBpY2tlck92ZXJsYXlcIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFBvbGljeSBPd25lciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdvd25lcnMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdvd25lcnMnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIiFwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiIFtzcmNdPVwiQVNTRVRTLmltX2NyZWF0aW5nXCIgYWx0PVwiXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5QT0xJQ1kgT1dORVIoUyk8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ293bmVycycsIHRydWUpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiIXBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgIFNlbGVjdCBvd25lcnMgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZSgnb3duZXJzJywgcG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXSwgMClcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdPy5tZW1iZXJfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X293bmVycz8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcclxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwicG9saWN5VXNlclBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICArIHt7IHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZhbHNlXCIgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTEgdngtbXItMVwiPlxyXG4gICAgICAgICAgICAgICAgJlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiJ1NhbWFudGhhIEpvbmVzJ1wiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5TYW1hbnRoYSBKb25lczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwicG9saWN5R3JvdXBQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICs0XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3BvbGljeVVzZXJQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG93bmVyIG9mIHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJvd25lcj8ubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKCdvd25lcnMnLCBvd25lciwgaSArIDEpXCIgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG93bmVyPy5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3BvbGljeUdyb3VwUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgWzEsIDEsIDEsIDEsIDEsIDEsIDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cIidIYXJzaHZhcmRoYW4gS2FyaXdhbGEnXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnNodmFyZGhhbiBLYXJpd2FsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ293bmVycycsIHRydWUpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgIXBvbGljeUZvcm0/LnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICBTZWxlY3Qgb3duZXJzIGZvciB0aGlzIHBvbGljeS5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJldmlldyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcicgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcclxuICAgICAgXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiIXBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiIFtzcmNdPVwiQVNTRVRTLnJldmlld2VyXCIgYWx0PVwiXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJFVklFVzwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmV2aWV3U2VsZWN0aW9uIHZ4LXAtMyB2eC1wYi0wXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbWItMVwiPlxyXG4gICAgICAgICAgICAgIERvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZD9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gbmFtZT1cInJldmlldy10eXBlXCIgW2NoZWNrZWRdPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCIgKGNoZWNrZWRFdmVudCk9XCJ0eXBlU2VsZWN0ZWQodHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItM1wiPlxyXG4gICAgICAgICAgICAgICAgWUVTXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxyXG4gICAgICAgICAgICA8YXBwLWNzLXJhZGlvIG5hbWU9XCJyZXZpZXctdHlwZVwiIFtjaGVja2VkXT1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIiAoY2hlY2tlZEV2ZW50KT1cInR5cGVTZWxlY3RlZChmYWxzZSlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTEgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItM1wiPlxyXG4gICAgICAgICAgICAgICAgTk9cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9hcHAtY3MtcmFkaW8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtMlwiPlJFVklFV0VSPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDBcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInICYmXHJcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgICAgICAgICBcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgICAgU2VsZWN0IHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHJldmlld2luZyB0aGlzIHBvbGljeVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxyXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJldmlld2VyIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJldmlld2VyPy5tZW1iZXJfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1wiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0zXCI+UkVWSUVXIEZSRVFVRU5DWTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxyXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cclxuICAgICAgICAgICAgICAgIFdoZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkcyB0byBiZSByZXZpZXdlZD9cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxyXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgICAgICAgICAgXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIiBbYXBwVG9vbHRpcF09XCJyZXZpZXdlckZyZXF1ZW5jeVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIHt7IHJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgICAgICBcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIHJldmlldyBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gTmV3IEFwcHJvdmFsIFdvcmtmbG93IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycycgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycydcclxuICAgICAgICAgIFwiIFtzcmNdPVwiQVNTRVRTLmFwcHJvdmFsXCIgYWx0PVwiaW1cIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJ1xyXG4gICAgICAgICAgXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lBcHByb3ZhbEZsYWcgIT09IDBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5BUFBST1ZBTCA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKTsgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSlcclxuICAgICAgICAgICAgICBcIiBbY2xhc3MuZGlzYWJsZWRdPVwiIXBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImNyZWF0ZU5ld0J0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTBcIj5cclxuICAgICAgICAgICAgICBDUkVBVEUgQSBORVcgQVBQUk9WQUwgV09SS0ZMT1dcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzZWxlY3RlZFdvcmtmbG93Py5sZW5ndGggPT09IDAgfHxcclxuICAgICAgICAgICAgICAhc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZVxyXG4gICAgICAgICAgICBcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KHRydWUpOyBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKVxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XHJcbiAgICAgICAgICAgICAgU2VsZWN0IHRoZSBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBwb2xpY3lcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzZWxlY3RlZFdvcmtmbG93Py5sZW5ndGggPiAwICYmIHNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWVcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1tYi0yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tdC0yIHZ4LW1iLTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZVdvcmtmbG93KClcIiBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdFdvcmtmbG93KHNlbGVjdGVkV29ya2Zsb3dbMF0pXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFdvcmtmbG93Py5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWwgb2Ygc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3c7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWxJbmRleCA9IGluZGV4XHJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tYi0yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZXZlbC1sZWZ0IHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGV2ZWwtbmFtZSB2eC1mcy05IHZ4LWZ3LTUwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1saC0zXCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hbGlhc19uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcHByb3ZhbD8uYWxpYXNfbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LmxldmVsMVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hbGlhc19uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IGFwcHJvdmFsPy5hbGlhc19uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy5sZXZlbDFcclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTkgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbGgtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlID09PSBcIlJPVU5EUk9CSU5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPyBcIlJPVU5ELVJPQklOXCJcclxuICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LnR5cGUgPT09IFwiQU5ZT05FXCJcclxuICAgICAgICAgICAgICAgICAgICAgID8gXCJBTlkgT05FXCJcclxuICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LnR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMiB2eC1tbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxyXG4gICAgICAgICAgICAgICAgICA+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPCAyXHJcbiAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgMSA9PSBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPyBcIkZpbmFsXCIgOiAxIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPiAxICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnXHJcbiAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJhcHByb3ZhbD8uYXBwcm92ZXJzWzBdPy5tZW1iZXJfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFwcHJvdmVyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIndvcmtmbG93UG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICt7eyBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3dvcmtmbG93UG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGFwcHJvdmFsPy5hcHByb3ZlcnMgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmFsSW5kZXggPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cImFwcHJvdmVyPy5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3b3JrZmxvd0xhdmVsIHZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wbC0xIHZ4LXByLTEgdngtbGgtNCB2eC1tci0xIHZ4LXRleHQtY2VudGVyXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWxJbmRleCArIDEgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkZpbmFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbEluZGV4ICsgMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcHJvdmVyPy5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZWRpdExldmVsQ2xpY2tlZChhcHByb3ZhbCxhcHByb3ZhbEluZGV4KVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRlbGV0ZUxldmVsKGFwcHJvdmFsSW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZWxldGVCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LW1sLTQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5YWU7PC9pPiBERUxFVEVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXHJcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZhbF93b3JrZmxvdz8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgIXBvbGljeUFwcHJvdmFsRmxhZyAmJlxyXG4gICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGhcclxuICAgICAgICAgICAgXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIFNlbGVjdCBvciBjcmVhdGUgYW4gYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUG9saWN5IEFjY2VzcyAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJ0cnVlXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwb2xpY3lBY2Nlc3MnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInRydWVcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFxyXG4gICAgICAgICAgXCIgW3NyY109XCJBU1NFVFMubG9ja19zY29wZVwiIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXHJcbiAgICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UE9MSUNZIFBPUlRBTCBBQ0NFU1M8L2xhYmVsPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFxyXG4gICAgICAgICAgICBcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncG9saWN5QWNjZXNzJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XHJcbiAgICAgICAgICAgICAgV2hvIHNob3VsZCBiZSBhYmxlIHRvIHZpZXcgdGhpcyBwb2xpY3k/XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTNcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tdC0yIHZ4LW1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb2xpY3lBY2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzWzBdPy5lbXBsb3llZV9uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzWzBdPy5lbXBsb3llZV9uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwicG9saWN5QWNjZXNzUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FjY2Vzc0dyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImFjY2Vzc0dyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI3BvbGljeUFjY2Vzc1BvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVzZXIgb2YgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwidXNlcj8uZW1wbG95ZWVfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdwb2xpY3lBY2Nlc3MnLCB1c2VyKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5lbXBsb3llZV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2FjY2Vzc0dyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhIG9mIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2FjY2Vzc0dyb3VwJywgZGF0YSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3BvbGljeUFjY2VzcycsIHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidngtbXQtNCB2eC1tYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidwb2xpY3lGb3JtQWNjZXNzVHlwZSdcIiBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDBcIiAoY2hlY2tlZEV2ZW50KT1cInNldEFjY2Vzc0ZpZWxkKDApXCJcclxuICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRXZlcnlvbmUgd2hvIGhhcyBhY2Nlc3MgdG8gdGhpcyBQb2xpY3kgQ2F0ZWdvcnlcclxuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cclxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3BvbGljeUZvcm1BY2Nlc3NUeXBlJ1wiIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiIChjaGVja2VkRXZlbnQpPVwic2V0QWNjZXNzRmllbGQoMSlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1tdC0xXCJcclxuICAgICAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHVzZXJzL2dyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj48L2FwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dFwiPlZpc2libGUgdG8gQWxsIEN1cnJlbnQgJiBGdXR1cmUgVXNlcnM8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0IHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtbXQtMlwiPlxyXG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCB8fFxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCB8fFxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgIFwiIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9uc1wiPkFDQ0VQVCBTVUdHRVNUSU9OU1xyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtZnMtMTIgdngtdHh0LWJsdWUgdngtbWwtMSB2eC1tci0yXCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCB1c2VycyBjYW4gcHJvdmlkZSBpbXByb3ZlbWVudCBzdWdnZXN0aW9ucyB0byB0aGUgcG9saWNpZXMgdGhhdCBhcmUgbGlzdGVkIG9uIHRoZSBQb2xpY3kgUG9ydGFsLidcclxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+PC9hcHAtY3Mtc3dpdGNoPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBBcHByb3ZhbCBXb3JrZmxvdyAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwiZmFsc2VcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1xyXG4gICAgICAgICAgXCIgW3NyY109XCJBU1NFVFMuYXBwcm92YWxcIiBhbHQ9XCJpbVwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnXHJcbiAgICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXAgYXBwcm92YWwtd29ya2Zsb3dcIiBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5QXBwcm92YWxGbGFnICE9PSAwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XHJcbiAgICAgICAgICAgIEFwcHJvdmFsIHdvcmtmbG93IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYWRkTW9yZUxldmVscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1R5cGUgPSAnU0VRVUVOVElBTCdcclxuICAgICAgICAgICAgICBcIiBjbGFzcz1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBBcHByb3ZhbCBXb3JrZmxvd1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgW2NsYXNzLmRpc2FibGVkXT1cImFwcHJvdmVyV29ya0Zsb3dMaXN0Py5sZW5ndGggPT0gMFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoID09IDAgfHxcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycy5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPGNzLXNlbGVjdCBbbmdNb2RlbF09XCJzZWxlY3RlZEFwcHJvdmFsV29ya2Zsb3dcIiAobmdNb2RlbENoYW5nZSk9XCJzZWxlY3RlZFdvcmtmbG93Q2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeSdcIiBuYW1lPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93XCJcclxuICAgICAgICAgICAgICBbc2V0TWF4V2lkdGhdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIDxjcy1vcHRpb24gKm5nRm9yPVwibGV0IGRhdGEgb2YgYXBwcm92ZXJXb3JrRmxvd0xpc3RcIiBbdmFsdWVdPVwiZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YS53b3JrZmxvd19uYW1lIH19XHJcbiAgICAgICAgICAgICAgPC9jcy1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPGNzLW9wdGlvbiBbdmFsdWVdPVwiLTFcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICBhZGRNb3JlTGV2ZWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnXHJcbiAgICAgICAgICAgICAgICBcIj5DcmVhdGUgYSBuZXcgYXBwcm92YWwgd29ya2Zsb3c8L2NzLW9wdGlvbj5cclxuICAgICAgICAgICAgPC9jcy1zZWxlY3Q+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0Zvcj1cImxldCBsZXZlbCBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZVwiPkxldmVsIHt7IGkgKyAxIH19PC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7IGxldmVsLm5hbWUgfX08L3A+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBsZXZlbC5hcHByb3ZlcnMuc2xpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgXCI+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2FwcHJvdmVycycsIGFwcHJvdmVyLCBpKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RlcFwiICpuZ0lmPVwibGV2ZWwubmFtZSA9PSAnU0VRVUVOVElBTCdcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgaiArIDFcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPnt7IGFwcHJvdmVyLm1lbWJlcl9uYW1lIH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJsZXZlbC5hcHByb3ZlcnM/Lmxlbmd0aCA+IDFcIiB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsYWJlbE5hbWUucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAge3sgbGV2ZWwuYXBwcm92ZXJzLnNsaWNlKDEpLmxlbmd0aCB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNsYWJlbE5hbWUgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGxldmVsLmFwcHJvdmVycyB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2FwcHJvdmVycycsIGFwcHJvdmVyLCBpKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXBcIiAqbmdJZj1cImxldmVsLm5hbWUgPT0gJ1NFUVVFTlRJQUwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID09IGxldmVsLmFwcHJvdmVycy5zbGljZSgxKS5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkZpbmFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGogKyAyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHByb3Zlci5tZW1iZXJfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUsIGxldmVsLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFwcHJvdmVyc0xpc3RJbmRleCA9IGlcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwicmVtb3ZlKCd3b3JrZmxvd0xldmVsJywgbGV2ZWwsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXHJcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAhcG9saWN5QXBwcm92YWxGbGFnXHJcbiAgICAgICAgICAgIFwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICBTZWxlY3Qgb3IgY3JlYXRlIGFuIGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeS5cclxuICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCIgKm5nSWY9XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIj48YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnXHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgKyBBZGQgTW9yZSBMZXZlbHNcclxuICAgICAgICAgICAgPC9idXR0b24+PC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFdobyAvIG5vdyBBdHRlc3RhdGlvbiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25lZXMnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgfHxcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXHJcbiAgICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5jYXNlX2Fzc2lnbmVlc1wiIGFsdD1cImltXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcydcclxuICAgICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkF0dGVzdGF0aW9uPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbWItMlwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJiAhZ3JvdXBFbmFibGVkKSB8fFxyXG4gICAgICAgICAgICAgIChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgICAgIGdyb3VwRW5hYmxlZCAmJlxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICBcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWduZWVzJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5Rm9ybS5zZWxlY3RlZEFsbEF0dGVzdG9yc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cclxuICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5zZWxlY3RlZEFsbEF0dGVzdG9ycyA/ICdBbGwgVXNlcnMgU2VsZWN0ZWQnIDogXHJcbiAgICAgICAgICAgICAgICAnU2VsZWN0IHRoZSBwZXJzb25zIHJlc3BvbnNpYmxlIGZvciBhdHRlc3RpbmcgdGhpcyBwb2xpY3kuJ1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8uc2xpY2UoMCwgMSlcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiYXNzaWduZWUuZW1wbG95ZWVfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBhc3NpZ25lZS5lbXBsb3llZV9uYW1lXHJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImFzc2lnbmVlUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8uc2xpY2UoMSkubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3JvdXBFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cEVuYWJsZWQgJiYgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdhc3NpZ25lZXMnLCBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXSlcclxuICAgICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXHJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzWzBdPy5lbXBsb3llZV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzWzBdPy5lbXBsb3llZV9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJVc2VyUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAmXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwQXNzaWduZWVzJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZVswXVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZVswXT8uZ3JvdXBfbmFtZVxyXG4gICAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdPy5ncm91cF9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJncm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcclxuICAgICAgICAgICAgICAoKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiYgIXBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMpICYmXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICAgICAgICAgIWdyb3VwRW5hYmxlZCkgfHxcclxuICAgICAgICAgICAgICAgICgocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmICFwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSAmJlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQpIHx8XHJcbiAgICAgICAgICAgICAgICAoaXNTZW5kRm9yQXR0ZXN0YXRpb24gJiZcclxuICAgICAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT09IDAgJiYgIXBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMpKSlcclxuICAgICAgICAgICAgXCIgaWQ9XCJ3aG92YWxpZGF0ZW1zZ1wiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2ggWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzXCJcclxuICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cIm9uQWxsQXR0ZXN0b3JzVG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICBjbGFzcz1cIndoby10b2dnbGVcIj5TZWxlY3QgYWxsIHVzZXJzIHdpdGhpbiB5b3VyIG9yZ2FuaXphdGlvblxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAnSWYgc2VsZWN0ZWQsIGFsbCB1c2VycyB3aXRoaW4geW91ciBvcmdhbml6YXRpb24gd2lsbCBiZSByZXF1aXJlZCB0byBhdHRlc3QgdGhpcyBwb2xpY3kuJ1xyXG4gICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTFmOzwvaT48L2FwcC1jcy1zd2l0Y2g+XHJcbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaCBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0ucmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvblwiXHJcbiAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmICFwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzXCIgY2xhc3M9XCJ3aG8tdG9nZ2xlXCI+VEhJUyBQT0xJQ1kgUkVRVUlSRVNcclxuICAgICAgICAgIEUtU0lHTkFUVVJFIEZPUiBBVFRFU1RBVElPTlxyXG4gICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgdGhlIHJlYWRlcnMgd2lsbCBiZSByZXF1aXJlZCB0byBhdHRlc3QgdGhpcyBwb2xpY3kgdXNpbmcgdGhlaXIgZWxlY3Ryb25pYyBzaWduYXR1cmUuJ1xyXG4gICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+PC9hcHAtY3Mtc3dpdGNoPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNhc3NpZ25lZVBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcyB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgYXNzaWduZWUpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBhc3NpZ25lZS5lbXBsb3llZV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNVc2VyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2lnbmVlIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2dyb3VwQXNzaWduZWVzJywgZGF0YSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGEuZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuXHJcbiAgICAgICAgICA8IS0tIG92ZXJzZWVyIC0tPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlclBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiBwb2xpY3lGb3JtPy5DQ0VtYWlsIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgb3ZlcnNlZXIpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8uZW1wbG95ZWVfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRW1haWwnLCBkYXRhKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZW5kIC0tPlxyXG5cclxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZmFpbCBzdGFydCAtLT5cclxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJGYWlsUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJzZWVyPy5lbXBsb3llZV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlckZhaWxHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cCB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEZhaWxFbWFpbCcsIGRhdGEpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBmYWlsIGVuZCAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFdoZW4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5JyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5XaGVuPzwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzID09ICcnXCIgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWlucHV0IGZyZXF1ZW5jeS1jdXN0b20taW5wdXRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICB7eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIFNldCBBIGZyZXF1ZW5jeVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIlxyXG4gICAgICAgICAgPiAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQgYnV0dG9uLXNlYyBzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoJ2ZyZXF1ZW5jeScsIHJjKVwiIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJmcmVxdWVuY3lQbGFjZWhvbGRlclwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwhLS0gPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IGZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeSdcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcclxuICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICAgICAgICAgICFncm91cEVuYWJsZWQpIHx8XHJcbiAgICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID4gMCkgJiZcclxuICAgICAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwRW5hYmxlZCkpXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBTZWxlY3QgYW4gYXR0ZXN0YXRpb24gc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgIDxwICpuZ0lmPVwic3VibWl0dGVkICYmIHBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwICYmIGlzUGFzdERhdGVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgU2V0IGEgZnV0dXJlIGRhdGUuXHJcbiAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+RWZmZWN0aXZlIERhdGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lLXBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tlci1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJlYWRvbmx5IHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBkYXRlIGZyb20gd2hpY2ggdGhpcyBwb2xpY3kgZ29lcyBpbnRvIGVmZmVjdC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlICB8IGRhdGU6ICdkZCBNTU0geXl5eSdcIiAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkyZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRwLWRhdGUtcGlja2VyICNkYXRlUGlja2VyIChvblNlbGVjdCk9XCJkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO2Nsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRlQ29uZmlnXCIgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RwLWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCIgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIENoZWNrcG9pbnRzIC8gQXNzZXNzbWVudCBvZiBVbmRlcnN0YW5kaW5nIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiICpuZ0lmPVwidHJ1ZVwiXHJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cclxuICAgICAgICAgICAgQXNzZXNzbWVudCBvZiBVbmRlcnN0YW5kaW5nXHJcbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoPT09MFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJyx0cnVlKVwiPisgQWRkIENoZWNrcG9pbnRzPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMnLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2V0IHVwIGEgcXVlc3Rpb25uYWlyZSB0byBjb25maXJtIHRoZSByZWFkZXLigJlzIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvbGljeS5cIiByZWFkb25seT4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIj5cclxuICAgICAgICAgICAgICBTZXQgdXAgYSBxdWVzdGlvbm5haXJlIHRvIGNvbmZpcm0gdGhlIHJlYWRlcuKAmXM8YnIgLz51bmRlcnN0YW5kaW5nXHJcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7cG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCArIChwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID4gMSA/JyBDaGVja3BvaW50cyc6JyBDaGVja3BvaW50Jyl9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrcG9pbnQtcG9pbnQtdGV4dCBmaXJzdFwiPlRPVEFMIFBPSU5UUzogPHNwYW4gY2xhc3M9XCJub1wiPnt7cG9saWN5Rm9ybT8udG90YWxRdWVzdGlvbn19PC9zcGFuPjxicj48ZW0+RWFjaCBxdWVzdGlvbiBjYXJyaWVzIDEgcG9pbnQ8L2VtPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrcG9pbnQtcG9pbnQtdGV4dFwiPlBPSU5UUyBSRVFVSVJFRCBUTyBBVFRFU1QgOiA8c3BhbiBjbGFzcz1cIm5vXCI+e3twb2xpY3lGb3JtPy5wYXNzaW5nTWFya3N9fTwvc3Bhbj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjaGVja3BvaW50cycsIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzKVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCI+e3tcclxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggK1xyXG4gICAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPiAxXHJcbiAgICAgICAgICAgICAgICA/IFwiIFF1ZXN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICA6IFwiIFF1ZXN0aW9uXCIpXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIDxhcHAtcG9wb3ZlciAjY2hlY2twb2ludFBvcE92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBjaGVja3BvaW50IG9mIHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzIHwgc2xpY2U6IDE7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NoZWNrcG9pbnRzJyxjaGVja3BvaW50LGorMSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBjaGVja3BvaW50Py5xdWVzdGlvbiB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj4gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBSaXNrIENsYXNzaWZpY2F0aW9uIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJzaG93Umlza0NsYXNzaWZpY2F0aW9uICYmIGZhbHNlXCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtLnJpc2tSYXRpbmdcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLnJpc2tzXCIgYWx0PVwiaW1cIiAqbmdJZj1cIiFwb2xpY3lGb3JtPy5yaXNrUmF0aW5nXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5yaXNrUmF0aW5nXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmlzayBDbGFzc2lmaWNhdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb25cIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibG93XCIgKm5nRm9yPVwibGV0IGNsYXNzIG9mIHJpc2tDbGFzc2lmaWNhdGlvblwiIFtuZ0NsYXNzXT1cIltjbGFzcy5jbGFzc11cIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImNsYXNzaWZpY2F0aW9uXCIgW3ZhbHVlXT1cImNsYXNzLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnJpc2tSYXRpbmcgPT09IGNsYXNzLnZhbHVlXCIgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnJpc2tSYXRpbmdcIiAvPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IGNsYXNzLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJlc3BvbnNpYmlsaXR5IENlbnRlciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiAqbmdJZj1cInBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzXCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmMnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8ubGVuZ3RoID09IDAgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcclxuICAgICAgICAgIFwiIFtzcmNdPVwiQVNTRVRTLnJlc3BvbnNpYmlsaXR5X2NlbnRlclwiIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8ubGVuZ3RoID4gMCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjJ1wiIGNsYXNzPVwiY2hlY2tJY29uXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5SZXNwb25zaWJpbGl0eSBDZW50ZXI8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSZXNwb25zaWJpbGl0eSBDZW50ZXIocykgdGhhdCB0aGlzIHBvbGljeSByZWxhdGVzIHRvLlwiIHJlYWRvbmx5IC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/LnNsaWNlKDAsIDEpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ3JjJywgcmMpXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInJjLml0ZW1fbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyByYy5pdGVtX25hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJjUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5zbGljZSgxKS5sZW5ndGggfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JjUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJjIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdyYycsIHJjKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgcmMuaXRlbV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gVmVyc2lvbiAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFZlcnNpb25cIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJiBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuYXNzb2NpYXRlZF9yaXNrc1wiIGFsdD1cIm5hbWVcIiAqbmdJZj1cIiFwb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb25cIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5WRVJTSU9OPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb25cIiAoY2hhbmdlKT1cIm9uVmVyc2lvbigkZXZlbnQpXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNwZWNpZnkgdGhlIHBvbGljeSB2ZXJzaW9uLlwiIC8+XHJcbiAgICAgICAgICA8cCAqbmdJZj1cIiFpc1ZlcnNpb25WYWxpZFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICB7eyB2ZXJzaW9uRXJyb3JNZXNzYWdlIH19XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBSZXZpZXdlciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiAqbmdJZj1cInBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzICYmIGZhbHNlXCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJ1xyXG4gICAgICAgICAgXCIgW3NyY109XCJBU1NFVFMucmV2aWV3ZXJcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInXHJcbiAgICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5SZXZpZXdlciA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciByZXZpZXdpbmcgdGhpcyBwb2xpY3lcIiByZWFkb25seSAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJldmlld2VyIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInJldmlld2VyLm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IHJldmlld2VyLm1lbWJlcl9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xyXG4gICAgICAgICAgICBcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIj5cclxuICAgICAgICAgICAgU2VsZWN0IGEgcmV2aWV3ZXIgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5XaGVuPyA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIiBjbGFzcz1cInNlbGVjdCBidXR0b24tc2VjXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlclwiIHJlYWRvbmx5IC8+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCIgY2xhc3M9XCJzZWxlY3RlZCBidXR0b24tc2VjXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IHJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImVkaXRcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBTZWxlY3QgdGhlIHJldmlldyBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgPGFwcC1mb3JtYXQtYW5kLWV2aWRlbmNlICh1cGRhdGVGaWxlcyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdyZXZpZXdlcl9hdHRhY2htZW50cycsICRldmVudClcIiAjZm9ybWF0RXZpZGVuY2VcclxuICAgICAgICAgICAgW21vZGVdPVwiJ3BvbGljeVJldmlld2VyJ1wiIFtvcmdhbml6YXRpb25faWRdPVwib3JnYW5pemF0aW9uX2lkXCJcclxuICAgICAgICAgICAgW2Zvcm1hdEV2aWRhbmNlRGF0YV09XCJwb2xpY3lGb3JtPy5kb2N1bWVudHNBbmRMaW5rc1wiPlxyXG4gICAgICAgICAgPC9hcHAtZm9ybWF0LWFuZC1ldmlkZW5jZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIE92ZXJzZWVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRPdmVyc2VlcnNcIiBbY2xhc3MuYWN0aXZlXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnXHJcbiAgICAgIFwiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NFbWFpbCcgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NjRmFpbCcgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiXHJcbiAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwIHx8IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPiAwXHJcbiAgICAgICAgXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICAocG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID09IDApIHx8XHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgfHxcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnXHJcbiAgICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5vdmVyc2lnaHRcIiBhbHQ9XCJpbVwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJcclxuICAgICAgICAgICAgKHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCkgJiZcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0VtYWlsJyAmJlxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NjRmFpbCdcclxuICAgICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPk92ZXJzaWdodDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NjRW1haWwnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoaXMgcG9saWN5P1wiIHJlYWRvbmx5IC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNjRW1haWwgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbD8uc2xpY2UoMCwgMSlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIGNjRW1haWwpXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImNjRW1haWwuZW1wbG95ZWVfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBjY0VtYWlsLmVtcGxveWVlX25hbWVcclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxyXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2NFbWFpbFBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRW1haWw/LnNsaWNlKDEpLmxlbmd0aCB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cEVuYWJsZWRcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cEVuYWJsZWQgJiYgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgcG9saWN5Rm9ybT8uQ0NFbWFpbFswXSlcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8uQ0NFbWFpbFswXS5lbXBsb3llZV9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWxbMF0uZW1wbG95ZWVfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2VlclBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICZcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxbMF0pXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXT8uZ3JvdXBfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyR3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID09IDBcclxuICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjY0ZhaWwnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGJlIG5vdGlmaWVkIGlmIHRoZSBwb2xpY3kgaXMgbm90IGF0dGVzdGVkIG9uIHRpbWU/XCIgcmVhZG9ubHkgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNjRmFpbCBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8uc2xpY2UoMCwgMSlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgY2NGYWlsKVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJjY0ZhaWwuZW1wbG95ZWVfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBjY0ZhaWwuZW1wbG95ZWVfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJjY0ZhaWxQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8uc2xpY2UoMSkubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwRW5hYmxlZFwiIGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjRmFpbCcsIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsWzBdKVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2VlckZhaWxQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICZcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmUoJ2NjR3JvdXBGYWlsRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwWzBdKVxyXG4gICAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXT8uZ3JvdXBfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwWzBdPy5ncm91cF9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2VlckZhaWxHcm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2NFbWFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjY0VtYWlsIG9mIHBvbGljeUZvcm0/LkNDRW1haWwgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBjY0VtYWlsKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY2NFbWFpbC5lbXBsb3llZV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNjY0ZhaWxQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2NGYWlsIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBjY0ZhaWwpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjY0ZhaWwuZW1wbG95ZWVfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJlbGF0ZWQgRG9jdW1lbnRzIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXCJcclxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwicG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzLmZvcm1hdEZpbGVzPy5sZW5ndGggPT0gMFwiIFtzcmNdPVwiQVNTRVRTLmZvcm1hdF9ldmlkZW5jZVwiIGFsdD1cImltXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlcz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiY2hlY2tJY29uXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5SRUxBVEVEIERPQ1VNRU5UUzwvbGFiZWw+XHJcbiAgICAgICAgICA8YXBwLWZvcm1hdC1hbmQtZXZpZGVuY2UgKHVwZGF0ZUZpbGVzKT1cInNhdmVTZWxlY3RlZExpc3QoJ2Fzc29jaWF0ZWREb2N1bWVudHMnLCAkZXZlbnQpXCIgW21vZGVdPVwiJ3BvbGljeSdcIlxyXG4gICAgICAgICAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXHJcbiAgICAgICAgICAgIFtmb3JtYXRFdmlkYW5jZURhdGFdPVwicG9saWN5Rm9ybT8uYXNzb2NpYXRlZERvY3VtZW50c1wiPjwvYXBwLWZvcm1hdC1hbmQtZXZpZGVuY2U+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBMaW5rIFByb2dyYW1zICYgUmVzcG9uc2liaWxpdGllcyAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5hZGRMaW5rUHJvZ3JhbVwiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2xpbmtQcm9ncmFtJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnbGlua1Byb2dyYW0nICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlxyXG4gICAgICAgICAgcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxyXG4gICAgICAgIFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiIFtzcmNdPVwiQVNTRVRTLmxpbmtfaXRlbXNcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiIGNsYXNzPVwiY2hlY2tJY29uXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIFBST0dSQU1TICYgUkVTUE9OU0lCSUxJVElFUzwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXBvbGljeUZvcm0/LnByb2dyYW1TZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbGlua1Byb2dyYW0nLCB0cnVlKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgIFNlbGVjdCBQcm9ncmFtcyAmIHJlc3BvbnNpYmlsaXRpZXMgdGhhdCBhcmU8YnIgLz5hc3NvY2lhdGVkIHdpdGhcclxuICAgICAgICAgICAgICB0aGlzIHBvbGljeS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnByb2dyYW1TZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgICA8aSAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZSgnbGlua1Byb2dyYW0nLCBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMpXHJcbiAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcclxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LnByb2dyYW1TZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8ubmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwhLS0gPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwcm9ncmFtUmVzcG9uc2liaWxpdHlQb3BvdmVyLnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICArNFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcHJvZ3JhbVJlc3BvbnNpYmlsaXR5UG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGRhdGEgb2YgWzEsIDEsIDEsIDEsIDEsIDEsIDFdXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlcG9ydGluZyBpbmZvcm1hdGlvbiBzZWN1cml0eSB3ZWFrbmVzc2VzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVwb3J0aW5nIGluZm9ybWF0aW9uIHNlY3VyaXR5IHdlYWtuZXNzZXNcclxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdsaW5rUHJvZ3JhbScsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIExpbmsgQXNzZXNzbWVudCAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50XCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxyXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnaXNBc3Nlc3NtZW50J1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnaXNBc3Nlc3NtZW50JyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hc3Nlc3NtZW50Py5sZW5ndGhcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiIXBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiIFtzcmNdPVwiQVNTRVRTLmFzc2Vzc21lbnRzXCIgYWx0PVwiXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIEFTU0VTU01FTlRTPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5hc3Nlc3NtZW50Py5sZW5ndGggPT09IDBcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cclxuICAgICAgICAgICAgICBTZWxlY3QgYXNzZXNzbWVudHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXM8YnIgLz5wb2xpY3kuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA+IDBcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcclxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lXHJcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcHJvZ3JhbVJlc3BvbnNpYmlsaXR5UG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGFzc2Vzc21lbnQgb2YgcG9saWN5Rm9ybS5hc3Nlc3NtZW50IHwgc2xpY2UgOiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXNzbWVudD8uYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYXNzZXNzbWVudD8uYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBMaW5rIFJlbGF0ZWQgUG9saWNlcyAtLT5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRMaW5rUG9saWNpZXNcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXHJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09IENPTlNUQU5UUy5MSU5LX1BPTElDWVwiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnaXNMaW5rZWRQb2xpY2VzJyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIiFTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGhcIiBbc3JjXT1cIkxJTktTLmxpbmtlZFBvbGljeUltYWdlXCIgYWx0PVwiXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgW3htbG5zXT1cIkxJTktTLmNoZWNrZWRcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIFJFTEFURUQgUE9MSUNJRVM8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aCA9PT0gMFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0xpbmtlZFBvbGljZXMnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgIFNlbGVjdCBwb2xpY2llcyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcG9saWN5IG9mIFNlbGVjdGVkTGlzdE9mUG9saWNpZXMuc2xpY2UoMCwgMSlcIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCBwb2xpY3k/LmNvbnRyYWN0X2lkKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInBvbGljeT8uY29udHJhY3RfbmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBwb2xpY3k/LmNvbnRyYWN0X25hbWVcclxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID4gMVwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyZWxhdGVkUG9saWN5LnBvcG92ZXIoKVwiXHJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAre3sgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uc2xpY2UoMSkubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09IENPTlNUQU5UUy5MSU5LX1BPTElDWVwiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKENPTlNUQU5UUy5MSU5LX1BPTElDWSwgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcmVsYXRlZFBvbGljeSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbGljeSBvZiBTZWxlY3RlZExpc3RPZlBvbGljaWVzIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKENPTlNUQU5UUy5MSU5LX1BPTElDWSwgcG9saWN5Py5jb250cmFjdF9pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBwb2xpY3k/LmNvbnRyYWN0X25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaCBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uaXNQb3J0YWxEaXNwbGF5RW5hYmxlZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lGb3JtPy5MaW5rZWRQb2xpY2llcyA9PSAwXCIgY2xhc3M9XCJ3aG8tdG9nZ2xlXCI+RElTUExBWSBPTiBUSEUgUE9MSUNZIFBPUlRBTFxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiQ09OU1RBTlRTLkxJTktfUE9MSUNZX0hFTFBfVEVYVFwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPjwvYXBwLWNzLXN3aXRjaD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGFwcC1jaGVja2JveC1saXN0IFtjb25maWddPVwiY2F0ZWdvcnlDb25maWdcIiBbdHdvQ29sdW1uXT1cImZhbHNlXCIgW2l0ZW1zTGlzdF09XCJjYXRlZ29yeUxpc3RcIlxyXG4gICAgW3NlbGVjdGVkSXRlbXNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXNcIiBbaWRlbnRpZmllcktleV09XCInX2lkJ1wiIFtkaXNwbGF5S2V5XT1cIidpdGVtX25hbWUnXCJcclxuICAgIFt0b29sdGlwS2V5XT1cIidpdGVtX25hbWUnXCIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NhdGVnb3J5J1wiIChzYXZlTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjYXRlZ29yeScsICRldmVudClcIlxyXG4gICAgKGNsb3NlTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiIFtsb2FkZWRdPVwiIWNhdGVnb3JpZXNMaXN0TG9hZGVkXCI+XHJcbiAgPC9hcHAtY2hlY2tib3gtbGlzdD5cclxuICA8IS0tIDxhcHAtY2hlY2tib3gtbGlzdCBbY29uZmlnXT1cImFwcHJvdmFsV29ya2Zsb3dDb25maWdcIiBbdHdvQ29sdW1uXT1cInRydWVcIlxyXG4gIFtpdGVtc0xpc3RdPVwiXCJcclxuICBbc2VsZWN0ZWRJdGVtc109XCJwb2xpY3lGb3JtLmlzc3VlQ0NVc2Vyc1wiIFtpZGVudGlmaWVyS2V5XT1cIidlbXBsb3llZV9lbWFpbCdcIiBbZGlzcGxheUtleV09XCInZW1wbG95ZWVfbmFtZSdcIiBbdG9vbHRpcEtleV09XCInZW1wbG95ZWVfZW1haWwnXCJcclxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yPT09J0lTU1VFX0NDJ1wiIChzYXZlTGlzdCk9XCJzZWxlY3RvckFjdGlvbigkZXZlbnQsJ0lTU1VFX0NDJylcIlxyXG4gIChjbG9zZUxpc3QpPVwiZmllbGREZXNlbGVjdG9yKCdJU1NVRV9DQycpXCI+XHJcbjwvYXBwLWNoZWNrYm94LWxpc3Q+IC0tPlxyXG5cclxuICA8YXBwLXJlc3BvbnNpYmlsaXR5LWNlbnRlcnMtbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCIgW3Jlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3RdPVwicmNMaXN0XCJcclxuICAgIFtzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkUkNzXCIgW3JjSWRLZXldPVwiJ2l0ZW1faWQnXCJcclxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3JjJywgJGV2ZW50KVwiIChjbG9zZVJjTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiIFtsb2FkZWRdPVwicmNMaXN0TG9hZGVkXCI+XHJcbiAgPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxyXG5cclxuICA8YXBwLWxpbmstcmVsYXRlZC1wb2xpY2llcyAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSBDT05TVEFOVFMuTElOS19QT0xJQ1lcIiBbcG9saWN5SWRdPVwicG9saWN5SWRcIiBbbW9kZV09XCJtb2RlXCJcclxuICAgIFtzZWxlY3RlZFBvbGljaWVzXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIiAoY2xvc2VMaW5rUG9saWN5TGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXHJcbiAgICAoc2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCAkZXZlbnQpXCI+PC9hcHAtbGluay1yZWxhdGVkLXBvbGljaWVzPlxyXG5cclxuICA8YXBwLXVzZXJzLXJhZGlvLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJ1wiIFtpdGVtRW1haWxLZXldPVwiJ21lbWJlcl9lbWFpbCdcIiBbdXNlcnNMaXN0XT1cImFsbFJldmlld2Vyc1wiXHJcbiAgICBbaGVhZGVyVGV4dF09XCInU2VsZWN0IGEgUmV2aWV3ZXInXCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vyc1wiIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxyXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIiAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdyZXZpZXdlcicsICRldmVudClcIlxyXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCI+XHJcbiAgPC9hcHAtdXNlcnMtcmFkaW8tbGlzdD5cclxuXHJcbiAgPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyAmJiAhZ3JvdXBFbmFibGVkXCIgW3VzZXJzTGlzdF09XCJvdmVyc2VlcnNMaXN0XCJcclxuICAgIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCIgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NFbWFpbFwiXHJcbiAgICBbdXNlcklkS2V5XT1cIidlbXBsb3llZV9pZCdcIiBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NFbWFpbCcsICRldmVudClcIlxyXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCI+XHJcbiAgPC9hcHAtb3duZXItbGlzdD5cclxuXHJcbiAgPHVzZXItZ3JvdXAtbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgJiYgZ3JvdXBFbmFibGVkXCIgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCIgW2xvYWRpbmddPVwicGFnaW5hdGVkVXNlcnNMaXN0Py5sb2FkaW5nXCIgW3VzZXJsaXN0XT1cInBhZ2luYXRlZFVzZXJzTGlzdD8udXNlcnNcIiBbdXNlckxpc3RJbmZvXT1cInBhZ2luYXRlZFVzZXJzTGlzdFwiXHJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NFbWFpbFwiIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtLkNDR3JvdXBFbWFpbFwiIFtpc1BhZ2luYXRpb25FbmFibGVkXT1cImlzUGFnaW5hdGlvbkVuYWJsZWRcIlxyXG4gICAgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NFbWFpbCcsICRldmVudClcIiAoY2FuY2VsKT1cImRpc2FibGVTZWxlY3RvcigpXCIgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiIChmZXRjaFVzZXJEYXRhKT1cImdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKCRldmVudClcIj5cclxuICA8L3VzZXItZ3JvdXAtbGlzdD5cclxuXHJcbiAgPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnICYmICFncm91cEVuYWJsZWRcIiBbdXNlcnNMaXN0XT1cIm92ZXJzZWVyc0xpc3RcIlxyXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbFwiXHJcbiAgICBbdXNlcklkS2V5XT1cIidlbXBsb3llZV9pZCdcIiBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NGYWlsJywgJGV2ZW50KVwiXHJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIj5cclxuICA8L2FwcC1vd25lci1saXN0PlxyXG5cclxuICA8dXNlci1ncm91cC1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnICYmIGdyb3VwRW5hYmxlZFwiIFtncm91cEVuYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NGYWlsRW1haWxcIlxyXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uQ0NGYWlsRW1haWxHcm91cFwiIFtsb2FkaW5nXT1cInBhZ2luYXRlZFVzZXJzTGlzdD8ubG9hZGluZ1wiIFt1c2VybGlzdF09XCJwYWdpbmF0ZWRVc2Vyc0xpc3Q/LnVzZXJzXCIgW3VzZXJMaXN0SW5mb109XCJwYWdpbmF0ZWRVc2Vyc0xpc3RcIiBbaXNQYWdpbmF0aW9uRW5hYmxlZF09XCJpc1BhZ2luYXRpb25FbmFibGVkXCIgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NGYWlsJywgJGV2ZW50KVwiXHJcbiAgICAoY2FuY2VsKT1cImRpc2FibGVTZWxlY3RvcigpXCIgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiIChmZXRjaFVzZXJEYXRhKT1cImdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKCRldmVudClcIj5cclxuICA8L3VzZXItZ3JvdXAtbGlzdD5cclxuXHJcbiAgPGFwcC1ncm91cC11c2Vycy1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmICFncm91cEVuYWJsZWRcIiBbdXNlcnNMaXN0XT1cImFzc2lnbmVlc0xpc3RcIlxyXG4gICAgW2dyb3Vwc0xpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlc1wiIFt1c2VySWRLZXldPVwiJ215X21lbWJlcl9pZCdcIlxyXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiPlxyXG4gIDwvYXBwLWdyb3VwLXVzZXJzLWxpc3Q+XHJcblxyXG4gIDx1c2VyLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcycgJiYgZ3JvdXBFbmFibGVkXCIgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgIFtncm91cExpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCIgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiIChjYW5jZWwpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxyXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlXCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlc1wiXHJcbiAgICBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCIgW2xvYWRpbmddPVwicGFnaW5hdGVkVXNlcnNMaXN0Py5sb2FkaW5nXCIgW3VzZXJsaXN0XT1cInBhZ2luYXRlZFVzZXJzTGlzdD8udXNlcnNcIiBbdXNlckxpc3RJbmZvXT1cInBhZ2luYXRlZFVzZXJzTGlzdFwiIFtpc1BhZ2luYXRpb25FbmFibGVkXT1cImlzUGFnaW5hdGlvbkVuYWJsZWRcIiAoZmV0Y2hVc2VyRGF0YSk9XCJnZXRVc2Vyc0xpc3RXaXRoUGFnaW5hdGlvbigkZXZlbnQpXCI+XHJcbiAgPC91c2VyLWdyb3VwLWxpc3Q+XHJcblxyXG4gIDxhcHAtb3duZXItbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJyAmJiBmYWxzZVwiIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IEFwcHJvdmVycydcIlxyXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCIgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIiBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxyXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwiXHJcbiAgICAgIGFkZE1vcmVMZXZlbHNcclxuICAgICAgICA/IFtdXHJcbiAgICAgICAgOiBwb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW2FwcHJvdmVyc0xpc3RJbmRleF0uYXBwcm92ZXJzXHJcbiAgICBcIiBbdXNlcklkS2V5XT1cIidtZW1iZXJfaWQnXCIgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCJcclxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIiAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIiBbbW9kZV09XCJtb2RlXCJcclxuICAgIFtyZXZpZXdlcldvcmtmbG93VHlwZV09XCJ3b3JrZmxvd1R5cGVcIiAocmV2aWV3ZXJXb3JrZmxvd1R5cGVDaGFuZ2UpPVwicmV2aWV3ZXJUeXBlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW3dvcmtmbG93TGlzdF09XCJ3b3JrZmxvd0xpc3RcIiBbd29ya2Zsb3dUZXh0XT1cIidBcHByb3ZhbCBXb3JrZmxvdydcIj5cclxuICA8L2FwcC1vd25lci1saXN0PlxyXG5cclxuICA8YXBwLWZyZXF1ZW5jeS1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIiBbbW9kZV09XCIncG9saWN5J1wiXHJcbiAgICBbZnJlcXVlbmN5RGV0YWlsc109XCJmcmVxdWVuY3lEZXRhaWxzXCIgKHNlbGVjdGVkRnJlcXVlbmN5KT1cImZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiIFtmZWF0dXJlXT1cImZlYXR1cmVcIlxyXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCIgKGNsb3NlRnJlcXVlbmN5KT1cImRpc2FibGVTZWxlY3RvcigpXCI+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cclxuXHJcbiAgPGFwcC1mcmVxdWVuY3ktY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIiBbbW9kZV09XCIncmV2aWV3ZXJGcmVxdWVuY3knXCJcclxuICAgIFtmcmVxdWVuY3lEZXRhaWxzXT1cInJldmlld2VyRnJlcXVlbmN5RGV0YWlsc1wiIChzZWxlY3RlZEZyZXF1ZW5jeSk9XCJyZXZpZXdlckZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXHJcbiAgICBbZmVhdHVyZV09XCJmZWF0dXJlXCIgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCIgKGNsb3NlRnJlcXVlbmN5KT1cImRpc2FibGVTZWxlY3RvcigpXCI+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cclxuXHJcbiAgPHZjLWxpbmstcHJvZ3JhbSAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnbGlua1Byb2dyYW0nXCIgKGNsb3NlKT1cImRpc2FibGVTZWxlY3RvcigpXCIgW3BvbGljeV09XCJwb2xpY3lGb3JtXCJcclxuICAgIFtzZWxlY3RlZFByb2dyYW1dPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzXCIgW21vZGVdPVwibW9kZVwiIFtzZWxlY3RlZExpbmtQcm9ncmFtXT1cInNlbGVjdGVkTGlua1Byb2dyYW1cIlxyXG4gICAgKGNoYW5nZVRhYik9XCJjaGFuZ2VUYWIoJ2xpbmtlZFByb2dyYW1zJylcIiAodXBkYXRlZFByb2dyYW1EZXRhaWxzKT1cInVwZGF0ZWRQcm9ncmFtRGV0YWlscygkZXZlbnQpXCI+XHJcbiAgPC92Yy1saW5rLXByb2dyYW0+XHJcblxyXG4gIDxhcHAtY2hlY2twb2ludHMtcG9saWN5LWNvbnRhaW5lciAoY2xvc2VDaGVja1BvaW50KT1cImRpc2FibGVTZWxlY3RvcigpXCJcclxuICAgIFtjaGVja3BvaW50RGF0YV09XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlsc1wiIFtyZXF1aXJlZFBvaW50XT1cInBvbGljeUZvcm0/LnBhc3NpbmdNYXJrc1wiXHJcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXCJcclxuICAgIChzYXZlQ2hlY2tQb2ludCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjaGVja3BvaW50cycsICRldmVudClcIj48L2FwcC1jaGVja3BvaW50cy1wb2xpY3ktY29udGFpbmVyPlxyXG4gIDxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcblxyXG4gIDxhcHAtYXBwcm92YWwtd29ya2Zsb3cgKm5nSWY9XCJlbmFibGVBcHByb3ZhbFdvcmtmbG93XCIgW3NlbGVjdGVkQ2F0ZWdvcnldPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzXCJcclxuICAgIFthcHByb3ZlcldvcmtGbG93TGlzdF09XCJhcHByb3ZlcldvcmtGbG93TGlzdFwiIFthbGxBcHByb3ZlcnNdPVwiYWxsQXBwcm92ZXJzXCJcclxuICAgIChsaXN0Q2FuY2VsQ2xpY2tlZCk9XCJsaXN0Q2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCIgKHNlbGVjdGVkV29ya2Zsb3dOZXh0KT1cInNlbGVjdGVkQXBwcm92YWxXb3JrZmxvdygkZXZlbnQpXCJcclxuICAgIChzYXZlQXBwcm92YWxXb3JrZmxvdyk9XCJhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbCgkZXZlbnQpXCIgW2VkaXRBcHByb3ZhbFdvcmtmbG93XT1cImVkaXRBcHByb3ZhbFdvcmtmbG93XCJcclxuICAgIFtjcmVhdGVBcHByb3ZhbENsaWNrXT1cImNyZWF0ZUFwcHJvdmFsQ2xpY2tcIiAoY2xvc2VDcmVhdGVDbGlja2VkKT1cImNsb3NlQ2xpY2tlZENyZWF0ZUZvcm0oKVwiXHJcbiAgICBbZWRpdFdvcmtmbG93TGV2ZWxdPVwiZWRpdFdvcmtmbG93TGV2ZWxcIj48L2FwcC1hcHByb3ZhbC13b3JrZmxvdz5cclxuICA8IS0tIDxhcHAtc2VsZWN0LWFwcHJvdmVycz48L2FwcC1zZWxlY3QtYXBwcm92ZXJzPiAtLT5cclxuXHJcbiAgPGFwcC1wb2xpY3ktYWNjZXNzICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCIgW3BvbGljeUFjY2Vzc1R5cGVdPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlXCJcclxuICAgIChjbG9zZSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiIFtvcmdVc2Vyc0xpc3RdPVwicGFnaW5hdGVkVXNlcnNMaXN0Py51c2Vyc1wiIFt1c2Vyc0FjY2Vzc0xpc3RdPVwidXNlcnNBY2Nlc3NMaXN0XCJcclxuICAgIFtncm91cExpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCIgW2dyb3Vwc0FjY2Vzc0xpc3RdPVwiZ3JvdXBzQWNjZXNzTGlzdFwiXHJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVyc1wiIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1wiXHJcbiAgICBbZGlzYWJsZWRJZHNdPVwidXNlcnNBY2Nlc3NMaXN0SWRzXCIgW2Rpc2FibGVkR3JvdXBJZHNdPVwiZ3JvdXBzQWNjZXNzTGlzdElkc1wiXHJcbiAgICBbZnV0dXJlVXNlcnNXaWxsU2VsZWN0XT1cInBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCIgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsICRldmVudClcIlxyXG4gICAgKHNldFBvbGljeUFjY2Vzc1R5cGUpPVwicG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPSAkZXZlbnRcIiBbbG9hZGluZ109XCJwYWdpbmF0ZWRVc2Vyc0xpc3Q/LmxvYWRpbmdcIiBbdXNlckxpc3RJbmZvXT1cInBhZ2luYXRlZFVzZXJzTGlzdFwiIFtpc1BhZ2luYXRpb25FbmFibGVkXT1cImlzUGFnaW5hdGlvbkVuYWJsZWRcIiAoZmV0Y2hVc2VyRGF0YSk9XCJnZXRVc2Vyc0xpc3RXaXRoUGFnaW5hdGlvbigkZXZlbnQpXCIgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiPlxyXG4gIDwvYXBwLXBvbGljeS1hY2Nlc3M+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiPlxyXG4gIDwhLS0gPGFwcC1jcmVhdGUtZG9jdW1lbnRzICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiXHJcbiAgIFtvcmdhbml6YXRpb25faWRdPVwib3JnYW5pemF0aW9uX2lkXCJcclxuICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXHJcbiAgIFt1c2VySW5mb109XCJ1c2VySW5mb1wiXHJcbiAgIFtwb2xpY3lJZF09XCJwb2xpY3lJZFwiXHJcbiAgIFtwb2xpY3lOYW1lXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXHJcbiAgIChkaXNjb25uZWN0UmVmcmVzaCk9XCJkaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKVwiXHJcbiAgIChlZGl0UG9saWN5KT1cImVkaXRQb2xpY3lGcm9tRG9jdW1lbnRzKClcIlxyXG4gICA+PC9hcHAtY3JlYXRlLWRvY3VtZW50cz4gLS0+XHJcbiAgPGxpYi1kb2N1bWVudC1zZWN0aW9uICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiIFt0ZW1wbGF0ZVZpZXddPVwidGVtcGxhdGVWaWV3XCIgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxyXG4gICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiIFt1c2VySW5mb109XCJ1c2VySW5mb1wiIFtwb2xpY3lJZF09XCJwb2xpY3lJZFwiIFtmZWF0dXJlXT1cImZlYXR1cmVcIlxyXG4gICAgW3RlbXBsYXRlVXJsXT1cInRlbXBsYXRlVXJsXCIgW3BvbGljeU5hbWVdPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lXCIgKGRpc2Nvbm5lY3RSZWZyZXNoKT1cImRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpXCJcclxuICAgIChlZGl0UG9saWN5KT1cImVkaXRQb2xpY3lGcm9tRG9jdW1lbnRzKClcIiAob3BlblRlbXBsYXRlKT1cInRlbXBsYXRlVmlldyA9IHRydWVcIj48L2xpYi1kb2N1bWVudC1zZWN0aW9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuXHJcbjxhcHAtYXNzZXNzbWVudC1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdpc0Fzc2Vzc21lbnQnXCIgW3Byb2dyYW1faWRzXT1cIicnXCJcclxuICBbaXNFZGl0XT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiIChjYW5jZWxBc3Nlc3NtZW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVwiXHJcbiAgW3NlbGVjdGVkQXNzZXNzbWVudF09XCJwb2xpY3lGb3JtPy5hc3Nlc3NtZW50WzBdXCIgW21vZGVdPVwiJ3BvbGljeSdcIiAob25Bc3Nlc3NtZW50U2VsZWN0KT1cIlxyXG4gICAgb25Bc3Nlc3NtZW50U2VsZWN0KCRldmVudCk7IHNhdmVTZWxlY3RlZExpc3QoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVxyXG4gIFwiPjwvYXBwLWFzc2Vzc21lbnQtbGlzdD5cclxuXHJcbjxhcHAtb3duZXItbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJyAmJiBmYWxzZVwiIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IEFwcHJvdmVycydcIlxyXG4gIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCIgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCIgW3Nob3dXb3JrZmxvd109XCJ0cnVlXCJcclxuICBbc2VsZWN0ZWRVc2Vyc109XCJcclxuICAgIGFkZE1vcmVMZXZlbHNcclxuICAgICAgPyBbXVxyXG4gICAgICA6IHBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbYXBwcm92ZXJzTGlzdEluZGV4XS5hcHByb3ZlcnNcclxuICBcIiBbdXNlcklkS2V5XT1cIidtZW1iZXJfaWQnXCIgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCJcclxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhcHByb3ZlcnMnLCAkZXZlbnQpXCIgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCIgW21vZGVdPVwibW9kZVwiXHJcbiAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiIChyZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSk9XCJyZXZpZXdlclR5cGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgW3dvcmtmbG93TGlzdF09XCJ3b3JrZmxvd0xpc3RcIiBbd29ya2Zsb3dUZXh0XT1cIidBcHByb3ZhbCBXb3JrZmxvdydcIj5cclxuPC9hcHAtb3duZXItbGlzdD5cclxuXHJcbjxhcHAtb3duZXItbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IE93bmVyKHMpJ1wiIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcclxuICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCIgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIiBbc2hvd1dvcmtmbG93XT1cImZhbHNlXCIgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXHJcbiAgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3duZXJzJywgJGV2ZW50KVwiXHJcbiAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCIgW21vZGVdPVwibW9kZVwiIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgPz8gW11cIj5cclxuPC9hcHAtb3duZXItbGlzdD5cclxuXHJcbjxhcHAtc2VsZWN0LXRlbXBsYXRlLWxpc3QgKm5nSWY9XCJ0ZW1wbGF0ZVZpZXdcIiBbc2VsZWN0ZWRDYXRlZ29yeUlkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllc1wiIFtmZWF0dXJlXT1cImZlYXR1cmVcIlxyXG4gIChvblRlbXBsYXRlU2VsZWN0KT1cIm9uVGVtcGxhdGVTZWxlY3QoJGV2ZW50KVwiPjwvYXBwLXNlbGVjdC10ZW1wbGF0ZS1saXN0PiJdfQ==
|
|
2232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXBvbGljeS93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcG9saWN5L3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBVzNDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUtuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdqRCxtR0FBbUc7QUFDbkcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8zRSxNQUFNLE9BQU8sdUJBQXVCO0lBK0tsQyxZQUNVLGFBQTRCLEVBQzVCLFFBQXlCLEVBQ3pCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLHFCQUE0QyxF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QUcsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1lBRTNDLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDbEM7SUFDSCxDQUFDOytHQXpqRlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsd3pCQW1CRCxVQUFVLDZCQ2xFN0Msa3htSEE2aUUyRTs7NEZEOS9EOUQsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjt3bkJBUXJCLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0UsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDa0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNiLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0UsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRXVCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUUzQixlQUFlO3NCQURkLFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQW00RTVELGFBQWE7c0JBRFosWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwLCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnbmcyLWRhdGUtcGlja2VyJztcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25BbGVydCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29uZmlybWF0aW9uLWFsZXJ0JztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFBvbGljeUZvcm0gfSBmcm9tICcuLi93b3JrZmxvdy1pbnRlcmZhY2VzL2NyZWF0ZS1wb2xpY3ktZm9ybSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9saWN5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3BvbGljeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IFVpS2l0U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3VpLWtpdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxhdGZvcm1Mb2NhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9mcmVxdWVuY3kvZnJlcXVlbmN5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtYXRBbmRFdmlkZW5jZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZm9ybWF0LWFuZC1ldmlkZW5jZS9mb3JtYXQtYW5kLWV2aWRlbmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlc3RBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkQ29tcG9uZW50cy9saW5rLXByb2dyYW0vcmVzdGFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgREVGQVVMVF8yNEhSLCBERUZBVUxUX1RJTUUgfSBmcm9tICcuLi9jb25zdGFudHMvdGltZS5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25Vc2VyU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL29yZ2FuaXphdGlvbi11c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcmdhbml6YXRpb25Db21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvY29tbW9uLXdvcmtmbG93LXNlcnZpY2VzL29yZ2FuaXphdGlvbi1jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBsaWFuY2VDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvY29tbW9uLXdvcmtmbG93LXNlcnZpY2VzL2NvbXBsaWFuY2UtY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDT05TVEFOVFMgfSBmcm9tICcuLi9saW5rLXJlbGF0ZWQtcG9saWNpZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHsgTElOS1MgfSBmcm9tICcuLi93b3JrZmxvdy9zaGFyZWQvY29uc3RhbnRzL2Nkbi1saW5rLmNvbnN0YW50JztcclxuaW1wb3J0IHsgSWZyYW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2lmcmFtZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVNTRVRTIH0gZnJvbSAnLi4vY29uc3RhbnRzL2Fzc2V0cy5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBBUEkgfSBmcm9tICcuLi9jb25zdGFudHMvYXBpLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IERhdGVVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uL3JlcG9ydC1hLWNhc2Uvc2VydmljZXMvZGF0ZS11dGlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XHJcbi8vIGltcG9ydCB7IENvbmZpcm1hdGlvbkFsZXJ0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLWFsZXJ0L2NvbmZpcm1hdGlvbi1hbGVydC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZWxlY3RBbGxBbGVydENvbXBvbmVudCB9IGZyb20gJy4uL3NlbGVjdEFsbC9zZWxlY3RBbGwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXBvbGljeScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5sZXNzJywgJy4uL2Zvcm1zLmxlc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFdvcmtmbG93UG9saWN5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBBU1NFVFMgPSBBU1NFVFM7XHJcbiAgQ09OU1RBTlRTOiBhbnkgPSBDT05TVEFOVFM7XHJcbiAgTElOS1M6IGFueSA9IExJTktTO1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcclxuICBASW5wdXQoKSBwb2xpY3lJZCA9ICcnO1xyXG4gIEBJbnB1dCgpIGZlYXR1cmU6IGFueTtcclxuICBAT3V0cHV0KCkgc2hvd0NvbmZpcm1hdGlvbkFsZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInKSBkYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzaGlmdFRvRWRpdE1vZGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgY29udmVydEZpbGVEYXRhOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3J5ID0gJyc7XHJcbiAgQElucHV0KCkgaXNTZW5kRm9yQXR0ZXN0YXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0ZW1wbGF0ZUlkOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnZm9ybWF0RXZpZGVuY2UnKSBmb3JtYXRFdmlkZW5jZSE6IEZvcm1hdEFuZEV2aWRlbmNlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcclxuICBkYXRlUGlja2VyUG9wVXAhOiBFbGVtZW50UmVmO1xyXG5cclxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGNvbG9yUGFsZXR0ZTogdHJ1ZSxcclxuICAgIGxpbms6IHRydWUsXHJcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBhIGRlc2NyaXB0aW9uIGZvciB0aGlzIHBvbGljeS4nLFxyXG4gIH07XHJcbiAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnO1xyXG4gIHNjcm9sbFRvQm90dG9tID0gZmFsc2U7XHJcbiAgbmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICByY0xpc3Q6IGFueSA9IFtdO1xyXG4gIHVzZXJzTGlzdDogYW55ID0gW107XHJcbiAgYWxsQXBwcm92ZXJzOiBhbnkgPSBbXTtcclxuICBhbGxSZXZpZXdlcnM6IGFueSA9IFtdO1xyXG4gIGFzc2lnbmVlc0xpc3Q6IGFueSA9IFtdO1xyXG4gIG93bmVybGlzdDogYW55ID0gW107XHJcbiAgcmV2aWV3ZXJzTGlzdDogYW55ID0gW107XHJcbiAgb3ZlcnNlZXJzTGlzdDogYW55ID0gW107XHJcbiAgcmNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgdXNlcnNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnlMaXN0OiBhbnkgPSBbXTtcclxuICBncm91cHNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHdvcmtGbG93TGlzdDogYW55W10gPSBbXTtcclxuICBhcHByb3ZlcldvcmtGbG93TGlzdDogYW55W10gPSBbXTtcclxuICBzdWJtaXR0ZWQgPSBmYWxzZTtcclxuICBjY0VtYWlsT2JqSWRzOiBhbnlbXSA9IFtdO1xyXG4gIGNjRmFpbEdyb3VwT2JqSWRzOiBhbnlbXSA9IFtdO1xyXG4gIHVzZXJzQWNjZXNzTGlzdDogYW55W10gPSBbXTtcclxuICB1c2Vyc0FjY2Vzc0xpc3RJZHM6IGFueVtdID0gW107XHJcbiAgZ3JvdXBzQWNjZXNzTGlzdElkczogYW55W10gPSBbXTtcclxuICBncm91cHNBY2Nlc3NMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFNlbGVjdGVkTGlzdE9mUG9saWNpZXM6IGFueVtdID0gW107XHJcbiAgcGFnaW5hdGVkVXNlcnNMaXN0OiBhbnkgPSB7fTtcclxuICBpc1BhZ2luYXRpb25FbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcGFnaW5hdGVkVXNlcnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBncm91cHNMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgY2F0ZWdvcnlDb25maWcgPSB7XHJcbiAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IFBvbGljeSBDYXRlZ29yeScsXHJcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1BvbGljeSBDYXRlZ29yeSBTZWxlY3RlZCcsXHJcbiAgICBmbG9hdGluZ1RleHRQbHVyYWw6ICdQb2xpY3kgQ2F0ZWdvcmllcyBTZWxlY3RlZCcsXHJcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBQb2xpY3kgQ2F0ZWdvcnknLFxyXG4gICAgc2VhcmNoRW5hYmxlZDogdHJ1ZSxcclxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXHJcbiAgICB3b3JrZmxvdzogJ3BvbGljeScsXHJcbiAgICBub0RhdGFUZXh0OiAnJ1xyXG4gIH07XHJcbiAgYXBwcm92YWxXb3JrZmxvd0NvbmZpZyA9IHtcclxuICAgIHBhbmVsVGl0bGU6ICdTZWxlY3QgdXNlcihzKScsXHJcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1VzZXIgc2VsZWN0ZWQnLFxyXG4gICAgZmxvYXRpbmdUZXh0UGx1cmFsOiAnVXNlcnMgc2VsZWN0ZWQnLFxyXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdTZWFyY2ggVXNlcicsXHJcbiAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxyXG4gICAgc2VsZWN0QWxsRW5hYmxlZDogdHJ1ZSxcclxuICB9O1xyXG5cclxuICBhZGRNb3JlTGV2ZWxzID0gZmFsc2U7XHJcbiAgYXBwcm92ZXJzTGlzdEluZGV4ID0gMDtcclxuICB3b3JrZmxvd0xpc3QgPSBbJ1NFUVVFTlRJQUwnLCAnUk9VTkQtUk9CSU4nLCAnQU5ZIE9ORSddO1xyXG4gIGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgZGF0ZUNvbmZpZyA9IHtcclxuICAgIGRpc2FibGVLZXlwcmVzczogdHJ1ZSxcclxuICAgIGZvcm1hdDogJ0REIE1NIFlZWVknLFxyXG4gICAgdW5TZWxlY3RPbkNsaWNrOiB0cnVlLFxyXG4gICAgb3Blbk9uQ2xpY2s6IGZhbHNlLFxyXG4gICAgb3Blbk9uRm9jdXM6IGZhbHNlLFxyXG4gIH07XHJcbiAgZnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgIHBhdHRlcm46ICcnLFxyXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcclxuICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXHJcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcclxuICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXHJcbiAgICB3aW5kb3c6IDAsXHJcbiAgICBmYWlsZWQ6IDAsXHJcbiAgICB0aW1lOiBERUZBVUxUX1RJTUUsXHJcbiAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXHJcbiAgfTtcclxuICByZXZpZXdlckZyZXF1ZW5jeURldGFpbHMgPSB7XHJcbiAgICBwYXR0ZXJuOiAnJyxcclxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXHJcbiAgICBkYXRlT2ZNb2RpZmllZDogMCxcclxuICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxyXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXHJcbiAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcclxuICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgd2luZG93OiAwLFxyXG4gICAgZmFpbGVkOiAwLFxyXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxyXG4gICAgZmFpbGVkVGltZTogJycsXHJcbiAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAzLFxyXG4gIH07XHJcbiAgZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnV2hhdCBpcyB0aGUgYXR0ZXN0YXRpb24gc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5Pyc7XHJcbiAgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdXaGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZD8nO1xyXG5cclxuICBzaWRlU2VsZWN0b3JFbGVtZW50cyA9IFtcclxuICAgICdhcHByb3ZhbFdvcmtmbG93JyxcclxuICAgICdhc3NpZ25lZXMnLFxyXG4gICAgJ2FwcHJvdmVycycsXHJcbiAgICAncmV2aWV3ZXInLFxyXG4gICAgJ2NjRW1haWwnLFxyXG4gICAgJ2NjRmFpbCcsXHJcbiAgICAncmMnLFxyXG4gICAgJ2NhdGVnb3J5JyxcclxuICAgICdmcmVxdWVuY3knLFxyXG4gICAgJ3Jldmlld2VyRnJlcXVlbmN5JyxcclxuICAgICdjaGVja3BvaW50cycsXHJcbiAgICAnbGlua1Byb2dyYW0nLFxyXG4gICAgJ2lzQXNzZXNzbWVudCcsXHJcbiAgICAnaXNMaW5rZWRQb2xpY2VzJyxcclxuICAgICdvd25lcnMnLFxyXG4gICAgJ3BvbGljeUFjY2VzcycsXHJcbiAgXTtcclxuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXHJcbiAgICB7IG5hbWU6ICdMT1cnLCB2YWx1ZTogMSwgY2xhc3M6ICdsb3cnIH0sXHJcbiAgICB7IG5hbWU6ICdMT1ctTWVkaXVtJywgdmFsdWU6IDIsIGNsYXNzOiAnbG93LW1lZCcgfSxcclxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXHJcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6IDQsIGNsYXNzOiAnaGlnaCcgfSxcclxuICBdO1xyXG4gIHNob3dSaXNrQ2xhc3NpZmljYXRpb24gPSB0cnVlO1xyXG4gIHNob3dDcmVhdGVEb2N1bWVudHMgPSBmYWxzZTtcclxuICBvcmdhbml6YXRpb25faWQgPSAnJztcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgbWVtYmVySWQgPSAwO1xyXG4gIHVzZXJJbmZvITogYW55O1xyXG5cclxuICBwb2xpY3lBcHByb3ZhbEZsYWcgPSAwO1xyXG4gIGJhc2VVUkwgPSAnJztcclxuICBncm91cEVuYWJsZWQ6IGFueSA9IHRydWU7XHJcbiAgb3ZlcnNlZXJHcm91cHNMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGVuYWJsZUFwcHJvdmFsV29ya2Zsb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1ZlcnNpb25WYWxpZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2VsZWN0ZWRMaW5rUHJvZ3JhbTogYW55ID0ge307XHJcbiAgdmVyc2lvbkVycm9yTWVzc2FnZTogc3RyaW5nID1cclxuICAgICdZb3UgaGF2ZSBlbnRlcmVkIGFuIGluY29ycmVjdCBmb3JtYXQuIFRoZSB2ZXJzaW9uIGZpZWxkIGNhbiBlaXRoZXIgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLic7XHJcbiAgc2VsZWN0ZWRXb3JrZmxvdzogYW55W10gPSBbXTtcclxuICBlZGl0QXBwcm92YWxXb3JrZmxvdyE6IGFueTtcclxuICBhcHByb3ZhbFdvcmtmbG93SWRzOiBhbnlbXSA9IFtdO1xyXG4gIGRlZmF1bHRFZGl0QXBwcm92ZXJzOiBhbnkgPSB7fTtcclxuICBjcmVhdGVBcHByb3ZhbENsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdFdvcmtmbG93TGV2ZWwgPSB7fTtcclxuICBub1dvcmtmbG93U2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZW1wbGF0ZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZW1wbGF0ZVVybDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwb2xpY3lTZXJ2aWNlOiBQb2xpY3lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5U2VydmljZSxcclxuICAgIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIGNoYW5nZVJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJlc3RBcGlTZXJ2aWNlOiBSZXN0QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgb3JnYW5pemF0aW9uVXNlclNlcnZpY2U6IE9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvcmdhbml6YXRpb25Db21tb25TZXJ2aWNlOiBPcmdhbml6YXRpb25Db21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wbGlhbmNlQ29tbW9uU2VydmljZTogQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlmcmFtZVNlcnZpY2U6IElmcmFtZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGVVdGlsaXR5U2VydmljZTogRGF0ZVV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmJhc2VVUkwgPSBsb2NhdGlvbj8ub3JpZ2luO1xyXG4gICAgaWYgKHRoaXMuYmFzZVVSTCA9PSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJykge1xyXG4gICAgICB0aGlzLmJhc2VVUkwgPSAnaHR0cHM6Ly9kZXYudi1jb21wbHkuY29tJztcclxuICAgIH1cclxuICB9XHJcbiAgcG9saWN5Rm9ybTogUG9saWN5Rm9ybSA9IHtcclxuICAgIHBvbGljeU5hbWU6ICcnLFxyXG4gICAgcG9saWN5Tm90ZXM6ICcnLFxyXG4gICAgc2VsZWN0ZWRDYXRlZ29yaWVzOiBbXSxcclxuICAgIHNlbGVjdGVkQXBwcm92ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkQXNzaWduZWVzOiBbXSwgLy9kb3VidCBpbiBuYW1lXHJcbiAgICBzZWxlY3RlZEdyb3VwQXNzaWduZWU6IFtdLFxyXG4gICAgc2VsZWN0ZWRSZXZpZXdlcnM6IFtdLFxyXG5cclxuICAgIHNlbGVjdGVkUkNzOiBbXSxcclxuICAgIENDRmFpbEVtYWlsOiBbXSxcclxuICAgIENDRmFpbEVtYWlsR3JvdXA6IFtdLFxyXG4gICAgQ0NFbWFpbDogW10sXHJcbiAgICBDQ0dyb3VwRW1haWw6IFtdLFxyXG4gICAgYXZhaWxhYmxlT25Qb3J0YWw6IGZhbHNlLFxyXG4gICAgYWNjZXB0U3VnZ2VzdGlvbnM6IGZhbHNlLFxyXG4gICAgcmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvbjogZmFsc2UsXHJcbiAgICByaXNrUmF0aW5nOiAxLFxyXG4gICAgYXNzb2NpYXRlZERvY3VtZW50czoge1xyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICB9LFxyXG4gICAgcG9saWN5RHVlRGF0ZTogbW9tZW50KCksXHJcbiAgICBjdXN0b21UYWdzOiBbXSxcclxuICAgIGNoZWNrcG9pbnREZXRhaWxzOiBbXSxcclxuICAgIExpbmtlZFBvbGljaWVzOiBbXSxcclxuICAgIHRvdGFsUXVlc3Rpb246IDAsXHJcbiAgICBwYXNzaW5nTWFya3M6IDAsXHJcbiAgICBkb2N1bWVudHNBbmRMaW5rczoge1xyXG4gICAgICBmb3JtYXRGaWxlczogW10sXHJcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcclxuICAgIH0sXHJcbiAgICBhZGRSZXNwb25zaWJpbGl0eUNlbnRlcnM6IGZhbHNlLFxyXG4gICAgYWRkUmV2aWV3ZXJzOiBmYWxzZSxcclxuICAgIGFkZENoZWNrcG9pbnRzOiBmYWxzZSxcclxuICAgIGFkZE92ZXJzZWVyczogZmFsc2UsXHJcbiAgICBhZGRBc3NvY2lhdGVkRG9jdW1lbnRzOiBmYWxzZSxcclxuICAgIGFkZFZlcnNpb246IGZhbHNlLFxyXG4gICAgYWRkTGlua0Fzc2Vzc21lbnQ6IGZhbHNlLFxyXG4gICAgYWRkTGlua1Byb2dyYW06IGZhbHNlLFxyXG4gICAgYWRkTGlua1BvbGljaWVzOiBmYWxzZSxcclxuICAgIGlzUG9ydGFsRGlzcGxheUVuYWJsZWQ6IGZhbHNlLFxyXG5cclxuICAgIGZhaWxlZF90aW1lOiAnJyxcclxuICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiAnJyxcclxuICAgIGZyZXF1ZW5jeV90ZXh0OiAnJyxcclxuICAgIG1hcmtfZmFpbGVkX2FmdGVyOiAwLFxyXG4gICAgcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOiAwLFxyXG5cclxuICAgIHJldmlld0ZhaWxlZEFmdGVyOiAwLFxyXG4gICAgcmV2aWV3RmFpbGVkVGltZTogJycsXHJcbiAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxyXG4gICAgcmV2aWV3X2ZyZXF1ZW5jeV90eXBlOiAnJyxcclxuICAgIHJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGU6IDAsXHJcbiAgICByZXZpZXc6IGZhbHNlLFxyXG4gICAgbGlua1Byb2dyYW06IHt9LFxyXG4gICAgcHJvZ3JhbVNlbGVjdGVkVmFsdWVzOiB7fSxcclxuICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxyXG4gICAgcmV2aWV3ZXJfc3RhcnRfZGF0ZTogJycsIC8vVGh1IEZlYiAyMiAyMDI0XHJcbiAgICBwb2xpY3lfdmVyc2lvbjogJycsIC8vIGl0IHdpbGwgYWNjZXB0IG1hdGNoZXMgYWxwaGFiZXRzLCBoeXBoZW5zICgtKSwgZG90cyAoLiksIGFuZCBudW1lcmljIHZhbHVlcyBvbmx5IGFuZCBzaG91bGQgYmUgc21hbGxlciBvciBlcXVhbCB0byA2IGNoYXJhY3RlcnNcclxuICAgIGFzc2Vzc21lbnQ6IFtdLFxyXG4gICAgcG9saWN5X293bmVyczogW10sXHJcbiAgICBwb2xpY3lfZ3JvdXBfb3duZXJzOiBbXSxcclxuICAgIGJ1c2luZXNzQ3ljbGU6IHt9LFxyXG4gICAgcG9saWN5X2lkOiAwLFxyXG4gICAgcG9saWN5X2FjY2Vzc190eXBlOiAwLFxyXG4gICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IFtdLFxyXG4gICAgcG9saWN5X2FjY2Vzc19ncm91cHM6IFtdLFxyXG4gICAgc2VsZWN0ZWRBbGxBdHRlc3RvcnM6IGZhbHNlLFxyXG4gIH07XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9pbml0aWF0ZUFQSSgpO1xyXG4gICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgX2luaXRpYXRlQVBJKCkge1xyXG4gICAgdGhpcy5ncm91cEVuYWJsZWQgPVxyXG4gICAgICB0aGlzLmZlYXR1cmU/LmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX3BvbGljeV9ncm91cHMnKSB8fCB0cnVlO1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuX2luaXRpYXRlRWRpdEFQSSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRVc2Vyc0xpc3QoKTtcclxuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgIHRoaXMubG9hZGVyID0gdGhpcy5tb2RlID09PSAnRURJVCcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLmdldE9yZ0RldGFpbHMoKTtcclxuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldFVzZXJEZXRhaWxzKCk/Ll9pZDtcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmF1dGhTZXJ2aWNlPy5nZXRVc2VyRGV0YWlscygpPy51c2VyO1xyXG4gICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldE1lbWJlcklkKCk7XHJcbiAgICB0aGlzLmNoYW5nZVJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYnVzaW5lc3NDeWNsZSA9IHRoaXMucmVzdEFwaVNlcnZpY2U/LmdldEJ1c2luZXNzQ3ljbGUoKTtcclxuICAgIC8vdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0VXNlcnNMaXN0V2l0aFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIF9pbml0aWF0ZUVkaXRBUEkoKSB7XHJcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xyXG4gICAgdGhpcy5vdmVyc2Vlckdyb3VwTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBnZXRPcmdEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25Db21tb25TZXJ2aWNlPy5nZXRPcmdEZXRhaWxzSW5mbygpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIXJlcz8uZW5hYmxlX3Jpc2tjbGFzcykge1xyXG4gICAgICAgICAgdGhpcy5zaG93Umlza0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXM/Ll9pZCkge1xyXG4gICAgICAgICAgdGhpcy5vcmdhbml6YXRpb25faWQgPSByZXM/Ll9pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlua2VkUG9saWNpZXMocG9saWN5SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLkxpbmtlZFBvbGljaWVzTGlzdChwb2xpY3lJZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IFsuLi5uZXcgU2V0KHJlc3BvbnNlPy5kYXRhKV0ucmV2ZXJzZSgpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcyA9IHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkXHJcbiAgICAgICAgKS5tYXAoKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uaXNQb3J0YWxEaXNwbGF5RW5hYmxlZCA9IHJlc3BvbnNlPy5kaXNwbGF5T25Qb3J0YWw7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERpc3BsYXlzIHRoZSBsaXN0aW5nIHBhZ2VzIHRoZSBsZWZ0IHNpZGUgb2YgcG9saWN5IGZvcm0gdG8gc2V0IGFuZCBlZGl0IHRoZSBkcm9wZG93biBmaWVsZHMgdmFsdWVzXHJcbiAgICogQHBhcmFtIHR5cGUgaG9sZHMgbmFtZSBvZiBwYXJ0aWN1bGFyIGxpc3QgaXMgdG8gYmUgZGlzcGxheWVkXHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcclxuICAgKiBAcGFyYW0gd29ya2Zsb3dUeXBlIGl0IHNldHMgdGhlIGFwcHJvdmFsIHdvcmtmbG93IHR5cGUgd2hpbGUgZWRpdGluZyB0aGUgYXBwcm92YWwgd29ya2Zsb3cuXHJcbiAgICovXHJcbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuLCB3b3JrZmxvd1R5cGU/OiBhbnkpIHtcclxuICAgIGlmICh3b3JrZmxvd1R5cGUpIHtcclxuICAgICAgdGhpcy53b3JrZmxvd1R5cGUgPSB3b3JrZmxvd1R5cGU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gZXZlbnQgPyB0eXBlIDogJyc7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcclxuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXNMaXN0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxyXG4gICAgICBjYXNlICdjY0ZhaWwnOlxyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xyXG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cExpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlcyB0aGUgbGlzdGluZyBwYWdlc1xyXG4gICAqL1xyXG4gIGRpc2FibGVTZWxlY3RvcigpIHtcclxuICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHRoaXMuaXNQYWdpbmF0aW9uRW5hYmxlZCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0ZWRVc2Vyc0xpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgUmVzcG9uc2liaWxpdHkgY2VudGVycyBsaXN0XHJcbiAgICovXHJcbiAgZ2V0UkNMaXN0KCkge1xyXG4gICAgdGhpcy5jb21wbGlhbmNlQ29tbW9uU2VydmljZT8uZ2V0UmNMaXN0SW5mbygpPy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnJjTGlzdCA9IHJlcztcclxuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgb3JnYW5pemF0aW9uIHVzZXJzIGxpc3RcclxuICAgKi9cclxuICBnZXRVc2Vyc0xpc3QoKSB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzKCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMudXNlcnNMaXN0ID0gdGhpcy51cGRhdGVNZW1iZXJJZEtleShyZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVwbGFjZSBtZW1iZXJfaWQgdmFsdWUgdG8gbXlfbWVtYmVyX2lkXHJcbiAgdXBkYXRlTWVtYmVySWRLZXkobGlzdDogYW55KSB7XHJcbiAgICBsZXQgdXBkYXRlZExpc3QgPSBsaXN0Lm1hcCgoZWxlOiBhbnkpID0+ICh7XHJcbiAgICAgIC4uLmVsZSxcclxuICAgICAgbWVtYmVyX2lkOiBlbGU/Lm15X21lbWJlcl9pZCxcclxuICAgIH0pKTtcclxuICAgIHJldHVybiB1cGRhdGVkTGlzdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgUG9saWN5IENhdGVnb3JpZXMgbGlzdFxyXG4gICAqL1xyXG4gIGdldENhdGVnb3JpZXNMaXN0KCkge1xyXG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldENhdGVnb3JpZXNMaXN0KCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IHJlcztcclxuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBpZiAocmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUNvbmZpZy5ub0RhdGFUZXh0ID0gJ05vIHJlc3VsdHMgbWF0Y2hlZCB5b3VyIHNlYXJjaCBjcml0ZXJpYS4nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBncm91cHMgbGlzdFxyXG4gICAqL1xyXG4gIGdldEdyb3Vwc0xpc3QoKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRPcmdhbml6YXRpb25Qb2xpY3lHcm91cHMoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICBjb25zdCBncm91cHM6IGFueSA9IFtdO1xyXG4gICAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICBncm91cE5hbWU6IGVsZW1lbnQuZ3JvdXBfbmFtZSxcclxuICAgICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGdyb3Vwcy5wdXNoKG9iaik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZ3JvdXBzO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy9HZXQgdGhlIGxpc3Qgb2Ygb3ZlcnNlZXJzIGdyb3VwLlxyXG4gIG92ZXJzZWVyR3JvdXBMaXN0KCkge1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2U/LmdldE9yZ2FuaXphdGlvbk92ZXJzZWVyc0dyb3VwcygpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QgPSByZXM/LmRhdGE7XHJcbiAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgYXBwcm92ZXJzIHdvcmtmbG93IGZyb20gdGhlIHNlbGVjdGVkIHdvcmtmbG93IG9uIEFwcHJvdmVycyB3b3JrZmxvdyBsaXN0XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHByZWRlZmluZWQgd29ya2Zsb3dcclxuICAgKi9cclxuICBzZWxlY3RlZFdvcmtmbG93Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCA9PT0gLTEpIHtcclxuICAgICAgLy8gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XHJcbiAgICAgIC8vIHRoaXMuYWRkTW9yZUxldmVscyA9IHRydWVcclxuICAgICAgLy8gdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkYXRhID0gY2xvbmVEZWVwKGV2ZW50LmFwcHJvdmFsX3dvcmtmbG93KTtcclxuICAgICAgY29uc3QgbmV3QXJyYXkgPSBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgaXRlbS5uYW1lID0gaXRlbS50eXBlO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW0uYXBwcm92ZXJzLm1hcCgoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkKTtcclxuICAgICAgICBpdGVtLmFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbEFwcHJvdmVycywgaWRzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSB0aGlzLnByZXNlcnZlQXBwcm92YWxGbGFncyhuZXdBcnJheSwgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXJnZXMgYXBwcm92ZXJzIGZyb20gbmV3TGV2ZWxzIHdpdGggYXBwcm92ZXJzIGZyb20gY3VycmVudExldmVsc1xyXG4gICAqIHdoaWxlIHByZXNlcnZpbmcgYXBwcm92YWwtcmVsYXRlZCBmbGFncy5cclxuICAgKiBBbHNvIGZpbHRlcnMgb3V0IGxldmVscyB0aGF0IGVuZCB1cCB3aXRoIG5vIGFwcHJvdmVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBuZXdMZXZlbHMgLSBBcnJheSBvZiBuZXcgbGV2ZWxzIHdpdGggYXBwcm92ZXJzLlxyXG4gICAqIEBwYXJhbSBjdXJyZW50TGV2ZWxzIC0gT2JqZWN0IGNvbnRhaW5pbmcgZXhpc3RpbmcgbGV2ZWxzLlxyXG4gICAqIEByZXR1cm5zIEEgbmV3IGFycmF5IG9mIGxldmVscyB3aXRoIG1lcmdlZCBhcHByb3ZlcnMgYW5kIHByZXNlcnZlZCBmbGFncy5cclxuICAgKi9cclxuICBwcml2YXRlIHByZXNlcnZlQXBwcm92YWxGbGFncyhuZXdMZXZlbHM6IGFueVtdLCBjdXJyZW50TGV2ZWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55W10ge1xyXG4gICAgcmV0dXJuIChuZXdMZXZlbHMgfHwgW10pLnJlZHVjZTxhbnlbXT4oKGFjYzogYW55W10sIGxldmVsOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgbGV2ZWxLZXkgPSBgbGV2ZWwke2luZGV4ICsgMX1gO1xyXG4gICAgICBjb25zdCBjdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWxzPy5bbGV2ZWxLZXldO1xyXG5cclxuICAgICAgLy8gUHJlc2VydmUgZmxhZ3MgaWYgYXBwcm92ZXIgYWxyZWFkeSBleGlzdHMgaW4gY3VycmVudExldmVsXHJcbiAgICAgIGNvbnN0IGFwcHJvdmVycyA9IHRoaXMubWVyZ2VBcHByb3ZlcnNGb3JMZXZlbChsZXZlbD8uYXBwcm92ZXJzLCBjdXJyZW50TGV2ZWwpO1xyXG5cclxuICAgICAgLy8gT25seSBpbmNsdWRlIHRoaXMgbGV2ZWwgaWYgaXQgaGFzIGF0IGxlYXN0IG9uZSBhcHByb3ZlclxyXG4gICAgICBpZiAoYXBwcm92ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhY2MucHVzaCh7XHJcbiAgICAgICAgICAuLi5sZXZlbCxcclxuICAgICAgICAgIGFwcHJvdmVycyxcclxuICAgICAgICAgIGFwcHJvdmFsX2RvbmU6IGN1cnJlbnRMZXZlbD8uYXBwcm92YWxfZG9uZSA/PyBsZXZlbD8uYXBwcm92YWxfZG9uZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBBcHByb3ZlcnMgd29ya2Zsb3cgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xyXG4gICAqIEBwYXJhbSBpZCBjb250YWlucyBzZWxlY3RlZCBjYXRlZ29yaWVzIGlkJ3NcclxuICAgKi9cclxuICBnZXRBcHByb3ZlcldvcmtGbG93KGlkOiBhbnksIGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRXb3JrZmxvd0xpc3QoaWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8ubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgIHRoaXMuYXBwcm92ZXJXb3JrRmxvd0xpc3QgPSByZXM7IC8vIGdldHRpbmcgYWxsIGFwcHJvdmVyIHNhdmVkIHdvcmtmbG93c1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmVyV29ya0Zsb3dMaXN0Py5mb3JFYWNoKCh3b3JrZmxvdykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzPy5pbmNsdWRlcyh3b3JrZmxvdz8uX2lkKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlRGVmYXVsdFdvcmtmbG93KHdvcmtmbG93KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYXBwcm92YWxEYXRhOiBhbnkgPSBbXTtcclxuICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5ub1dvcmtmbG93U2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBsZXQgYXBwcm92YWxXb3JrZmxvdzogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVXb3JrZmxvdygpO1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzKS5mb3JFYWNoKChhcHByb3ZlcnNMZXZlbCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLmFwcHJvdmVycyA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2FwcHJvdmVyc0xldmVsXT8uYXBwcm92ZXJzPy5tYXAoXHJcbiAgICAgICAgICAgICAgICAgIChhcHA6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYXBwLm1lbWJlcl9uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHByb3ZlclVzZXIgPSB0aGlzLnVzZXJzTGlzdD8uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXI6IGFueSkgPT4gdXNlci5teV9tZW1iZXJfaWQgPT0gYXBwLm1lbWJlcl9pZFxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlclVzZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLm1lbWJlcl9uYW1lID0gYXBwcm92ZXJVc2VyPy5tZW1iZXJfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEFwcHJvdmFsU3RhdHVzID0gdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVyc1thcHByb3ZlcnNMZXZlbF0/LmFwcHJvdmFsX2RvbmUgPz8gZmFsc2U7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGV2ZWxEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgbGV2ZWwxOiBhcHByb3ZlcnNMZXZlbCxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLFxyXG4gICAgICAgICAgICAgICAgYXBwcm92YWxfZG9uZTogb3JpZ2luYWxBcHByb3ZhbFN0YXR1cyxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGFwcHJvdmFsV29ya2Zsb3cucHVzaChsZXZlbERhdGEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgYXBwcm92YWxEYXRhLnB1c2goe1xyXG4gICAgICAgICAgICAgIHdvcmtmbG93X25hbWU6ICcnLFxyXG4gICAgICAgICAgICAgIHdvcmtmbG93X21vZHVsZTogJ1BPTElDWScsXHJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHt9LFxyXG4gICAgICAgICAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiBhcHByb3ZhbFdvcmtmbG93LFxyXG4gICAgICAgICAgICAgIGNhdGVnb3J5X2FycjogW10sXHJcbiAgICAgICAgICAgICAgY3JlYXRvcjoge30sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdLmFwcHJvdmFsX3dvcmtmbG93ID0gYXBwcm92YWxEYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSB0aGlzLnNlbGVjdGVkV29ya2Zsb3c7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3QoXHJcbiAgICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICBbZGF0YS5SZXZpZXdlck1lbWJlcklkXSxcclxuICAgICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRGVmYXVsdFdvcmtmbG93KHdvcmtmbG93OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzICYmIHdvcmtmbG93Py5hcHByb3ZhbF93b3JrZmxvdykge1xyXG4gICAgICBjb25zdCB1cGRhdGVkV29ya2Zsb3cgPSB7IC4uLndvcmtmbG93IH07XHJcbiAgICAgIHVwZGF0ZWRXb3JrZmxvdy5hcHByb3ZhbF93b3JrZmxvdyA9IHdvcmtmbG93LmFwcHJvdmFsX3dvcmtmbG93Lm1hcCgobGV2ZWw6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxldmVsS2V5ID0gYGxldmVsJHtpbmRleCArIDF9YDtcclxuICAgICAgICBjb25zdCBjdXJyZW50UG9saWN5TGV2ZWwgPSB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2xldmVsS2V5XTtcclxuXHJcbiAgICAgICAgLy8gSWYgYXBwcm92YWwgc3RhdHVzIGV4aXN0cywgcHJlc2VydmUgaXQ7IG90aGVyd2lzZSwga2VlcCB0aGUgZXhpc3Rpbmcgc3RhdHVzIGluIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKGN1cnJlbnRQb2xpY3lMZXZlbCkge1xyXG4gICAgICAgICAgY29uc3QgbWVyZ2VkQXBwcm92ZXJzID0gdGhpcy5tZXJnZUFwcHJvdmVyc0ZvckxldmVsKGxldmVsLmFwcHJvdmVycywgY3VycmVudFBvbGljeUxldmVsKTtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLmxldmVsLFxyXG4gICAgICAgICAgICBhcHByb3ZlcnM6IG1lcmdlZEFwcHJvdmVycyxcclxuICAgICAgICAgICAgYXBwcm92YWxfZG9uZTogY3VycmVudFBvbGljeUxldmVsLmFwcHJvdmFsX2RvbmUgPyBjdXJyZW50UG9saWN5TGV2ZWwuYXBwcm92YWxfZG9uZSA6IGxldmVsLmFwcHJvdmFsX2RvbmVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsZXZlbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ucHVzaCh1cGRhdGVkV29ya2Zsb3cpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5wdXNoKHdvcmtmbG93KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVyZ2VBcHByb3ZlcnNGb3JMZXZlbChsZXZlbEFwcHJvdmVyczogYW55W10sIGN1cnJlbnRMZXZlbDogYW55KTogYW55W10ge1xyXG4gICAgcmV0dXJuIChsZXZlbEFwcHJvdmVycyB8fCBbXSkubWFwKChhcHByb3ZlcjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gY3VycmVudExldmVsPy5hcHByb3ZlcnM/LmZpbmQoXHJcbiAgICAgICAgKGE6IGFueSkgPT4gYT8ubWVtYmVyX2lkID09PSBhcHByb3Zlcj8ubWVtYmVyX2lkXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAuLi5hcHByb3ZlcixcclxuICAgICAgICAgIGFwcHJvdmFsX2ZsYWc6IGV4aXN0aW5nLmFwcHJvdmFsX2ZsYWcgPz8gYXBwcm92ZXIuYXBwcm92YWxfZmxhZyxcclxuICAgICAgICAgIHJlamVjdF9mbGFnOiBleGlzdGluZy5yZWplY3RfZmxhZyA/PyBhcHByb3Zlci5yZWplY3RfZmxhZyxcclxuICAgICAgICAgIHJlbW92ZV9mbGFnOiBleGlzdGluZy5yZW1vdmVfZmxhZyA/PyBhcHByb3Zlci5yZW1vdmVfZmxhZ1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGFwcHJvdmVyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVXb3JrZmxvdygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtdO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBbXTtcclxuICAgIHRoaXMuZWRpdEFwcHJvdmFsV29ya2Zsb3cgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIEFwcHJvdmVycyBhbmQgcmV2aWV3ZXJzIGxpc3QgYmFzZWQgb24gc2VsZWN0ZWQgcG9saWN5IGNhdGVnb3JpZXNcclxuICAgKiBAcGFyYW0gY2F0ZWdvcnlJZHMgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXHJcbiAgICovXHJcbiAgZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChcclxuICAgIGNhdGVnb3J5SWRzOiBhbnksXHJcbiAgICBhcHByb3Zlcklkcz86IGFueSxcclxuICAgIHJldmlld2VySWRzPzogYW55LFxyXG4gICAgcG9saWN5PzogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmFsbEFwcHJvdmVycyA9IFtdO1xyXG4gICAgdGhpcy5hbGxSZXZpZXdlcnMgPSBbXTtcclxuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRSZXZpZXdlcnMoY2F0ZWdvcnlJZHMpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8ubGVuZ3RoID49IDApIHtcclxuICAgICAgICAgIHJlcy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMgPSB1bmlxQnkoXHJcbiAgICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMuY29uY2F0KGVsZW1lbnQuYWxsX2FwcHJvdmVycyksXHJcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMgPSB1bmlxQnkoXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5hbGxfYXBwcm92ZXJzLmNvbmNhdChcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5hbGxfYXV0aG9yc1xyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0NSRUFURScpIHRoaXMuc2V0T3duZXJzT25Mb2FkKCk7XHJcbiAgICAgICAgICAgIGlmIChwb2xpY3k/LnBvbGljeV9vd25lcnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsbEFwcHJvdmVycyxcclxuICAgICAgICAgICAgICAgIHBvbGljeT8ucG9saWN5X293bmVycyA/PyBbXSxcclxuICAgICAgICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldFVzZXJzQWNjZXNzTGlzdEJ5Q2F0ZWdvcnkoZWxlbWVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFwcHJvdmVySWRzPy5hcHByb3ZlcnMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmhhc1dvcmtmbG93Q2hhbmdlcyhhcHByb3ZlcklkcykpIHtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IGFwcHJvdmVySWRzPy5hcHByb3ZlcnM7XHJcbiAgICAgICAgICAgIGxldCBhcHByb3ZlckxldmVscyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIG9iaikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGlkcyA9IG9ialtpdGVtXT8uYXBwcm92ZXJzPy5tYXAoXHJcbiAgICAgICAgICAgICAgICAoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBsZXQgZGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IG9ialtpdGVtXT8ubmFtZSA/PyBvYmpbaXRlbV0/LnR5cGUsXHJcbiAgICAgICAgICAgICAgICBhcHByb3ZlcnM6IG9ialtpdGVtXT8uYXBwcm92ZXJzLFxyXG4gICAgICAgICAgICAgICAgYXBwcm92YWxfZG9uZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDE6IG9ialtpdGVtXT8ubGV2ZWwxIHx8IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICBhbGlhc19uYW1lOiBvYmpbaXRlbV0/LmFsaWFzX25hbWUsXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBhcHByb3ZlckxldmVscy5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmVyTGV2ZWxzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgYXBwcm92YWxfd29ya2Zsb3c6IGFwcHJvdmVyTGV2ZWxzLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJldmlld2VySWRzKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxyXG4gICAgICAgICAgICByZXZpZXdlcklkcyxcclxuICAgICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhc1dvcmtmbG93Q2hhbmdlcyhuZXdBcHByb3ZlcklkczogYW55KTogYm9vbGVhbiB7XHJcbiAgICAvLyBJZiB0aGVyZSBpcyBubyB3b3JrZmxvdyBzZWxlY3RlZFxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCB8fCAhdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBleGlzdGluZ1dvcmtmbG93ID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdztcclxuICAgIGNvbnN0IG5ld0FwcHJvdmVycyA9IG5ld0FwcHJvdmVySWRzPy5hcHByb3ZlcnM7XHJcblxyXG4gICAgLy8gQ2hlY2sgaWYgbmV3IGFwcHJvdmVycyBleGlzdCBhbmQgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgbGV2ZWxzIFxyXG4gICAgaWYgKCFuZXdBcHByb3ZlcnMgfHwgT2JqZWN0LmtleXMobmV3QXBwcm92ZXJzKS5sZW5ndGggIT09IGV4aXN0aW5nV29ya2Zsb3cubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vQ29tcGFyZSBlYWNoIGxldmVsIGluIHRoZSB3b3JrZmxvd1xyXG4gICAgZm9yIChjb25zdCBsZXZlbEtleSBpbiBuZXdBcHByb3ZlcnMpIHtcclxuICAgICAgY29uc3QgbmV3TGV2ZWwgPSBuZXdBcHByb3ZlcnNbbGV2ZWxLZXldO1xyXG4gICAgICBsZXQgZXhpc3RpbmdMZXZlbCA9IGV4aXN0aW5nV29ya2Zsb3cuZmluZChcclxuICAgICAgICAobGV2ZWw6IGFueSkgPT4gbGV2ZWwuYWxpYXNfbmFtZSA9PT0gbmV3TGV2ZWwuYWxpYXNfbmFtZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWV4aXN0aW5nTGV2ZWwgJiYgZXhpc3RpbmdXb3JrZmxvd1twYXJzZUludChsZXZlbEtleS5yZXBsYWNlKCdsZXZlbCcsICcnKSkgLSAxXSkge1xyXG4gICAgICAgIGV4aXN0aW5nTGV2ZWwgPSBleGlzdGluZ1dvcmtmbG93W3BhcnNlSW50KGxldmVsS2V5LnJlcGxhY2UoJ2xldmVsJywgJycpKSAtIDFdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiBubyBleGlzdGluZyBsZXZlbCBmb3VuZCwgY29uc2lkZXIgdGhpcyBhcyBhIG5ldyBsZXZlbFxyXG4gICAgICBpZiAoIWV4aXN0aW5nTGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFwcHJvdmFsIHR5cGUgaGFzIGNoYW5nZWRcclxuICAgICAgaWYgKGV4aXN0aW5nTGV2ZWwgJiYgbmV3TGV2ZWwudHlwZSAhPT0gZXhpc3RpbmdMZXZlbC50eXBlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBhcHByb3ZlciBuYW1lIGhhcyBjaGFuZ2VkXHJcbiAgICAgIGlmIChleGlzdGluZ0xldmVsICYmIG5ld0xldmVsLmFsaWFzX25hbWUgIT09IGV4aXN0aW5nTGV2ZWwuYWxpYXNfbmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBuZXdNZW1iZXJJZHMgPSAobmV3TGV2ZWw/LmFwcHJvdmVycyB8fCBbXSlcclxuICAgICAgICAubWFwKChhOiBhbnkpID0+IGE/Lm1lbWJlcl9pZClcclxuICAgICAgICAuZmlsdGVyKChpZDogYW55KSA9PiBpZCAhPSBudWxsKTtcclxuXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVtYmVySWRzID0gKGV4aXN0aW5nTGV2ZWw/LmFwcHJvdmVycyB8fCBbXSlcclxuICAgICAgICAubWFwKChhOiBhbnkpID0+IGE/Lm1lbWJlcl9pZClcclxuICAgICAgICAuZmlsdGVyKChpZDogYW55KSA9PiBpZCAhPSBudWxsKTtcclxuXHJcbiAgICAgIC8vIElmIG1lbWJlciBjb3VudCBvZiBhcHByb3ZlcnMgZGlmZmVyc1xyXG4gICAgICBpZiAobmV3TWVtYmVySWRzLmxlbmd0aCAhPT0gZXhpc3RpbmdNZW1iZXJJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbXBhcmUgbWVtYmVycyBwZXIgbGV2ZWxcclxuICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChuZXdNZW1iZXJJZHMpO1xyXG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIGV4aXN0aW5nTWVtYmVySWRzKSB7XHJcbiAgICAgICAgaWYgKCFuZXdTZXQuaGFzKGlkKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKioqKioqKlxyXG4gICAqIEl0IGlzIHRvIHBvcHVsYXRlIG1vcmUgb3B0aW9ucyBlbGVtZW50cyB3aGlsZSBlZGl0aW5nIHRoZSBwb2xpY3kgZm9ybVxyXG4gICAqL1xyXG4gIHBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKSB7XHJcbiAgICBjb25zdCBhY3RpdmF0ZWRPcHRpb25zID0gW107XHJcbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycykge1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ1JFU1BPTlNJQklMSVRZX0NFTlRFUicpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpOyB9XHJcbiAgICAvLyBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZENoZWNrcG9pbnRzKSB7IGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFMnKTsgfVxyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRPdmVyc2VlcnMpIHtcclxuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzKSB7XHJcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVMQVRFRF9ET0NVTUVOVFMnKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24pIHtcclxuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdWRVJTSU9OJyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50Lmxlbmd0aCkge1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfQVNTRVNTTUVOVFMnKTtcclxuICAgICAgdGhpcy5nZXRBc3Nlc3NtZW50RGV0YWlscyh0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudFswXSk7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtICYmXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxyXG4gICAgKSB7XHJcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnTElOS19QUk9HUkFNX1JFU1BPTlNJQklMSVRJRVMnKTtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUycpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGFjdGl2YXRlZE9wdGlvbnMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBJdCBpcyB0byBhZGQgYW5kIHJlbW92ZSB0aGUgZWxlbWVudHMgZnJvbSBNb3JlIG9wdGlvbiB0byB0aGUgcG9saWN5IEZvcm1cclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgZGV0YWlscyByZWxhdGVkIHRvIGNoZWNrZWQgdmFsdWUsIGNvZGUgcGFydGljdWxhciBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uc1xyXG4gICAqL1xyXG4gIGFkZE1vcmVJbmZvKGV2ZW50OiBhbnkpIHtcclxuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICBjYXNlICdSRVNQT05TSUJJTElUWV9DRU5URVInOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnMgPSBldmVudC5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlICdSRVZJRVdFUic6XHJcbiAgICAgIC8vICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgIC8vICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0NIRUNLUE9JTlRTJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkQ2hlY2twb2ludHMgPSBldmVudC5jaGVja2VkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdPVkVSU0VFUic6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZE92ZXJzZWVycyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1JFTEFURURfRE9DVU1FTlRTJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkQXNzb2NpYXRlZERvY3VtZW50cyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1ZFUlNJT04nOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRWZXJzaW9uID0gZXZlbnQuY2hlY2tlZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnTElOS19QUk9HUkFNX1JFU1BPTlNJQklMSVRJRVMnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rUHJvZ3JhbSA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0xJTktfQVNTRVNTTUVOVFMnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRMaW5rQXNzZXNzbWVudCA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XHJcbiAgICovXHJcbiAgY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKSB7XHJcbiAgICBjb25zdCBlZGl0TG9hZGVyID1cclxuICAgICAgdGhpcy5tb2RlID09PSAnRURJVCdcclxuICAgICAgICA/IHRoaXMucmNMaXN0TG9hZGVkICYmXHJcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCAmJlxyXG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZFxyXG4gICAgICAgIDogdHJ1ZTtcclxuICAgIGlmICh0aGlzLnVzZXJzTGlzdExvYWRlZCAmJiBlZGl0TG9hZGVyKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YSAmJiB0aGlzLmNvbnZlcnRGaWxlRGF0YS5maWxlTmFtZSkge1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gdGhpcy5jb252ZXJ0RmlsZURhdGEuZmlsZU5hbWUuc3Vic3RyaW5nKFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJylcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YS5jYXRlZ29yeUlkKSB7XHJcbiAgICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWRdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZVNlbGVjdGVkTGlzdCgnY2F0ZWdvcnknLCBbdGhpcy5zZWxlY3RlZENhdGVnb3J5XSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0UG9saWN5KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpO1xyXG4gICAgICB9LCAzMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcnMgdGhlIGNvbmZpcm1hdGlvbiBwb3B1cCB3aGVuIGF2YWlsYWJpbGl0eSBvbiBQb2xpY3kgcG9ydGFsIHRvZ2dsZSBpbiBPTlxyXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyB0b2dnbGUgdmFsdWUgd2hpY2ggaXMgYWx3YXlzIHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBhdmFpbGFiaWxpdHlPblBvcnRhbChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgY29uc3QgY29uZmlybWF0aW9uRGV0YWlsczogQ29uZmlybWF0aW9uQWxlcnQgPSB7XHJcbiAgICAgICAgaXNWaXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIG1lc3NhZ2U6IGBUaGUgcG9saWNpZXMgdGhhdCB5b3UgaW50ZW5kIHRvIG1ha2UgYWNjZXNzaWJsZSB0byB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbiBjYW4gYmUgYWRkZWQgdG8gdGhlIHBvbGljeSBwb3J0YWwuXHJcbiAgICAgICAgSXQgaXMgbGlrZSBhIHNoYXJlZCBjYXRhbG9nIG9mIGFsbCBhY3RpdmUgJiB1cGRhdGVkIHBvbGljaWVzIHRoYXQgYW55IGxvZ2dlZCBpbiB1c2VyIGNhbiByZWFkLyBkb3dubG9hZCBmb3IgcmVmZXJlbmNlLlxyXG4gICAgICAgIEhlbmNlLCBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBpdCBpcyBub3QgbmVjZXNzYXJ5IGZvciB5b3UgdG8gc2V0IHVwIGFuIGF0dGVzdGF0aW9uIHNjaGVkdWxlIG9yIHNlbGVjdFxyXG4gICAgICAgIHJlYWRlcnMgdG8gYXR0ZXN0IHRoZSBwb2xpY2llcy5gLFxyXG4gICAgICAgIGFjdGlvbjogJ1BPTElDWV9QT1JUQUwnLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNob3dDb25maXJtYXRpb25BbGVydC5lbWl0KGNvbmZpcm1hdGlvbkRldGFpbHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjZWl2ZXMgdGhlIGlucHV0IGZyb20gdGhlIENvbmZpcm1hdGlvbiBkaWFsb2cgb2YgYXZhaWxhYmxlIG9uIFBvbGljeSBwb3J0YWxcclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgb3B0aW9uIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgd2hpY2ggaXMgYWx3YXlzIGVpdGhlciAnWUVTJyBvciAnTk8nXHJcbiAgICovXHJcbiAgY29uZmlybVBvbGljeVBvcnRhbChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPSBldmVudCA9PSAnWUVTJyA/IHRydWUgOiBmYWxzZTtcclxuICAgIGlmIChldmVudCA9PSAnTk8nKSB7XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9ucyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgcG9saWN5Rm9ybSB3aXRoIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlIGxpc3RpbmcsIGZyZXF1ZW5jeSwgZmlsZSB1cGxvYWQgY29tcG9uZW50c1xyXG4gICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgZmllbGQgb24gUG9saWN5IGZvcm0uXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkSXRlbXMgY29udGFpbnMgdGhlIGxpc3Qgb2Ygc2VsZWN0ZWQgaXRlbXMgZnJvbSB0aGUgbGlzdFxyXG4gICAqL1xyXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiVHlwZTo6IFwiLCB0eXBlKTtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICAgICAgdGhpcy5yY0xpc3QsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgJ2l0ZW1faWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXHJcbiAgICAgICAgICAnX2lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLFxyXG4gICAgICAgICAgJ19pZCdcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtdO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcclxuICAgICAgICB0aGlzLmdldEFwcHJvdmVyV29ya0Zsb3cob2JqZWN0SWRzKTtcclxuICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3Qob2JqZWN0SWRzKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGFnID0gZWxlbWVudC5jdXN0b21fdGFncztcclxuICAgICAgICAgIGlmICh0YWcubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ25hbWUgPT0gdGFnRGF0YS50YWduYW1lXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XHJcbiAgICAgICAgbGV0IHVzZXJJZHMsIGdyb3VwSWRzO1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwRW5hYmxlZCkge1xyXG4gICAgICAgICAgdXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMudXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgICAgICAgIGdyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy5ncm91cHMsICdncm91cF9pZCcpO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZSA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXHJcbiAgICAgICAgICAgIGdyb3VwSWRzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1c2VySWRzID0gc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0LFxyXG4gICAgICAgICAgdXNlcklkcyxcclxuICAgICAgICAgICdteV9tZW1iZXJfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRlZFVzZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxyXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSxcclxuICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NFbWFpbCc6XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkVXNlcklkcywgc2VsZWN0ZWRHcm91cElkcztcclxuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgICAgIHNlbGVjdGVkVXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXM/LnVzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBzZWxlY3RlZEdyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0dyb3VwRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEdyb3VwSWRzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZFVzZXJJZHMsXHJcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jY0VtYWlsT2JqSWRzID0gdGhpcy5nZXRHcm91cE9iamVjdElkKFxyXG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRlZFVzZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjY0ZhaWwnOlxyXG4gICAgICAgIGxldCBzZWxlY3RlZEZhaWxVc2VySWRzLCBzZWxlY3RlZEZhaWxHcm91cElkcztcclxuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgICAgIHNlbGVjdGVkRmFpbFVzZXJJZHMgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8udXNlcnMsXHJcbiAgICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc2VsZWN0ZWRGYWlsR3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXAgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEZhaWxHcm91cElkcyxcclxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkRmFpbFVzZXJJZHMsXHJcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jY0ZhaWxHcm91cE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcclxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2luYXRlZFVzZXJzTGlzdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhcHByb3ZlcnMnOlxyXG4gICAgICAgIGNvbnN0IGFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgICAgICdtZW1iZXJfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGhpcy5hZGRNb3JlTGV2ZWxzKSB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxyXG4gICAgICAgICAgICBhcHByb3ZlcnMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW3RoaXMuYXBwcm92ZXJzTGlzdEluZGV4XSA9IHtcclxuICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxyXG4gICAgICAgICAgYXBwcm92ZXJzLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyX2F0dGFjaG1lbnRzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXMgPVxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XHJcblxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rcyA9XHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5saW5rcyA/PyBbXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnYXNzb2NpYXRlZERvY3VtZW50cyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXMgPVxyXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzID1cclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzID8/IFtdO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID1cclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPz8gMDtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucGFzc2luZ01hcmtzID0gc2VsZWN0ZWRJdGVtcz8ucmVxdWlyZWRQb2ludCA/PyAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvd25lcnMnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxyXG4gICAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdwb2xpY3lBY2Nlc3MnOlxyXG4gICAgICAgIGxldCBhY2Nlc3NJZHMsIGFjY2Vzc0dyb3VwSWRzO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCA9XHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5mdXR1cmVVc2Vyc1dpbGxTZWxlY3Q7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XHJcbiAgICAgICAgICBhY2Nlc3NJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zLnVzZXJzLCAnbWVtYmVyX2lkJyk7XHJcbiAgICAgICAgICBhY2Nlc3NHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMuZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXHJcbiAgICAgICAgICAgIGFjY2Vzc0dyb3VwSWRzLFxyXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBhY2Nlc3NJZHMgPSBzZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXHJcbiAgICAgICAgICBhY2Nlc3NJZHMsXHJcbiAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hQYWdpbmF0ZWRVc2Vyc0xpc3QoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnaXNMaW5rZWRQb2xpY2VzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uTGlua2VkUG9saWNpZXMgPSB0aGlzLmxpc3RPZlNlbGVjdGVkUG9saWNpZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5zZWxlY3RlZFBvbGljeUxpc3RcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcyA9IHNlbGVjdGVkSXRlbXM/LnNlbGVjdGVkUG9saWN5TGlzdDtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgbGlzdE9mU2VsZWN0ZWRQb2xpY2llcyhzZWxlY3RlZFBvbGljaWVzOiBhbnkpIHtcclxuICAgIHJldHVybiBzZWxlY3RlZFBvbGljaWVzPy5tYXAoKHBvbGljeTogYW55KSA9PiBwb2xpY3k/LmNvbnRyYWN0X2lkKTtcclxuICB9XHJcblxyXG4gIC8vcmV0dXJuIHRoZSBfaWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3ZlcnNlZXIgZ3JvdXAuXHJcbiAgZ2V0R3JvdXBPYmplY3RJZChvdmVyc2Vlckdyb3VwPzogYW55KSB7XHJcbiAgICBsZXQgb3ZlcnNlZXJHcm91cElkQXJyYXkgPSBvdmVyc2Vlckdyb3VwLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5faWQpO1xyXG4gICAgcmV0dXJuIG92ZXJzZWVyR3JvdXBJZEFycmF5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyB0aGUgcGFydGljdWxhciBlbGVtZW50IGZyb20gc2VsZWN0ZWQgbGlzdFxyXG4gICAqIEBwYXJhbSB0eXBlIGRlZmluZXMgdGhlIHBhcnRpY3VsYXIgY2FzZVxyXG4gICAqIEBwYXJhbSBldmVudCBob2xkcyB0aGUgaWQgb3Iga2V5IG9mIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqIEBwYXJhbSByZW1vdmVJbmRleCBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxyXG4gICAqL1xyXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncmMnOlxyXG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3Muc3BsaWNlKHJjSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxyXG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAob3duZXI6IGFueSkgPT4gb3duZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdncm91cEFzc2lnbmVlcyc6XHJcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleDogYW55ID1cclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWU/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWU/LnNwbGljZShncm91cEluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5zcGxpY2UocmV2aWV3ZXJJbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxyXG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsLnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjY0dyb3VwRW1haWwnOlxyXG4gICAgICAgIGNvbnN0IGNjR3JvdXBJbmRleDogYW55ID0gdGhpcy5wb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWw/LmZpbmRJbmRleChcclxuICAgICAgICAgIChncm91cDogYW55KSA9PiBncm91cD8uZ3JvdXBfaWQgPT0gZXZlbnQ/Lmdyb3VwX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NHcm91cEVtYWlsPy5zcGxpY2UoY2NHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNjRW1haWxPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NGYWlsJzpcclxuICAgICAgICBjb25zdCBvdmVyc2Vlck5vdGlmeUluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsLmZpbmRJbmRleChcclxuICAgICAgICAgIChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwuc3BsaWNlKG92ZXJzZWVyTm90aWZ5SW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjR3JvdXBGYWlsRW1haWwnOlxyXG4gICAgICAgIGNvbnN0IGNjRmFpbEdyb3VwSW5kZXg6IGFueSA9XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXA/LnNwbGljZShjY0ZhaWxHcm91cEluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmNjRmFpbEdyb3VwT2JqSWRzID0gdGhpcy5nZXRHcm91cE9iamVjdElkKFxyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhcHByb3ZlcnMnOlxyXG4gICAgICAgIGNvbnN0IGFwcHJvdmVyc0luZGV4ID0gdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW1xyXG4gICAgICAgICAgcmVtb3ZlSW5kZXhcclxuICAgICAgICBdLmFwcHJvdmVycy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoYXBwcm92ZXI6IGFueSkgPT4gYXBwcm92ZXIubWVtYmVyX2lkID09IGV2ZW50Lm1lbWJlcl9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzW3JlbW92ZUluZGV4XS5hcHByb3ZlcnMuc3BsaWNlKFxyXG4gICAgICAgICAgYXBwcm92ZXJzSW5kZXgsXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbcmVtb3ZlSW5kZXhdLmFwcHJvdmVycy5sZW5ndGggPT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yeSc6XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgKGNhdGVnb3J5OiBhbnkpID0+IGNhdGVnb3J5Lml0ZW1faWQgPT0gZXZlbnQuaXRlbV9pZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgY29uc3QgdGFnID0gZXZlbnQuY3VzdG9tX3RhZ3M7XHJcbiAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q1QgPSB0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWduYW1lID09IHRhZ0RhdGEudGFnbmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXhDVCAhPSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5jdXN0b21UYWdzLnNwbGljZShpbmRleENULCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyxcclxuICAgICAgICAgICdfaWQnXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKFxyXG4gICAgICAgICAgMCxcclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5sZW5ndGhcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0gPSBPYmplY3QuYXNzaWduKHRoaXMucG9saWN5Rm9ybSk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XHJcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KG9iamVjdElkcyk7XHJcbiAgICAgICAgdGhpcy5yZXNldFBvbGljeUFjY2Vzc0RldGFpbHMoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnRzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBbXTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0udG90YWxRdWVzdGlvbiA9IDA7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBhc3NpbmdNYXJrcyA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dvcmtmbG93TGV2ZWwnOlxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlbW92ZVdvcmtmbG93KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2xpbmtQcm9ncmFtJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSB7XHJcbiAgICAgICAgICBhZGRlZDogW10sXHJcbiAgICAgICAgICByZW1vdmVkOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwb2xpY3lJZHM6IFt0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9pZCA/PyAwXSxcclxuICAgICAgICAgICAgICBwcm9ncmFtSWQ6IHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbT8uX2lkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSB7fTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnb3duZXJzJzpcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncG9saWN5QWNjZXNzJzpcclxuICAgICAgICBjb25zdCB1c2VyQWNjZXNzSW5kZXggPSB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmZpbmRJbmRleChcclxuICAgICAgICAgIChvd25lcjogYW55KSA9PiBvd25lcj8uZW1wbG95ZWVfaWQgPT0gZXZlbnQ/LmVtcGxveWVlX2lkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5zcGxpY2UodXNlckFjY2Vzc0luZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhY2Nlc3NHcm91cCc6XHJcbiAgICAgICAgY29uc3QgZ3JvdXBBY2Nlc3NJbmRleDogYW55ID1cclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/LmZpbmRJbmRleChcclxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8uc3BsaWNlKGdyb3VwQWNjZXNzSW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJlcXVlbmN5KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2lzTGlua2VkUG9saWNlcyc6XHJcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzPy5maWx0ZXIoXHJcbiAgICAgICAgICAocG9saWN5SWQ6IGFueSkgPT4gZXZlbnQgIT09IHBvbGljeUlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMgPSB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/LmZpbHRlcihcclxuICAgICAgICAgIChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZCAhPT0gZXZlbnRcclxuICAgICAgICApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBSZWZyZXNoZXMgdGhlIGFzc2lnbmVlcyBhbmQgb3ZlcnNlZXJzIGxpc3Qgc3VjaCB0aGF0IGJvdGggbGlzdCBkb2VzIG5vdCBjb250YWluIHRoZSBzYW1lIHVzZXJzIGJhc2VkIG9uIHNlbGVjdGlvblxyXG4gICAqL1xyXG4gIHJlZnJlc2hBbGxMaXN0cygpIHtcclxuICAgIGxldCBhc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XHJcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgYWxsVXNlcnMgPSBjbG9uZURlZXAodGhpcy51c2Vyc0xpc3QpO1xyXG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyk7XHJcbiAgICBjb25zdCBvdmVyc2Vlckxpc3QgPSBjbG9uZURlZXAodGhpcy5wb2xpY3lGb3JtLkNDRW1haWwpO1xyXG4gICAgY29uc3Qgbm90aWZ5T3ZlcnNlZXJzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCk7XHJcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICBhc3NpZ25lZXNJZHMucHVzaCh1c2VyLmVtcGxveWVlX2lkKTtcclxuICAgIH0pO1xyXG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyLmVtcGxveWVlX2lkKTtcclxuICAgIH0pO1xyXG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyLmVtcGxveWVlX2lkKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbmVlc0lkcyldO1xyXG4gICAgcmV2aWV3ZXJzSWRzID0gWy4uLm5ldyBTZXQocmV2aWV3ZXJzSWRzKV07XHJcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XHJcblxyXG4gICAgLy8gdGhpcy5hc3NpZ25vcnNMaXN0ID0gYmVoYWxmVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEocmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSB8fCBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLm1lbWJlcl9pZCkpKTtcclxuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcclxuICAgICAgKHVzZXI6IGFueSkgPT5cclxuICAgICAgICAhKFxyXG4gICAgICAgICAgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8XHJcbiAgICAgICAgICBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgdXNlck9iaiA9IHRoaXMuYXNzaWduZWVzTGlzdDtcclxuICAgICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XHJcbiAgICAgICAgdXNlci5tZW1iZXJfaWQgPSB1c2VyLm15X21lbWJlcl9pZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMub3duZXJsaXN0ID0gdXNlck9iajtcclxuICAgIH1cclxuICAgIC8vIHRoaXMucmV2aWV3ZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcigodXNlcjogYW55KSA9PiAhKGFzc2lnbmVlc0lkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSB8fCBvdmVyc2Vlcklkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKSkpO1xyXG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxyXG4gICAgICAodXNlcjogYW55KSA9PlxyXG4gICAgICAgICEoXHJcbiAgICAgICAgICBhc3NpZ25lZXNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZCkgfHxcclxuICAgICAgICAgIHJldmlld2Vyc0lkcy5pbmNsdWRlcyh1c2VyLmVtcGxveWVlX2lkKVxyXG4gICAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdob2xlIGxpc3QgYmFzZWQgb24gc2VsZWN0ZWQgaWQncyBmcm9tIGEgcGFydGljdWxhciBsaXN0IGVsZW1lbnRzXHJcbiAgICogQHBhcmFtIGxpc3QgaXQgaXMgdGhlIG1haW4gbGlzdCAgd2hpY2ggY29udGFpbnMgYWxsIGVsZW1lbnRzIGxpc3RcclxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBmaWx0ZXIgc2VsZWN0ZWQgbGlzdCBmcm9tIHRoZSBsaXN0XHJcbiAgICogQHBhcmFtIGlkcyBzZWxlY3RlZCBpZHMgYXJyYXlcclxuICAgKi9cclxuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XHJcbiAgICBpZHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGxpc3Q/LmZpbmRJbmRleChcclxuICAgICAgICAobGlzdEVsZW1lbnQ6IGFueSkgPT4gbGlzdEVsZW1lbnRba2V5XSA9PSBlbGVtZW50XHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICBkYXRhLnB1c2gobGlzdFtpbmRleF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBpZCdzIGZyb20gYSBwYXJ0aWN1bGFyIGxpc3QgZWxlbWVudHNcclxuICAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxyXG4gICAqIEBwYXJhbSBrZXkgY29udGFpbnMga2V5IHRvIGV4dHJhY3QgaWQgZnJvbSB0aGUgbGlzdFxyXG4gICAqL1xyXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBsaXN0Lm1hcCgoZWxlKSA9PiB7XHJcbiAgICAgIGlmIChlbGVba2V5XSkge1xyXG4gICAgICAgIHJldHVybiBlbGVba2V5XTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSByZXZpZXdlciB0eXBlIGluIGFwcHJvdmFsIHdvcmtmbG93XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHJldmlld2VyIHR5cGVcclxuICAgKi9cclxuICByZXZpZXdlclR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy53b3JrZmxvd1R5cGUgPSBldmVudDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgZnJlcXVlbmN5IGluIGVkaXQgIG1vZGVcclxuICAgKi9cclxuICBmcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihldmVudDogYW55LCBtb2RlOiAnU0VMRUNUJyB8ICdQT1BVTEFURScgPSAnU0VMRUNUJykge1xyXG4gICAgLy9uZWVkcyB0byBkaXNjdXNzIHdpdGggYmFja2VuZCBhYm91dCBlZGl0IGFuZCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgcGF0dGVybjogZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzLCAvL1xyXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUsXHJcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8ubWFya19mYWlsZWRfYWZ0ZXIsXHJcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogJycsXHJcbiAgICAgIGxpZmVjeWNsZURldGFpbHM6ICcwMDAwLTAwLTAwfn4wJyxcclxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZmFpbGVkX3RpbWUgIT0gJycgPyBldmVudC5mYWlsZWRfdGltZSA6IERFRkFVTFRfMjRIUixcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogMCxcclxuICAgICAgc3RhcnRGcm9tOiBNYXRoLmZsb29yKFxyXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LmFzc2lnbmVlX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcclxuICAgICAgKSxcclxuICAgICAgc3RhcnREYXRlOiAnJyxcclxuICAgICAgcmVwb3J0SWQ6IDAsXHJcbiAgICAgIHRpbWVJbjEyaHI6IHRoaXMuZnJlcXVlbmN5U2VydmljZS50aW1lSW4xMihcclxuICAgICAgICBldmVudC5mYWlsZWRfdGltZSAhPSAnJyA/IGV2ZW50LmZhaWxlZF90aW1lIDogREVGQVVMVF8yNEhSXHJcbiAgICAgICksXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5mcmVxdWVuY3lfdGV4dCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5mcmVxdWVuY3lEYXRhKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHMgaW4gdGhlIHBvbGljeUZvcm1cclxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcclxuICAgKi9cclxuICBmcmVxdWVuY3lEYXRhKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGV2ZW50LnBhdHRlcm47XHJcbiAgICAodGhpcy5wb2xpY3lGb3JtLmZyZXF1ZW5jeV90ZXh0ID0gZXZlbnQucGxhY2Vob2xkZXIpLFxyXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLm1hcmtfZmFpbGVkX2FmdGVyID0gZXZlbnQuZmFpbGVkQWZ0ZXIpO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IGV2ZW50LndpbmRvdztcclxuICAgIHRoaXMucG9saWN5Rm9ybS5mYWlsZWRfdGltZSA9IGV2ZW50LnRpbWVJbjI0SHI7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzaWduZWVfc3RhcnRfZGF0ZSA9IG1vbWVudChldmVudC5zdGFydEZyb20gKiAxMDAwKS5mb3JtYXQoXHJcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXHJcbiAgICApO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCBmYWxzZSk7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcclxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXHJcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXHJcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcclxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXHJcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcclxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcclxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXHJcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlcixcclxuICAgIH07XHJcbiAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3B1bGF0ZXMgdGhlIGZyZXF1ZW5jeSBmaWVsZCB3aXRoIHNlbGVjdGVkIGRhdGEgZnJvbSBmcmVxdWVuY3kgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXHJcbiAgICovXHJcbiAgZnJlcXVlbmN5UG9wdWxhdGlvbihldmVudDogYW55KSB7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IGV2ZW50Py5yZW1pbmRlcl9iZWZvcmVfZGF5cztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID0gZXZlbnQ/Lm9uX2NvbXBsZXRpb25fb2ZbMF0gPz8gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPSAzO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGV2ZW50Py5wbGFjZWhvbGRlclxyXG4gICAgICA/IGV2ZW50LnBsYWNlaG9sZGVyXHJcbiAgICAgIDogJ0hvdyBvZnRlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgYXR0ZXN0ZWQ/JztcclxuICB9XHJcblxyXG4gIHJldmlld2VyRnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgLy9uZWVkcyB0byBkaXNjdXNzIHdpdGggYmFja2VuZCBhYm91dCBlZGl0IGFuZCBkZWZhdWx0IHZhbHVlc1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgcGF0dGVybjogZXZlbnQ/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscywgLy9cclxuICAgICAgd2luZG93OiBldmVudD8ucmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSxcclxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5yZXZpZXdGYWlsZWRBZnRlcixcclxuICAgICAgZmFpbGVkX3RpbWVfdXRjOiAnJyxcclxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgICB0aW1lSW4yNEhyOlxyXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwLFxyXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXHJcbiAgICAgICAgbmV3IERhdGUoZXZlbnQucmV2aWV3ZXJfc3RhcnRfZGF0ZSkuZ2V0VGltZSgpIC8gMTAwMFxyXG4gICAgICApLFxyXG4gICAgICBzdGFydERhdGU6ICcnLFxyXG4gICAgICByZXBvcnRJZDogMCxcclxuICAgICAgdGltZUluMTJocjogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKFxyXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSXHJcbiAgICAgICksXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5yZXZpZXdmcmVxdWVuY3lEZXRhaWxzLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIHJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKSB7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscyA9IHtcclxuICAgICAgcGF0dGVybjogJycsXHJcbiAgICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXHJcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxyXG4gICAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcclxuICAgICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXHJcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxyXG4gICAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcclxuICAgICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxyXG4gICAgICB3aW5kb3c6IDAsXHJcbiAgICAgIGZhaWxlZDogMCxcclxuICAgICAgdGltZTogREVGQVVMVF9USU1FLFxyXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcclxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogMyxcclxuICAgIH07XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfZGV0YWlscyA9ICcnO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfdHlwZSA9ICcnO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBERUZBVUxUXzI0SFI7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQgPyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCByZXZpZXdlciBmcmVxdWVuY3kgZGV0YWlscyBpbiB0aGUgcG9saWN5Rm9ybVxyXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBmcmVxdWVuY3kgZGV0YWlsc1xyXG4gICAqL1xyXG4gIHJldmlld2VyRnJlcXVlbmN5RGF0YShldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSBldmVudC5mYWlsZWRBZnRlcjtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfdHlwZSA9IGV2ZW50LnBhdHRlcm4uc3BsaXQoJ34nKVswXTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID0gZXZlbnQud2luZG93O1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBldmVudC50aW1lSW4yNEhyO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld2VyX3N0YXJ0X2RhdGUgPSBtb21lbnQoZXZlbnQuc3RhcnRGcm9tICogMTAwMCkuZm9ybWF0KFxyXG4gICAgICAnZGRkIE1NTSBERCBZWVlZJ1xyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgZmFsc2UpO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGV2ZW50LnBhdHRlcm4sXHJcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBldmVudC50aW1lSW4xMmhyLFxyXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZXZlbnQud2luZG93LFxyXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZXZlbnQuZmFpbGVkQWZ0ZXIsXHJcbiAgICAgIGxpZmVjeWNsZV9kZXRhaWxzOiBldmVudC5saWZlY3ljbGVEZXRhaWxzLFxyXG4gICAgICBzdGFydF9vZl9kYXlfdXRjOiBldmVudC5zdGFydEZyb20sXHJcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IFtldmVudC5yZXBvcnRJZF0sXHJcbiAgICAgIGRvbV91dGM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxyXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxyXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQucGxhY2Vob2xkZXIsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3B1bGF0ZXMgdGhlIHJldmlld2VyIGZyZXF1ZW5jeSBmaWVsZCB3aXRoIHNlbGVjdGVkIGRhdGEgZnJvbSBmcmVxdWVuY3kgY29tcG9uZW50XHJcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXHJcbiAgICovXHJcbiAgcmV2aWV3ZXJGcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnBhdHRlcm4gPSBldmVudD8uZnJlcXVlbmN5X2RldGFpbHM7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZmFpbGVkID0gZXZlbnQ/LmZhaWxlZF9hZnRlcl9kYXlzO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9XHJcbiAgICAgIGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDA7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xyXG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDM7XHJcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBldmVudD8ucGxhY2Vob2xkZXJcclxuICAgICAgPyBldmVudC5wbGFjZWhvbGRlclxyXG4gICAgICA6ICdXaGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSByZXZpZXdlZCA/JztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIHBvbGljeSBmb3JtXHJcbiAgICovXHJcbiAgdmFsaWRhdGVQb2xpY3koKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgfSwgMTAwKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWU7XHJcbiAgICBjb25zdCByZSA9IC8mbmJzcDt8PGJyPi9nO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUgPSBldmVudC5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpID09ICcnIHx8XHJcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICgoKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgfHwgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSAmJlxyXG4gICAgICAgICAgIXRoaXMuZ3JvdXBFbmFibGVkKSB8fFxyXG4gICAgICAgICAgKCgodGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fCB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMpIHx8XHJcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwRW5hYmxlZCkpKSB8fFxyXG4gICAgICAodGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJiAhdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSAmJlxyXG4gICAgICAgICghdGhpcy5ncm91cEVuYWJsZWQgfHxcclxuICAgICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5ncm91cEVuYWJsZWQpKSkgfHxcclxuICAgICAgKHRoaXMucG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICAodGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fCB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMpICYmXHJcbiAgICAgICAgdGhpcy5pc1Bhc3REYXRlKSB8fFxyXG4gICAgICAoIXRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID4gMCkgfHxcclxuICAgICAgKHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID09IDApIHx8XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09IDAgfHxcclxuICAgICAgKCF0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZhbF93b3JrZmxvdz8ubGVuZ3RoICYmXHJcbiAgICAgICAgIXRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoICYmXHJcbiAgICAgICAgdGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgPT09IDApIHx8XHJcbiAgICAgICh0aGlzLmZvcm1hdEV2aWRlbmNlICYmIHRoaXMuZm9ybWF0RXZpZGVuY2UubmV3TGluay5jb250YWluc0Vycm9yKSB8fFxyXG4gICAgICAhdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aCB8fFxyXG4gICAgICAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxyXG4gICAgICAgICh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ha2VzIGFuIGFwaSBjYWxsIHRvIGNyZWF0ZSBhIHBvbGljeVxyXG4gICAqIEBwYXJhbSBwb2xpY3kgY29udGFpbnMgcG9saWN5Rm9ybSBkYXRhXHJcbiAgICovXHJcbiAgc3VibWl0UG9saWN5KCkge1xyXG4gICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcclxuICAgIGNvbnN0IHZhbGlkID0gdGhpcy52YWxpZGF0ZVBvbGljeSgpO1xyXG4gICAgaWYgKCF2YWxpZCB8fCAhdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5ub1dvcmtmbG93U2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9saWN5ID0gdGhpcy5wb2xpY3lGb3JtO1xyXG4gICAgbGV0IGFwcHJvdmVyc0RhdGE6IGFueSA9IHRoaXMuY29udmVydEFwcHJvdmFsV29ya2Zsb3coXHJcbiAgICAgIHBvbGljeS5zZWxlY3RlZEFwcHJvdmVyc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBvbGljeS5wb2xpY3lEdWVEYXRlPy4kZCA/PyBwb2xpY3kucG9saWN5RHVlRGF0ZTtcclxuICAgIGxldCByZXZpZXdlckZpbGVzQXJyYXkgPSBjbG9uZURlZXAocG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzKTtcclxuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSByZXZpZXdlckZpbGVzQXJyYXkubWFwKChmaWxlOiBhbnkpID0+IHtcclxuICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlbmFtZTtcclxuICAgICAgZmlsZS5maWxlX3BhdGggPSBmaWxlLmZpbGVwYXRoO1xyXG4gICAgICBmaWxlLm9yZ19uYW1lID0gZmlsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGZpbGUuZmlsZW5hbWU7XHJcbiAgICAgIGRlbGV0ZSBmaWxlLmZpbGVwYXRoO1xyXG4gICAgICBkZWxldGUgZmlsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGZpbGUubGlua1NldDtcclxuICAgICAgcmV0dXJuIGZpbGU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgYXR0ZXN0YXRpb25GaWxlc0FycmF5ID0gY2xvbmVEZWVwKFxyXG4gICAgICBwb2xpY3kuYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlc1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGF0dGVzdGF0aW9uRmlsZXMgPSBhdHRlc3RhdGlvbkZpbGVzQXJyYXkubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBlbGUubmFtZSA9IGVsZS5maWxlbmFtZTtcclxuICAgICAgZWxlLmZpbGVfcGF0aCA9IGVsZS5maWxlcGF0aDtcclxuICAgICAgZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZSA9IGVsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZWxlLmZvbGRlcl9pZCA9IGVsZT8uZm9sZGVyX2lkID8gZWxlLmZvbGRlcl9pZCA6IDA7XHJcbiAgICAgIGVsZS5wYXRoID0gZWxlPy5wYXRoID8gZWxlLnBhdGggOiBlbGUuZmlsZXBhdGggKyBlbGUuZmlsZW5hbWU7XHJcbiAgICAgIGVsZS5pc0xpbmtTZXQgPSBlbGUubGlua1NldDtcclxuICAgICAgZWxlLm90aGVyX3R5cGUgPSBlbGU/Lm90aGVycztcclxuICAgICAgZGVsZXRlIGVsZS5maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGVsZS5maWxlcGF0aDtcclxuICAgICAgZGVsZXRlIGVsZS5vcmlnaW5hbF9maWxlbmFtZTtcclxuICAgICAgZGVsZXRlIGVsZS5saW5rU2V0O1xyXG4gICAgICBkZWxldGUgZWxlLmZpbGVfbmFtZTtcclxuICAgICAgZGVsZXRlIGVsZS5vdGhlcnM7XHJcbiAgICAgIHJldHVybiBlbGU7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHJldmlld2VySUQgPSB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSZXZpZXdlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgIGNvbnN0IHBvbGljeUFjY2Vzc1VzZXJzSWRzID1cclxuICAgICAgdGhpcy5yZXR1cm5JZHMocG9saWN5LnBvbGljeV9hY2Nlc3Nfb3duZXJzLCAnbWVtYmVyX2lkJykgPz8gW107XHJcbiAgICBjb25zdCBwb2xpY3lBY2Nlc3NHcm91cHNJZHMgPVxyXG4gICAgICB0aGlzLnJldHVybklkcyhwb2xpY3kucG9saWN5X2FjY2Vzc19ncm91cHMsICdfaWQnKSA/PyBbXTtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBwb2xpY3lfbmFtZTogcG9saWN5LnBvbGljeU5hbWUsXHJcbiAgICAgIG5vdGVzOiBwb2xpY3kucG9saWN5Tm90ZXMsXHJcbiAgICAgIGlzX3BvcnRhbF9lbmFibGU6IHBvbGljeS5hdmFpbGFibGVPblBvcnRhbCA/IDEgOiAwLFxyXG4gICAgICBpc19zdWdnZXRpb25fZW5hYmxlOiBwb2xpY3kuYWNjZXB0U3VnZ2VzdGlvbnMgPyAxIDogMCxcclxuICAgICAgY2F0ZWdvcnlfaWRfYXJyOiB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRDYXRlZ29yaWVzLCAnaXRlbV9pZCcpLFxyXG4gICAgICBhcHByb3ZlcnM6IGFwcHJvdmVyc0RhdGEsXHJcbiAgICAgIGFzc2lnbmVlX2lkczogcG9saWN5LnNlbGVjdGVkQWxsQXR0ZXN0b3JzID8gW10gOiB0aGlzLnJldHVybklkcyhcclxuICAgICAgICBwb2xpY3k/LnNlbGVjdGVkQXNzaWduZWVzLFxyXG4gICAgICAgICdlbXBsb3llZV9pZCdcclxuICAgICAgKS5tYXAoKGlkKSA9PiBOdW1iZXIoaWQpKSxcclxuICAgICAgdXNlcmdyb3VwX2lkczogdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkR3JvdXBBc3NpZ25lZSwgJ19pZCcpID8/IFtdLFxyXG4gICAgICBJc19hcHByb3ZhbDogMCwgLy9uZWVkcyB0byBjaGVjayBpbiBmZVxyXG5cclxuICAgICAgYXNzb2NpYXRlZF9kb2N1bWVudHM6IHBvbGljeS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXHJcbiAgICAgICAgPyBhdHRlc3RhdGlvbkZpbGVzXHJcbiAgICAgICAgOiBbXSxcclxuXHJcbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShwb2xpY3kuY3VzdG9tVGFncyksXHJcblxyXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgPyBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICA6ICcnLFxyXG4gICAgICBmcmVxdWVuY3lfdGV4dDogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZyZXF1ZW5jeV90ZXh0IDogJycsXHJcbiAgICAgIHJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgPyBwb2xpY3kucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXHJcbiAgICAgICAgOiAwLFxyXG4gICAgICBmYWlsZWRfdGltZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZhaWxlZF90aW1lIDogJycsXHJcbiAgICAgIG1hcmtfZmFpbGVkX2FmdGVyOiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICA/IHBvbGljeS5tYXJrX2ZhaWxlZF9hZnRlclxyXG4gICAgICAgIDogJycsXHJcbiAgICAgIC8vIHN0YXJ0RGF0ZTogcG9saWN5LnBvbGljeUR1ZURhdGUudG9EYXRlU3RyaW5nKCksXHJcbiAgICAgIHN0YXJ0RGF0ZTogbW9tZW50KHN0YXJ0RGF0ZSkuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVknKSxcclxuXHJcbiAgICAgIFJldmlld2VyQXR0YWNobWVudHM6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXNcclxuICAgICAgICAgID8gcmV2aWV3ZXJGaWxlc1xyXG4gICAgICAgICAgOiBbXSxcclxuICAgICAgUmV2aWV3ZXJMaW5rczpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rc1xyXG4gICAgICAgICAgPyBwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3NcclxuICAgICAgICAgIDogW10sXHJcbiAgICAgIFJldmlld2VyTWVtYmVySWQ6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiByZXZpZXdlcklEWzBdID8gcmV2aWV3ZXJJRFswXSA6IDAsXHJcbiAgICAgIGlzUmV2aWV3OlxyXG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiZcclxuICAgICAgICAgIChwb2xpY3kuZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0RmlsZXMgfHxcclxuICAgICAgICAgICAgcG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdExpbmtzKSAmJlxyXG4gICAgICAgICAgcmV2aWV3ZXJJRFswXVxyXG4gICAgICAgICAgPyAxXHJcbiAgICAgICAgICA6IDAsXHJcblxyXG4gICAgICByZXZpZXdGYWlsZWRBZnRlcjpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgID8gcG9saWN5LnJldmlld0ZhaWxlZEFmdGVyXHJcbiAgICAgICAgICA6IDAsXHJcbiAgICAgIHJldmlld0ZhaWxlZFRpbWU6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdGYWlsZWRUaW1lXHJcbiAgICAgICAgICA6ICcnLFxyXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6XHJcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgIDogJycsXHJcbiAgICAgIHJldmlld19mcmVxdWVuY3lfdHlwZTpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfdHlwZVxyXG4gICAgICAgICAgOiAnJyxcclxuICAgICAgcmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTpcclxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgID8gcG9saWN5LnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGVcclxuICAgICAgICAgIDogMCxcclxuXHJcbiAgICAgIGVudGl0aWVzOiB0aGlzLnBvbGljeUZvcm0/LmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVyc1xyXG4gICAgICAgID8gdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkUkNzLCAnaXRlbV9pZCcpLnRvU3RyaW5nKClcclxuICAgICAgICA6ICcnLFxyXG4gICAgICByaXNrX2NsYXNzOiBwb2xpY3kucmlza1JhdGluZy50b1N0cmluZygpLFxyXG5cclxuICAgICAgQ0NGYWlsRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcclxuICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHBvbGljeS5DQ0ZhaWxFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJykudG9TdHJpbmcoKVxyXG4gICAgICAgIDogJycsXHJcbiAgICAgIENDRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcclxuICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHBvbGljeS5DQ0VtYWlsLCAnZW1wbG95ZWVfZW1haWwnKS50b1N0cmluZygpXHJcbiAgICAgICAgOiAnJyxcclxuXHJcbiAgICAgIGNoZWNrcG9pbnREZXRhaWxzOiBwb2xpY3kuY2hlY2twb2ludERldGFpbHMgPz8gW10sXHJcbiAgICAgIHRvdGFsUXVlc3Rpb246IHBvbGljeS50b3RhbFF1ZXN0aW9uID8gcG9saWN5LnRvdGFsUXVlc3Rpb24gOiAwLCAvL1xyXG4gICAgICBwYXNzaW5nTWFya3M6IHBvbGljeS5wYXNzaW5nTWFya3MgPyBwb2xpY3kucGFzc2luZ01hcmtzIDogMCwgLy9cclxuXHJcbiAgICAgIHBvbGljeUFwcHJvdmFsRmxhZzogMCxcclxuXHJcbiAgICAgIGlzX3NpZ25hdHVyZV9yZXF1aXJlZDogcG9saWN5LnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb24gPyAxIDogMCxcclxuICAgICAgY2NfdXNlcmdyb3VwX2lkczogdGhpcy5jY0VtYWlsT2JqSWRzLFxyXG4gICAgICBjY19mYWlsX3VzZXJncm91cF9pZHM6IHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMsXHJcbiAgICAgIHJldmlld2VyX3N0YXJ0X2RhdGU6IHBvbGljeS5yZXZpZXdlcl9zdGFydF9kYXRlID8/ICcnLFxyXG4gICAgICBhc3NpZ25lZV9zdGFydF9kYXRlOiBwb2xpY3kuYXNzaWduZWVfc3RhcnRfZGF0ZSxcclxuICAgICAgcG9saWN5X3ZlcnNpb246IHBvbGljeS5hZGRWZXJzaW9uID8gcG9saWN5LnBvbGljeV92ZXJzaW9uIDogJycsXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHBvbGljeS5hZGRMaW5rQXNzZXNzbWVudFxyXG4gICAgICAgID8gcG9saWN5LmFzc2Vzc21lbnQubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogZWxlLmFzc2Vzc21lbnRfaWQsXHJcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOiBlbGUuY2F0ZWdvcnlfaWQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgOiBbXSxcclxuICAgICAgcG9saWN5X293bmVyczogdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMubWFwKFxyXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlLm1lbWJlcl9pZFxyXG4gICAgICApLFxyXG4gICAgICBhcHByb3ZhbF93b3JrZmxvd19pZDogcG9saWN5Py5zZWxlY3RlZEFwcHJvdmVyc1swXT8uX2lkXHJcbiAgICAgICAgPyBbcG9saWN5Py5zZWxlY3RlZEFwcHJvdmVyc1swXT8uX2lkXVxyXG4gICAgICAgIDogW10sXHJcbiAgICAgIGxpbmtQcm9ncmFtOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcclxuICAgICAgICA/IHBvbGljeT8ubGlua1Byb2dyYW1cclxuICAgICAgICA6IHtcclxuICAgICAgICAgIGFkZGVkOiBbXSxcclxuICAgICAgICAgIHJlbW92ZWQ6IFtdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIGJ1c2luZXNzX2N5Y2xlOiBPYmplY3Qua2V5cyhwb2xpY3k/LmxpbmtQcm9ncmFtKS5sZW5ndGhcclxuICAgICAgICA/IHBvbGljeT8uYnVzaW5lc3NDeWNsZVxyXG4gICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IHBvbGljeS5wb2xpY3lfYWNjZXNzX3R5cGUgPz8gMCxcclxuICAgICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IHBvbGljeS5hdmFpbGFibGVPblBvcnRhbFxyXG4gICAgICAgID8gW11cclxuICAgICAgICA6IHBvbGljeUFjY2Vzc1VzZXJzSWRzID8/IFtdLFxyXG4gICAgICBwb2xpY3lfYWNjZXNzX2dyb3VwczogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsXHJcbiAgICAgICAgPyBbXVxyXG4gICAgICAgIDogcG9saWN5QWNjZXNzR3JvdXBzSWRzID8/IFtdLFxyXG4gICAgICBkaXNwbGF5T25Qb3J0YWw6IHBvbGljeS5pc1BvcnRhbERpc3BsYXlFbmFibGVkID8/IGZhbHNlLFxyXG4gICAgICBsaW5rZWRQb2xpY2llczogWy4uLm5ldyBTZXQocG9saWN5LkxpbmtlZFBvbGljaWVzKV0sXHJcbiAgICAgIHNlbGVjdGVkQWxsQXR0ZXN0b3JzOiBwb2xpY3kuc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPyAxIDogMFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcclxuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlLnN1Ym1pdFBvbGljeShwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvbGljeUlkID0gcmVzLl9pZDtcclxuICAgICAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YT8uZmlsZU5hbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxpbmtEb2N1bWVudFdpdGhQb2xpY3kodGhpcy5jb252ZXJ0RmlsZURhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uVGVtcGxhdGVTZWxlY3QoW3sgX2lkOiB0aGlzLnRlbXBsYXRlSWQgfV0sIHRydWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAgICdhbGVydCdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgaWYgKHRoaXMucG9saWN5QXBwcm92YWxGbGFnICE9PSAwKSB7XHJcbiAgICAgICAgZGVsZXRlIHBheWxvYWQuYXBwcm92ZXJzO1xyXG4gICAgICAgIHBheWxvYWQucG9saWN5QXBwcm92YWxGbGFnID0gMjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UudXBkYXRlUG9saWN5KHBheWxvYWQsIHRoaXMucG9saWN5SWQpLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lJZCA9IHJlcy5faWQ7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZURvY3VtZW50cyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICAgICAgICdUaGUgcG9saWN5IGhhcyBiZWVuIHNlbnQgZm9yIGF0dGVzdGF0aW9uJyxcclxuICAgICAgICAgICAgICAgICdzdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdUaGUgcG9saWN5IGhhcyBiZWVuIHVwZGF0ZWQnLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9XHJcbiAgICAgICAgICAgICAgdGhpcy5iYXNlVVJMICsgJy9hbGwvcG9saWN5L3dvcmtyb29tP2lkPScgKyB0aGlzLnBvbGljeUlkO1xyXG4gICAgICAgICAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS93b3Jrcm9vbSddLCB7IHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XHJcbiAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcclxuICAgICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaW5rRG9jdW1lbnRXaXRoUG9saWN5KGRvY3VtZW50OiBhbnkpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZyA9ICcnO1xyXG4gICAgaWYgKFxyXG4gICAgICBkb2N1bWVudC5maWxlTmFtZSAmJlxyXG4gICAgICAoZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ3BkZicgfHxcclxuICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnUERGJyB8fFxyXG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdkb2N4JyB8fFxyXG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdET0NYJylcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2VcclxuICAgICAgICAuZXh0cmFjdEZpbGUoZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiwgZG9jdW1lbnQuZmlsZVBhdGgsIHRoaXMucG9saWN5SWQpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHRoaXMucG9saWN5SWQpIHtcclxuICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgPT09ICdkb25lJyB8fCByZXMuY29udGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ2RvY3gnIHx8XHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdET0NYJ1xyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIHVybCA9IHRoaXMuYmFzZVVSTCArIEFQSS5lZGl0UG9saWN5ICsgdGhpcy5wb2xpY3lJZDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdwZGYnIHx8XHJcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdQREYnXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgdXJsID0gdGhpcy5iYXNlVVJMICsgQVBJLmdvVG9Qb2xpY3lXb3Jrcm9vbSArIHRoaXMucG9saWN5SWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgICAgIFwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5LCBzaGFsbCB3ZT9cIixcclxuICAgICAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICBcIk9vcHMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB3ZSB3ZXJlIHVuYWJsZSB0byBjb21wbGV0ZSB0aGlzIGFjdGlvbi4gTGV0J3MgZ2l2ZSBpdCBhbm90aGVyIHRyeSwgc2hhbGwgd2U/XCIsXHJcbiAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogb3BlbnMgdGhlIGRhdGUgcGlja2VyIG9uIHBvbGljeSBmb3JtXHJcbiAgICovXHJcbiAgb3BlbkRhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgICAvLyB0aGlzLnNldEFjdGl2ZUZpZWxkU2VsZWN0b3IoJ0lTU1VFX0RBVEVfVElNRScsICdJU1NVRV9EQVRFX1RJTUUnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGNsb3NlcyB0aGUgZGF0ZSBwaWNrZXIgZnJvbSBwb2xpY3kgZm9ybVxyXG4gICAqL1xyXG4gIGNsb3NlRGF0ZVBpY2tlcihldnQ6IGFueSkge1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG5cclxuICAgIGlmICghZXZ0KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChldnQ/LmRhdGU/LiRkKSB7XHJcbiAgICAgIGxldCBtb250aEFycmF5ID0gW1xyXG4gICAgICAgICdKYW4nLFxyXG4gICAgICAgICdGZWInLFxyXG4gICAgICAgICdNYXInLFxyXG4gICAgICAgICdBcHInLFxyXG4gICAgICAgICdNYXknLFxyXG4gICAgICAgICdKdW4nLFxyXG4gICAgICAgICdKdWwnLFxyXG4gICAgICAgICdBdWcnLFxyXG4gICAgICAgICdTZXAnLFxyXG4gICAgICAgICdPY3QnLFxyXG4gICAgICAgICdOb3YnLFxyXG4gICAgICAgICdEZWMnLFxyXG4gICAgICBdO1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXREYXRlKCk7XHJcbiAgICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aEFycmF5W25ldyBEYXRlKGV2dD8uZGF0ZT8uJGQpLmdldE1vbnRoKCldO1xyXG4gICAgICBjb25zdCB5ZWFyVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZVZhbHVlfSAke21vbnRoVmFsdWV9ICR7eWVhclZhbHVlfWA7XHJcbiAgICB9XHJcbiAgICBpZiAoZXZ0Py5kYXRlPy4kZCkge1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSA9IGV2dD8uZGF0ZT8uJGQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8uY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGVkaXRQb2xpY3lGcm9tRG9jdW1lbnRzKCkge1xyXG4gICAgdGhpcy5tb2RlID0gJ0VESVQnO1xyXG4gICAgdGhpcy5zaGlmdFRvRWRpdE1vZGUuZW1pdCgpO1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gZmFsc2U7XHJcbiAgICB0aGlzLm5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdFBvbGljeSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tGb3JDcmVhdGVEb2N1bWVudHMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Nob3dDcmVhdGVEb2N1bWVudHMnKTtcclxuICAgIHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBkYXRhID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbikge1xyXG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Nob3dDcmVhdGVEb2N1bWVudHMnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRQb2xpY3koKSB7XHJcbiAgICB0aGlzLm1vZGUgPSAnRURJVCc7XHJcblxyXG4gICAgaWYgKHRoaXMucG9saWN5SWQpIHtcclxuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmVkaXRQb2xpY3kodGhpcy5wb2xpY3lJZCkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc1swXTtcclxuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWRzID0gZGF0YS5jYXRlZ29yeV9kZXRhaWxzX2Fyci5tYXAoXHJcbiAgICAgICAgICAgIChpZDogYW55KSA9PiBpZC5jYXRPYmpJZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMucG9saWN5QXBwcm92YWxGbGFnID0gZGF0YS5wb2xpY3lBcHByb3ZhbEZsYWc7XHJcbiAgICAgICAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBkYXRhPy5hcHByb3ZhbFdvcmtmbG93RGV0YWlscz8ubWFwKFxyXG4gICAgICAgICAgICAod29ya2Zsb3c6IGFueSkgPT4gd29ya2Zsb3c/Ll9pZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycyA9IGRhdGE/LmFwcHJvdmVycztcclxuICAgICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJXb3JrRmxvdyhjYXRlZ29yeUlkcywgZGF0YSk7XHJcbiAgICAgICAgICB0aGlzLmdldExpbmtlZFBvbGljaWVzKGRhdGE/Ll9pZCk7XHJcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9saWN5Rm9ybShkYXRhLCBjYXRlZ29yeUlkcyk7XHJcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvbGljeUFjY2Vzc0RldGFpbHMoZGF0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBvcHVsYXRlUG9saWN5Rm9ybShkYXRhOiBhbnksIGNhdGVnb3J5SWRzOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiRGF0YSBGb3IgZWRpdDo6IFwiLCBkYXRhKTtcclxuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSBkYXRhLlJldmlld2VyQXR0YWNobWVudHMubWFwKChmaWxlOiBhbnkpID0+IHtcclxuICAgICAgZmlsZS5maWxlbmFtZSA9IGZpbGUubmFtZTtcclxuICAgICAgZmlsZS5maWxlcGF0aCA9IGZpbGUuZmlsZV9wYXRoO1xyXG4gICAgICBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZS5vcmdfbmFtZTtcclxuICAgICAgZmlsZS5maWxlX25hbWUgPSBmaWxlLm9yZ19uYW1lO1xyXG4gICAgICBmaWxlLmxpbmtTZXQgPSAnJztcclxuICAgICAgZGVsZXRlIGZpbGUubmFtZTtcclxuICAgICAgZGVsZXRlIGZpbGUuZmlsZV9wYXRoO1xyXG4gICAgICBkZWxldGUgZmlsZS5vcmdfbmFtZTtcclxuXHJcbiAgICAgIHJldHVybiBmaWxlO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50cy5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIGVsZS5maWxlbmFtZSA9IGVsZS5uYW1lO1xyXG4gICAgICBlbGUuZmlsZXBhdGggPSBlbGUuZmlsZV9wYXRoO1xyXG4gICAgICBlbGUub3JpZ2luYWxfZmlsZW5hbWUgPSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xyXG4gICAgICBlbGUuZmlsZV9uYW1lID0gZWxlLm9yaWdpbmFsX2ZpbGVfbmFtZTtcclxuICAgICAgZWxlLmxpbmtTZXQgPSBlbGUuaXNMaW5rU2V0O1xyXG4gICAgICBlbGUub3RoZXJzID0gZWxlPy5vdGhlcl90eXBlO1xyXG5cclxuICAgICAgZGVsZXRlIGVsZS5uYW1lO1xyXG4gICAgICBkZWxldGUgZWxlLmZpbGVfcGF0aDtcclxuICAgICAgZGVsZXRlIGVsZS5vcmlnaW5hbF9maWxlX25hbWU7XHJcbiAgICAgIGRlbGV0ZSBlbGUuaXNMaW5rU2V0O1xyXG4gICAgICBkZWxldGUgZWxlPy5vdGhlcl90eXBlO1xyXG4gICAgICByZXR1cm4gZWxlO1xyXG4gICAgfSk7XHJcbiAgICBjb25zdCBncm91cF9lbXBsb3llZUlkcyA9IGRhdGEuZ3JvdXBfZW1wbG95ZWVOYW1lcy5tYXAoXHJcbiAgICAgIChpZDogYW55KSA9PiBpZD8uZW1wbG95ZWVfaWRcclxuICAgICk7XHJcbiAgICBjb25zdCBncm91cF9JZHMgPSBkYXRhPy51c2VyZ3JvdXBfaWRzPy5tYXAoKGlkOiBhbnkpID0+IGlkKSA/PyBbXTtcclxuXHJcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcclxuICAgICAgY2F0ZWdvcnlJZHMsXHJcbiAgICAgICdfaWQnXHJcbiAgICApO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9pZCA9IGRhdGE/LnBvbGljeV9pZDtcclxuICAgICh0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGRhdGEucG9saWN5X25hbWUpLFxyXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLnBvbGljeU5vdGVzID0gZGF0YS5ub3RlcyksXHJcbiAgICAgICh0aGlzLnBvbGljeUZvcm0uY3VzdG9tVGFncyA9IGRhdGEuY3VzdG9tX3RhZ3MgPyBkYXRhLmN1c3RvbV90YWdzIDogW10pO1xyXG5cclxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9ICghZGF0YT8uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgfHwgZGF0YT8uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPT0gMCkgJiYgIFxyXG4gICAgICBncm91cF9lbXBsb3llZUlkcy5sZW5ndGggPiAwXHJcbiAgICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCBncm91cF9lbXBsb3llZUlkcywgJ215X21lbWJlcl9pZCcpXHJcbiAgICAgICAgOiBbXTsgLy9kb3VidCBpbiBuYW1lXHJcblxyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZSA9XHJcbiAgICAgIGdyb3VwX0lkcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBncm91cF9JZHMsICdfaWQnKVxyXG4gICAgICAgIDogW107XHJcblxyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gZGF0YS5lbnRpdGllc1xyXG4gICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLnJjTGlzdCwgZGF0YS5lbnRpdGllcy5zcGxpdCgnLCcpLCAnaXRlbV9pZCcpXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSBkYXRhLkNDRmFpbEVtYWlsXHJcbiAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJzTGlzdCwgZGF0YS5DQ0ZhaWxFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJylcclxuICAgICAgOiBbXTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwID1cclxuICAgICAgZGF0YT8uY2NfZmFpbF91c2VyZ3JvdXBfaWRzPy5sZW5ndGggPiAwXHJcbiAgICAgICAgPyB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcclxuICAgICAgICAgIGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkcyxcclxuICAgICAgICAgICdfaWQnXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IGRhdGEuQ0NFbWFpbFxyXG4gICAgICA/IHRoaXMuc2V0TGlzdChcclxuICAgICAgICB0aGlzLm92ZXJzZWVyc0xpc3QsXHJcbiAgICAgICAgZGF0YS5DQ0VtYWlsLnNwbGl0KCcsJyksXHJcbiAgICAgICAgJ2VtcGxveWVlX2VtYWlsJ1xyXG4gICAgICApXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NHcm91cEVtYWlsID1cclxuICAgICAgZGF0YT8uY2NfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMFxyXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBkYXRhPy5jY191c2VyZ3JvdXBfaWRzLCAnX2lkJylcclxuICAgICAgICA6IFtdO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsID0gZGF0YS5lbmFibGVQb3J0YWwgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBkYXRhLmVuYWJsZVN1Z2dlc3Rpb24gPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvbiA9IGRhdGEuaXNfc2lnbmF0dXJlX3JlcXVpcmVkXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnJpc2tSYXRpbmcgPSBkYXRhLnJpc2tfY2xhc3MgPyBOdW1iZXIoZGF0YS5yaXNrX2NsYXNzKSA6IDE7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cyA9IGRhdGEuYXNzb2NpYXRlZF9kb2N1bWVudHNcclxuICAgICAgPyB7XHJcbiAgICAgICAgZm9ybWF0RmlsZXM6IGF0dGVzdGF0aW9uRmlsZXMsXHJcbiAgICAgIH1cclxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSB9O1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgPSBkYXRhLnN0YXJ0RGF0ZVxyXG4gICAgICA/IG1vbWVudChkYXRhLnN0YXJ0RGF0ZSlcclxuICAgICAgOiBtb21lbnQoKTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscyA9IGRhdGEuY2hlY2twb2ludHNcclxuICAgICAgPyBkYXRhLmNoZWNrcG9pbnRzXHJcbiAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0udG90YWxRdWVzdGlvbiA9IGRhdGEudG90YWxfbWFya3MgPyBkYXRhLnRvdGFsX21hcmtzIDogMDtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBkYXRhLnBhc3NfbWFya3MgPyBkYXRhLnBhc3NfbWFya3MgOiAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzID0gZGF0YS5SZXZpZXdlckF0dGFjaG1lbnRzXHJcbiAgICAgID8ge1xyXG4gICAgICAgIGZvcm1hdEZpbGVzOiByZXZpZXdlckZpbGVzLFxyXG4gICAgICAgIGZvcm1hdExpbmtzOiBkYXRhLlJldmlld2VyTGlua3MsXHJcbiAgICAgIH1cclxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSwgZm9ybWF0TGlua3M6IFtdIH07XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzID1cclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZGF0YS5SZXZpZXdlck1lbWJlcklkID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZENoZWNrcG9pbnRzID1cclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID1cclxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID1cclxuICAgICAgZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50cy5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgdGhpcy5jY0VtYWlsT2JqSWRzID1cclxuICAgICAgZGF0YT8uY2NfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMCA/IGRhdGE/LmNjX3VzZXJncm91cF9pZHMgOiBbXTtcclxuICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPVxyXG4gICAgICBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDBcclxuICAgICAgICA/IGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkc1xyXG4gICAgICAgIDogW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IGRhdGE/LmFzc2Vzc21lbnQgPz8gW107XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua0Fzc2Vzc21lbnQgPSBkYXRhPy5hc3Nlc3NtZW50Py5sZW5ndGg7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkVmVyc2lvbiA9IGRhdGE/LnBvbGljeV92ZXJzaW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5jaGVja0ZvckNyZWF0ZURvY3VtZW50cygpO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uID0gZGF0YS5wb2xpY3lfdmVyc2lvbjtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMucHJvZ3JhbSA9XHJcbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcclxuICAgICAgICA/IGRhdGE/LnByb2dyYW1DYXREZXRhaWxzWzBdXHJcbiAgICAgICAgOiB7fTtcclxuICAgIHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbSA9XHJcbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcclxuICAgICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YT8ucHJvZ3JhbUNhdERldGFpbHNbMF0pKVxyXG4gICAgICAgIDoge307XHJcbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uYWxGaWVsZHMoKTtcclxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPSBkYXRhLnNlbGVjdGVkQWxsQXR0ZXN0b3JzID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuICBjaGFuZ2VOYW1lKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIGxldCB0ZXh0ID0gZXZlbnQ7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC88KC4qPyk+L2dpLCAnJyk7XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIHR5cGVTZWxlY3RlZChldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJldmlld2VycyA9IGV2ZW50O1xyXG4gIH1cclxuICBvblZlcnNpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgcmVnZXhNYXRjaCA9IG5ldyBSZWdFeHAoJ15bQS1aYS16MC05XFxcXC4tXSokJyk7XHJcbiAgICB0aGlzLmlzVmVyc2lvblZhbGlkID0gcmVnZXhNYXRjaC50ZXN0KHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbik7XHJcbiAgICBpZiAoIXRoaXMuaXNWZXJzaW9uVmFsaWQpIHtcclxuICAgICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjApIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25FcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgJ1lvdXIgaW5wdXQgaXMgaW52YWxpZC4gVGhlIHZlcnNpb24gZmllbGQgY2FuIG9ubHkgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLiBUaGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgaXMgMjAgY2hhcmFjdGVycy4nO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmlzVmVyc2lvblZhbGlkICYmXHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbj8ubGVuZ3RoID4gMjBcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZlcnNpb25FcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3VyIGlucHV0IGlzIGludmFsaWQuIFRoZSBtYXhpbXVtIGNoYXJhY3RlciBsaW1pdCBpcyAyMCBjaGFyYWN0ZXJzLic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3RoaXMgZnVuY3Rpb24gcmVzcG9uc2libGUgd2hlbiB3ZSBjbGljayBvbiBkaXYgc2VsZWN0XHJcbiAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBldmVudDtcclxuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIGxpc3RDYW5jZWxDbGlja2VkKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcclxuICAgICAgLy8gdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtldmVudF07XHJcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBldmVudD8uX2lkID8gW2V2ZW50Py5faWRdIDogW107XHJcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtldmVudF07XHJcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlZFByb2dyYW1EZXRhaWxzKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5saW5rUHJvZ3JhbSA9IGV2ZW50Py5saW5rUHJvZ3JhbTtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSBldmVudD8uc2VsZWN0ZWRWYWx1ZXM7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYnVzaW5lc3NDeWNsZSA9IGV2ZW50Py5idXNpbmVzc0N5Y2xlO1xyXG4gICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcclxuICB9XHJcblxyXG4gIG9uQXNzZXNzbWVudFNlbGVjdChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IFtldmVudF07XHJcbiAgfVxyXG4gIGdldEFzc2Vzc21lbnREZXRhaWxzKGFzc2Vzc21lbnREZXRhaWxzOiBhbnksIHR5cGU/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXHJcbiAgICAgIC5nZXRBc3Nlc3NtZW50RGV0YWlsc0J5SUQoYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZClcclxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeURldGFpbHMgPSByZXNbMF0uY2F0ZWdvcnkuZmluZChcclxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuX2lkID09IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkLFxyXG4gICAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQsXHJcbiAgICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxyXG4gICAgICAgICAgICAgICAgYXNzZXNzbWVudF9uYW1lOiByZXNbMF0uYXNzZXNzbWVudF9uYW1lLFxyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiByZXNbMF0ucXVlc3Rpb25zQ291bnQsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjYXRlZ29yeV9kZXRhaWxzOiBjYXRlZ29yeURldGFpbHMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRPd25lcnNPbkxvYWQoKSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXHJcbiAgICAgIFt0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCldLFxyXG4gICAgICAnbWVtYmVyX2lkJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFwcHJvdmFsV29ya2Zsb3dBUElDYWxsKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBjb25zdCBvYmplY3RJZHMgPSB0aGlzLnJldHVybklkcyhcclxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLFxyXG4gICAgICAgICdfaWQnXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ2V0QXBwcm92ZXJXb3JrRmxvdyhvYmplY3RJZHMpO1xyXG4gICAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydEFwcHJvdmFsV29ya2Zsb3coYXBwcm92ZXJMaXN0OiBhbnkpIHtcclxuICAgIGxldCByZXR1cm5Kc29uOiBhbnkgPSB7fTtcclxuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXBwcm92ZXJMaXN0KSk7XHJcbiAgICBtb2RpZmllZERhdGE/LmZvckVhY2goKHdvcmtmbG93OiBhbnkpID0+IHtcclxuICAgICAgd29ya2Zsb3c/LmFwcHJvdmFsX3dvcmtmbG93Py5mb3JFYWNoKChhcHByb3ZlcjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleCArIDE7XHJcbiAgICAgICAgcmV0dXJuSnNvblsnbGV2ZWwnICsgaV0gPSBhcHByb3ZlcjtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5Kc29uO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTGV2ZWwoaW5kZXg6IGFueSkge1xyXG4gICAgLy8gQXBwcm92ZXIgTGV2ZWwgZGVsZXRlXHJcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICBmb3IgKFxyXG4gICAgICBsZXQgaSA9IGluZGV4O1xyXG4gICAgICBpIDwgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdy5sZW5ndGg7XHJcbiAgICAgIGkrK1xyXG4gICAgKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydsZXZlbDEnXSA9PT1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93W2luZGV4XVsnYWxpYXNfbmFtZSddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bXHJcbiAgICAgICAgICAnYWxpYXNfbmFtZSdcclxuICAgICAgICBdID0gYExldmVsICR7aSArIDF9YDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydsZXZlbDEnXSA9IGBMZXZlbCAke2kgKyAxXHJcbiAgICAgICAgfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0V29ya2Zsb3coZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdEFwcHJvdmFsV29ya2Zsb3cgPSBldmVudDtcclxuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIC8vRnVuY3Rpb24gcmVzcG9uc2libGUgd2hlbiB3ZSBjbGljayBvbiBDUkVBVEUgQSBORVcgQVBQUk9WQUwgV09SS0ZMT1dcclxuICBjcmVhdGVBcHByb3ZhbFdvcmtmbG93KCkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNsaWNrZWRDcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xyXG4gIH1cclxuXHJcbiAgZWRpdExldmVsQ2xpY2tlZChlZGl0TGV2ZWw6IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcclxuICAgIHRoaXMuZWRpdFdvcmtmbG93TGV2ZWwgPSB7XHJcbiAgICAgIGVkaXRMZXZlbDogZWRpdExldmVsLFxyXG4gICAgICBpbmRleDogaW5kZXgsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIHNldEFjY2Vzc0ZpZWxkKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPSBldmVudDtcclxuICAgIGlmIChldmVudCA9PSAwKSB7XHJcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMudXNlcnNBY2Nlc3NMaXN0O1xyXG4gICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsIHtcclxuICAgICAgICB1c2VyczogdGhpcy51c2Vyc0FjY2Vzc0xpc3QsXHJcbiAgICAgICAgZ3JvdXBzOiBbXSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRVc2Vyc0FjY2Vzc0xpc3RCeUNhdGVnb3J5KGNhdGVnb3J5RGV0YWlsczogYW55KSB7XHJcbiAgICBsZXQgdW5pcXVlVXNlcnM6IGFueSA9IFtdO1xyXG4gICAgbGV0IHVuaXF1ZUdyb3Vwc0lkOiBhbnkgPSBbXTtcclxuICAgIHVuaXF1ZVVzZXJzID0gdW5pcUJ5KFxyXG4gICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9tYW5hZ2Vycz8uY29uY2F0KFxyXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYWxsX2FwcHJvdmVycyxcclxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9hdXRob3JzXHJcbiAgICAgICksXHJcbiAgICAgICdtZW1iZXJfaWQnXHJcbiAgICApO1xyXG4gICAgdGhpcy51c2Vyc0FjY2Vzc0xpc3QgPSB1bmlxdWVVc2VycztcclxuICAgIHRoaXMudXNlcnNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy51c2Vyc0FjY2Vzc0xpc3QsICdtZW1iZXJfaWQnKTtcclxuXHJcbiAgICB1bmlxdWVHcm91cHNJZCA9IFtcclxuICAgICAgLi4ubmV3IFNldChcclxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmF1dGhvcl91c2VyZ3JvdXBfaWRzPy5jb25jYXQoXHJcbiAgICAgICAgICBjYXRlZ29yeURldGFpbHM/Lm93bmVyX3VzZXJncm91cF9pZHNcclxuICAgICAgICApXHJcbiAgICAgICksXHJcbiAgICBdO1xyXG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0ID0gdGhpcy5zZXRMaXN0KFxyXG4gICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcclxuICAgICAgdW5pcXVlR3JvdXBzSWQsXHJcbiAgICAgICdfaWQnXHJcbiAgICApO1xyXG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXHJcbiAgICAgIHRoaXMuZ3JvdXBzQWNjZXNzTGlzdCxcclxuICAgICAgJ2dyb3VwX2lkJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhwb2xpY3lEZXRhaWxzOiBhbnkpIHtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPSBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX3R5cGU7XHJcbiAgICBpZiAocG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXHJcbiAgICAgICAgdGhpcy51c2Vyc0xpc3QsXHJcbiAgICAgICAgcG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc19vd25lcnMsXHJcbiAgICAgICAgJ21lbWJlcl9pZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcclxuICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcclxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3VwcyxcclxuICAgICAgICAnX2lkJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCkge1xyXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX3R5cGUgPT0gMCkge1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSBbXTtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGcmVxdWVuY3koKSB7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSAnJztcclxuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9ICcnO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLm1hcmtfZmFpbGVkX2FmdGVyID0gMDtcclxuICAgIHRoaXMucG9saWN5Rm9ybS5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gJyc7XHJcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzaWduZWVfc3RhcnRfZGF0ZSA9ICcnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnBhdHRlcm4gPSAnJztcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gJyc7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9ICcnO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IDA7XHJcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSAwO1xyXG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMDtcclxuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxyXG4gICAgICAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF0ZVBpY2tlck9iamVjdCA9IHtcclxuICAgICAgZXZlbnQ6IGV2ZW50LFxyXG4gICAgICBjbGFzczogJ2VmZmVjdGl2ZS1kYXRlJyxcclxuICAgICAgcG9wdXA6IHRoaXMuZGF0ZVBpY2tlclBvcFVwLFxyXG4gICAgICBjb21wb25lbnQ6IHRoaXMuZGF0ZVBpY2tlcixcclxuICAgICAgb3ZlcmxheTogdGhpcy5kYXRlUGlja2VyT3ZlcmxheSxcclxuICAgIH07XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuaGFuZGxlRG9jdW1lbnRDbGljayhkYXRlUGlja2VyT2JqZWN0KTtcclxuICB9XHJcblxyXG4gIG9uVGVtcGxhdGVTZWxlY3QoZXZlbnQ6IGFueSwgaXNQcmVzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZXZlbnQ/Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlVmlldyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UudGVtcGxhdGVWaWV3Lm5leHQoZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IHVuYW1lID0gdGhpcy51c2VySW5mbyA/IHRoaXMudXNlckluZm8ubmFtZSA6ICcnO1xyXG4gICAgY29uc3QgdWlkID0gdGhpcy5tZW1iZXJfb2JqX2lkO1xyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lLnRyaW0oKTtcclxuICAgIGNvbnN0IGlkID0gdGhpcy5wb2xpY3lJZDtcclxuICAgIHRoaXMudGVtcGxhdGVJZCA9IGV2ZW50WzBdPy5faWQ7XHJcbiAgICB0aGlzLnBvbGljeVNlcnZpY2VcclxuICAgICAgLnNhdmVQb2xpY3lEZXRhaWxzKHVuYW1lLCB1aWQsIGlkLCBuYW1lLCAnJywgMClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25VcmwoKTtcclxuICAgICAgICBpZiAoaXNQcmVzZWxlY3RlZCkge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVGVtcGxhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0TmF2aWdhdGlvblVybCgpIHtcclxuICAgIGNvbnN0IGJhc1VybCA9XHJcbiAgICAgIHRoaXMuYmFzZVVSTCArXHJcbiAgICAgICcvYWxsL3BvbGljeS9lZGl0LXBvbGljeT9pZD0nICtcclxuICAgICAgdGhpcy5wb2xpY3lJZCArXHJcbiAgICAgICcmdGVtcGxhdGVJZD0nICtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUlkO1xyXG4gICAgdGhpcy50ZW1wbGF0ZVVybCA9IGJhc1VybDtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9UZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodGhpcy50ZW1wbGF0ZVVybCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNQYXN0RGF0ZSgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscz8uc3BsaXQoJ34nKTtcclxuXHJcbiAgICBpZihmcmVxdWVuY3lbMF0gPT09ICcwJykge1xyXG4gICAgICBjb25zdCBteURhdGUgPSBmcmVxdWVuY3lbMV0gKyAnLScgKyBmcmVxdWVuY3lbMl0gKyAnLScgKyBmcmVxdWVuY3lbM107XHJcbiAgICAgICByZXR1cm4gdGhpcy5kYXRlVXRpbGl0eVNlcnZpY2UuaXNQYXN0RGF0ZShteURhdGUpO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKGV2ZW50PzogYW55KSB7XHJcbiAgICBsZXQgcGFnZTogbnVtYmVyID0gZXZlbnQ/LnBhZ2UgfHwgMSxcclxuICAgIHNlYXJjaEtleTogc3RyaW5nID0gZXZlbnQ/LnNlYXJjaEtleS50b0xvd2VyQ2FzZSgpLnRyaW0oKSB8fCAnJyxcclxuICAgIHBhZ2luYXRpb25UeXBlOiBzdHJpbmcgPSAnbWVkaXVtJztcclxuICAgIFxyXG4gICAgaWYoc2VhcmNoS2V5Lmxlbmd0aCA9PT0gMCAmJnRoaXMuaXNDYWNoZWREYXRhKHBhZ2UudG9TdHJpbmcoKSkpIHtcclxuICAgICAgbGV0IGNhY2hlZERhdGEgPSB0aGlzLnBhZ2luYXRlZFVzZXJzQ2FjaGUuZ2V0KHBhZ2UudG9TdHJpbmcoKSk7XHJcbiAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbk9wdGlvbnMoY2FjaGVkRGF0YSwgJycpO1xyXG4gICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMucGFnaW5hdGVkVXNlcnNMaXN0Wydsb2FkaW5nJ10gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucGFnaW5hdGVkVXNlcnNMaXN0Wydsb2FkaW5nJ10gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzV2l0aFBhZ2luYXRpb24ocGFnZSwgc2VhcmNoS2V5LCBwYWdpbmF0aW9uVHlwZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3VjY2VzcyAmJiByZXM/LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYoc2VhcmNoS2V5Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnaW5hdGVkVXNlcnNDYWNoZS5zZXQocGFnZS50b1N0cmluZygpLCByZXM/LmRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbk9wdGlvbnMocmVzPy5kYXRhLCBzZWFyY2hLZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy51c2Vyc0xpc3RMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRlZFVzZXJzTGlzdCA9IHt9O1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRlZFVzZXJzTGlzdFsnbG9hZGluZyddID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRlZFVzZXJzTGlzdFsnc2VhcmNoS2V5J10gPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoUGFnaW5hdGVkVXNlcnNMaXN0KCkge1xyXG4gICAgdGhpcy5wYWdpbmF0ZWRVc2Vyc0xpc3RbJ3NlYXJjaEtleSddID0gJyc7XHJcbiAgICB0aGlzLmdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKHsgcGFnZTogMSwgc2VhcmNoS2V5OiAnJyB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2luYXRpb25PcHRpb25zKGRhdGE6IGFueSwgc2VhcmNoS2V5OiBzdHJpbmcpIHtcclxuICAgIHRoaXMucGFnaW5hdGVkVXNlcnNMaXN0ID0ge1xyXG4gICAgICB1c2VyczogZGF0YT8udXNlcnMsXHJcbiAgICAgIHRvdGFsX3BhZ2VzOiBkYXRhPy50b3RhbFBhZ2VzLFxyXG4gICAgICB0b3RhbF9pdGVtczogZGF0YT8udG90YWxVc2VycyxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgIGZyb206IGRhdGE/LmRpc3BsYXlGcm9tLFxyXG4gICAgICB0bzogZGF0YT8uZGlzcGxheVRvLFxyXG4gICAgICBzZWFyY2hLZXk6IHNlYXJjaEtleSxcclxuICAgICAgdG90YWw6IGRhdGE/LnRvdGFsVXNlcnNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQWxsQXR0ZXN0b3JzVG9nZ2xlKHNlbGVjdGVkOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBoYXNQcmVzZWxlY3RlZEFzc2lnbmVlcyA9IFxyXG4gICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwO1xyXG5cclxuICAgIGlmKHNlbGVjdGVkICYmIGhhc1ByZXNlbGVjdGVkQXNzaWduZWVzKSB7XHJcbiAgICAgIC8vIFNob3cgY29uZmlybWF0aW9uIGRpYWxvZyBiZWZvcmUgc3dpdGNoaW5nXHJcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0QWxsQWxlcnRDb21wb25lbnQsIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBtZXNzYWdlOiBgVGhpcyBhY3Rpb24gd2lsbCA8c3BhbiBjbGFzcz1cInZ4LWZ3LTUwMFwiPnJlbW92ZTwvc3Bhbj4gdGhlIHNlbGVjdGVkIHVzZXJzIGZyb20gYXR0ZXN0YXRpb24gYW5kIGFzc2lnbiBhdHRlc3RhdGlvbiB0byBhbGwgdXNlcnMuYCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiAnQ0VOVEVSJyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAnYmxhY2snLFxyXG4gICAgICB9KTtcclxuICAgICAgXHJcbiAgICAgIHJlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzID0gcmVzID8/IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAvLyBVc2VyIGNvbmZpcm1lZDogcHJvY2VlZCB3aXRoIHNlbGVjdGluZyBhbGwgdXNlcnNcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxVc2VycyhzZWxlY3RlZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gTm8gcHJlc2VsZWN0ZWQgYXNzaWduZWVzIG9yIHR1cm5pbmcgT0ZGOiBwcm9jZWVkIGRpcmVjdGx5XHJcbiAgICAgIHRoaXMuc2VsZWN0QWxsVXNlcnMoc2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnMgPSBzZWxlY3RlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzQ2FjaGVkRGF0YShwYWdlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2luYXRlZFVzZXJzQ2FjaGUuaGFzKHBhZ2UudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RBbGxVc2VycyhzZWxlY3RlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzID0gc2VsZWN0ZWQ7XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgLy8gRGVzZWxlY3QgYWxsIGN1cnJlbnRseSBzZWxlY3RlZCBhc3NpZ25lZXMgYW5kIGdyb3Vwc1xyXG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBc3NpZ25lZXMgPSBbXTtcclxuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZSA9IFtdO1xyXG4gIFxyXG4gICAgICAvLyBLZWVwIHRoZSBkZXJpdmVkIGxpc3RzIGluIHN5bmNcclxuICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoUGFnaW5hdGVkVXNlcnNMaXN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIiwiPCEtLSA8cD53b3JrZmxvdy1wb2xpY3kgd29ya3MhPC9wPiAtLT5cclxuXHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0NyZWF0ZURvY3VtZW50c1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJ3b3JrZmxvdy1wb2xpY3lcIj5cclxuICAgIDwhLS0gUG9saWN5IE5hbWUgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeU5hbWVcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLndoYXRcIiBhbHQ9XCJuYW1lXCIgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucG9saWN5TmFtZSB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ25hbWUnXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeU5hbWUgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiIGNsYXNzPVwiY2hlY2tJY29uXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cclxuICAgICAgICAgICAgUG9saWN5IE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGtleWRvd24pPVwiYWN0aXZlU2VsZWN0b3IgPSAnbmFtZSdcIiAoZm9jdXNpbik9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5TmFtZSA9PSAnJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ25hbWUnXCJcclxuICAgICAgICAgICAgKGZvY3Vzb3V0KT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLCBmYWxzZSlcIiBbbmdNb2RlbF09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUgPSBjaGFuZ2VOYW1lKCRldmVudClcIiBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBwb2xpY3lcIiAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUubGVuZ3RoICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7IHBvbGljeUZvcm0ucG9saWN5TmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8cCAqbmdJZj1cInN1Ym1pdHRlZCAmJiAhcG9saWN5Rm9ybS5wb2xpY3lOYW1lLnRyaW0oKVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICBQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIHBvbGljeS5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDx2Y29tcGx5LWVkaXRvciBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5Tm90ZXNcIiBbZWRpdG9yQ29uZmlnXT1cImRlc2NyaXB0aW9uXCI+PC92Y29tcGx5LWVkaXRvcj5cclxuICAgICAgICAgIDwhLS0gPGFwcC1jcy1zd2l0Y2hcclxuICAgICAgICAgICAgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsXCJcclxuICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwiYXZhaWxhYmlsaXR5T25Qb3J0YWwoJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIERvIHlvdSB3YW50IHRoaXMgcG9saWN5IHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgcG9ydGFsP1xyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgJ1RoZSBwb2xpY2llcyB0aGF0IHlvdSBpbnRlbmQgdG8gbWFrZSBhY2Nlc3NpYmxlIHRvIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uIGNhbiBiZSBhZGRlZCB0byB0aGUgcG9saWN5IHBvcnRhbC4gSXQgaXMgbGlrZSBhIHNoYXJlZCBjYXRhbG9nIG9mIGFsbCBhY3RpdmUgJiB1cGRhdGVkIHBvbGljaWVzIHRoYXQgYW55IGxvZ2dlZCBpbiB1c2VyIGNhbiByZWFkL2Rvd25sb2FkIGZvciByZWZlcmVuY2UuJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgPiYjeGU5MzI7PC9pXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvYXBwLWNzLXN3aXRjaD5cclxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoXHJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbFwiXHJcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9uc1wiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIEFjY2VwdCBzdWdnZXN0aW9uc1xyXG4gICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxyXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxyXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcclxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgPiYjeGU5MzI7PC9pXHJcbiAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2g+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUG9saWN5IENhdGVnb3J5IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NhdGVnb3J5J1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2F0ZWdvcnknICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2NhdGVnb3J5J1xyXG4gICAgICAgICAgXCIgW3NyY109XCJBU1NFVFMuY2FzZV9jYXRlZ29yeVwiIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2F0ZWdvcnknXHJcbiAgICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5Qb2xpY3kgQ2F0ZWdvcnkgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2F0ZWdvcnknLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgYSBjYXRlZ29yeSBmb3IgdGhpcyBwb2xpY3kuXCIgcmVhZG9ubHkgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMCwgMSlcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZSgnY2F0ZWdvcnknLCBjYXRlZ29yeSlcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJjYXRlZ29yeS5pdGVtX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgY2F0ZWdvcnkuaXRlbV9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMVwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJjYXRlZ29yeS5wb3BvdmVyKClcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMSkubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGg+MVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnBsdXNdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGg+MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDAsMilcIj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JyxjYXRlZ29yeSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjYXRlZ29yeS5pdGVtX25hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMlwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJjYXRlZ29yeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3twb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/LnNsaWNlKDIpLmxlbmd0aH19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5J1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjYXRlZ29yeScsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2NhdGVnb3J5IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcnkgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjYXRlZ29yeScsIGNhdGVnb3J5KVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgY2F0ZWdvcnkuaXRlbV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMFwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IHRoZSBjYXRlZ29yeSBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5jdXN0b21UYWdzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgcG9saWN5Rm9ybT8uY3VzdG9tVGFnc1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LW10LTJcIj57eyB0YWcudGFnbmFtZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwidGFnLnZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7eyB0YWcudGFnbmFtZSB9fVwiIC8+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEVmZmVjdGl2ZSBEYXRlIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMud2hlblwiIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJmYWxzZVwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkVmZmVjdGl2ZSBEYXRlPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXRpbWUtcGlja2VyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZXItZ3JvdXBcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiByZWFkb25seSBwbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgZWZmZWN0aXZlIGRhdGUgb2YgdGhlIHBvbGljeS5cIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSB8IGRhdGUgOiAnZGQgTU1NIHl5eXknXCIgKGNsaWNrKT1cIm9wZW5EYXRlUGlja2VyKClcIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJlZmZlY3RpdmUtZGF0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MmQ7PC9pPlxyXG4gICAgICAgICAgICAgIDxkcC1kYXRlLXBpY2tlciAjZGF0ZVBpY2tlciAob25TZWxlY3QpPVwiZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTsgY2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRlQ29uZmlnXCIgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGVcIj5cclxuICAgICAgICAgICAgICA8L2RwLWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1vdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRGF0ZVBpY2tlcigkZXZlbnQpXCIgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUG9saWN5IE93bmVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ293bmVycydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ293bmVycycgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCIgW3NyY109XCJBU1NFVFMuaW1fY3JlYXRpbmdcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlBPTElDWSBPV05FUihTKTwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3duZXJzJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XHJcbiAgICAgICAgICAgICAgU2VsZWN0IG93bmVycyBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKCdvd25lcnMnLCBwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzWzBdLCAwKVwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnNbMF0/Lm1lbWJlcl9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnNbMF0/Lm1lbWJlcl9uYW1lIH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzPy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJwb2xpY3lVc2VyUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICsge3sgcG9saWN5Rm9ybT8ucG9saWN5X293bmVycy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmFsc2VcIiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMSB2eC1tci0xXCI+XHJcbiAgICAgICAgICAgICAgICAmXHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZhbHNlXCIgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCInU2FtYW50aGEgSm9uZXMnXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlNhbWFudGhhIEpvbmVzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJwb2xpY3lHcm91cFBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgKzRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcG9saWN5VXNlclBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb3duZXIgb2YgcG9saWN5Rm9ybT8ucG9saWN5X293bmVycyB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiIFthcHBUb29sdGlwXT1cIm93bmVyPy5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoJ293bmVycycsIG93bmVyLCBpICsgMSlcIiBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3duZXI/Lm1lbWJlcl9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcG9saWN5R3JvdXBQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbMSwgMSwgMSwgMSwgMSwgMSwgMV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwiJ0hhcnNodmFyZGhhbiBLYXJpd2FsYSdcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgSGFyc2h2YXJkaGFuIEthcml3YWxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3duZXJzJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cCAqbmdJZj1cInN1Ym1pdHRlZCAmJiAhcG9saWN5Rm9ybT8ucG9saWN5X293bmVycz8ubGVuZ3RoXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIFNlbGVjdCBvd25lcnMgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUmV2aWV3IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1xyXG4gICAgICBcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCIhcG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCIgW3NyY109XCJBU1NFVFMucmV2aWV3ZXJcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UkVWSUVXPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXZpZXdTZWxlY3Rpb24gdngtcC0zIHZ4LXBiLTBcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1tYi0xXCI+XHJcbiAgICAgICAgICAgICAgRG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkP1xyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGFwcC1jcy1yYWRpbyBuYW1lPVwicmV2aWV3LXR5cGVcIiBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIiAoY2hlY2tlZEV2ZW50KT1cInR5cGVTZWxlY3RlZCh0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0zXCI+XHJcbiAgICAgICAgICAgICAgICBZRVNcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9hcHAtY3MtcmFkaW8+XHJcbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gbmFtZT1cInJldmlldy10eXBlXCIgW2NoZWNrZWRdPVwiIXBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiIChjaGVja2VkRXZlbnQpPVwidHlwZVNlbGVjdGVkKGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0zXCI+XHJcbiAgICAgICAgICAgICAgICBOT1xyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2FwcC1jcy1yYWRpbz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+UkVWSUVXRVI8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMFwiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcclxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICAgICAgICAgIFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XHJcbiAgICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgcmV2aWV3aW5nIHRoaXMgcG9saWN5XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJ1wiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInICYmXHJcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmV2aWV3ZXIgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnNcIj5cclxuICAgICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiJ1NhbWFudGhhIEpvbmVzJ1wiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcmV2aWV3ZXI/Lm1lbWJlcl9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LW10LTNcIj5SRVZJRVcgRlJFUVVFTkNZPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyA9PSAnJ1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcclxuICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXHJcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgICAgICAgICBcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCdXR0b25QbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgICAgV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWRzIHRvIGJlIHJldmlld2VkP1xyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICBTRVQgQSBGUkVRVUVOQ1lcclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXHJcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgICAgICAgICBcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFRleHQgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dFwiIFthcHBUb29sdGlwXT1cInJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAge3sgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8cCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgc3VibWl0dGVkICYmXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xyXG4gICAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgIFNlbGVjdCB0aGUgcmV2aWV3IHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeS5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBOZXcgQXBwcm92YWwgV29ya2Zsb3cgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1xyXG4gICAgICAgICAgXCIgW3NyY109XCJBU1NFVFMuYXBwcm92YWxcIiBhbHQ9XCJpbVwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnXHJcbiAgICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XHJcbiAgICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCIgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkFQUFJPVkFMIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgY3JlYXRlQXBwcm92YWxXb3JrZmxvdygpOyBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKVxyXG4gICAgICAgICAgICAgIFwiIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3JlYXRlTmV3QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMFwiPlxyXG4gICAgICAgICAgICAgIENSRUFURSBBIE5FVyBBUFBST1ZBTCBXT1JLRkxPV1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICAgICFzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXHJcbiAgICAgICAgICAgIFwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICBjbGlja0FwcHJvdmFsV29ya2Zsb3codHJ1ZSk7IGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cclxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZVxyXG4gICAgICAgICAgICBcIiBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LW1iLTJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW10LTIgdngtbWItMlwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlV29ya2Zsb3coKVwiIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0V29ya2Zsb3coc2VsZWN0ZWRXb3JrZmxvd1swXSlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgIGxldCBhcHByb3ZhbCBvZiBzZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdztcclxuICAgICAgICAgICAgICAgIGxldCBhcHByb3ZhbEluZGV4ID0gaW5kZXhcclxuICAgICAgICAgICAgICBcIiBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW1iLTJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxldmVsLWxlZnQgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZXZlbC1uYW1lIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LWxoLTNcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFsaWFzX25hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFwcHJvdmFsPy5hbGlhc19uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8ubGV2ZWwxXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFsaWFzX25hbWVcclxuICAgICAgICAgICAgICAgICAgICAgID8gYXBwcm92YWw/LmFsaWFzX25hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LmxldmVsMVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZnMtOSB2eC1mdy01MDAgdngtbGFiZWwtdHh0IHZ4LXR0LXVwcGVyY2FzZSB2eC1saC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LnR5cGUgPT09IFwiUk9VTkRST0JJTlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiUk9VTkQtUk9CSU5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8udHlwZSA9PT0gXCJBTllPTkVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPyBcIkFOWSBPTkVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8udHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yIHZ4LW1sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXHJcbiAgICAgICAgICAgICAgICAgID4gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCcgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA8IDJcclxuICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyAxID09IGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA/IFwiRmluYWxcIiA6IDEgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcclxuICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImFwcHJvdmFsPy5hcHByb3ZlcnNbMF0/Lm1lbWJlcl9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzWzBdPy5tZW1iZXJfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwid29ya2Zsb3dQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgK3t7IGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjd29ya2Zsb3dQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwcm92ZXIgb2YgYXBwcm92YWw/LmFwcHJvdmVycyB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWxJbmRleCA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCIgW2FwcFRvb2x0aXBdPVwiYXBwcm92ZXI/Lm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LnR5cGU/LnRvTG93ZXJDYXNlKCkgPT09ICdzZXF1ZW50aWFsJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbEluZGV4ICsgMSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiRmluYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsSW5kZXggKyAyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXBwcm92ZXI/Lm1lbWJlcl9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0TGV2ZWxDbGlja2VkKGFwcHJvdmFsLGFwcHJvdmFsSW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZGVsZXRlTGV2ZWwoYXBwcm92YWxJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZUJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWwtNCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+IERFTEVURVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcclxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmFsX3dvcmtmbG93Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgICAhcG9saWN5QXBwcm92YWxGbGFnICYmXHJcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aFxyXG4gICAgICAgICAgICBcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgU2VsZWN0IG9yIGNyZWF0ZSBhbiBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQb2xpY3kgQWNjZXNzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInRydWVcIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3BvbGljeUFjY2VzcydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3BvbGljeUFjY2VzcycgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJcclxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggJiZcclxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXHJcbiAgICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5sb2NrX3Njb3BlXCIgYWx0PVwiXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggfHxcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcclxuICAgICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5QT0xJQ1kgUE9SVEFMIEFDQ0VTUzwvbGFiZWw+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXHJcbiAgICAgICAgICAgIFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cclxuICAgICAgICAgICAgICBXaG8gc2hvdWxkIGJlIGFibGUgdG8gdmlldyB0aGlzIHBvbGljeT9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItM1wiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW10LTIgdngtbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbGljeUFjY2VzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcclxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJwb2xpY3lBY2Nlc3NQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAmXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDFcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXNzR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzWzBdPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzWzBdPy5ncm91cF9uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiYWNjZXNzR3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHMubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcG9saWN5QWNjZXNzUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJ1c2VyPy5lbXBsb3llZV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3BvbGljeUFjY2VzcycsIHVzZXIpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHVzZXI/LmVtcGxveWVlX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjYWNjZXNzR3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYWNjZXNzR3JvdXAnLCBkYXRhKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncG9saWN5QWNjZXNzJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ2eC1tdC00IHZ4LW1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cclxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3BvbGljeUZvcm1BY2Nlc3NUeXBlJ1wiIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMFwiIChjaGVja2VkRXZlbnQpPVwic2V0QWNjZXNzRmllbGQoMClcIlxyXG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHRcIj5cclxuICAgICAgICAgICAgICAgICAgICBFdmVyeW9uZSB3aG8gaGFzIGFjY2VzcyB0byB0aGlzIFBvbGljeSBDYXRlZ29yeVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj48L2FwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xyXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCIncG9saWN5Rm9ybUFjY2Vzc1R5cGUnXCIgW2NoZWNrZWRdPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCIgKGNoZWNrZWRFdmVudCk9XCJzZXRBY2Nlc3NGaWVsZCgxKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LW10LTFcIlxyXG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHRcIj5cclxuICAgICAgICAgICAgICAgICAgICBTZWxlY3QgdXNlcnMvZ3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PjwvYXBwLWNzLXJhZGlvXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0XCI+VmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyczwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3BvbGljeUFjY2VzcycsIHRydWUpXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXQgdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsIHx8XHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoXHJcbiAgICAgICAgICAgICAgXCIgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLmFjY2VwdFN1Z2dlc3Rpb25zXCI+QUNDRVBUIFNVR0dFU1RJT05TXHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xyXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgZGVsYXk9XCIwXCIgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTFmOzwvaT48L2FwcC1jcy1zd2l0Y2g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIEFwcHJvdmFsIFdvcmtmbG93IC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJmYWxzZVwiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID09IDAgfHxcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXHJcbiAgICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5hcHByb3ZhbFwiIGFsdD1cImltXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycydcclxuICAgICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cCBhcHByb3ZhbC13b3JrZmxvd1wiIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lBcHByb3ZhbEZsYWcgIT09IDBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cclxuICAgICAgICAgICAgQXBwcm92YWwgd29ya2Zsb3cgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBhZGRNb3JlTGV2ZWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xyXG4gICAgICAgICAgICAgIFwiIGNsYXNzPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgQ3JlYXRlIGEgbmV3IEFwcHJvdmFsIFdvcmtmbG93XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiBbY2xhc3MuZGlzYWJsZWRdPVwiYXBwcm92ZXJXb3JrRmxvd0xpc3Q/Lmxlbmd0aCA9PSAwXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8Y3Mtc2VsZWN0IFtuZ01vZGVsXT1cInNlbGVjdGVkQXBwcm92YWxXb3JrZmxvd1wiIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkV29ya2Zsb3dDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5J1wiIG5hbWU9XCJzZWxlY3RlZEFwcHJvdmFsV29ya2Zsb3dcIlxyXG4gICAgICAgICAgICAgIFtzZXRNYXhXaWR0aF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgPGNzLW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcHByb3ZlcldvcmtGbG93TGlzdFwiIFt2YWx1ZV09XCJkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhLndvcmtmbG93X25hbWUgfX1cclxuICAgICAgICAgICAgICA8L2NzLW9wdGlvbj5cclxuICAgICAgICAgICAgICA8Y3Mtb3B0aW9uIFt2YWx1ZV09XCItMVwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICB3b3JrZmxvd1R5cGUgPSAnU0VRVUVOVElBTCdcclxuICAgICAgICAgICAgICAgIFwiPkNyZWF0ZSBhIG5ldyBhcHByb3ZhbCB3b3JrZmxvdzwvY3Mtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L2NzLXNlbGVjdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nRm9yPVwibGV0IGxldmVsIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpdGxlXCI+TGV2ZWwge3sgaSArIDEgfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImRlc2NyaXB0aW9uXCI+e3sgbGV2ZWwubmFtZSB9fTwvcD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGxldmVsLmFwcHJvdmVycy5zbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgICBcIj48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXBwcm92ZXJzJywgYXBwcm92ZXIsIGkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdGVwXCIgKm5nSWY9XCJsZXZlbC5uYW1lID09ICdTRVFVRU5USUFMJ1wiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICBqICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+e3sgYXBwcm92ZXIubWVtYmVyX25hbWUgfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cImxldmVsLmFwcHJvdmVycz8ubGVuZ3RoID4gMVwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxhYmVsTmFtZS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgK1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7eyBsZXZlbC5hcHByb3ZlcnMuc2xpY2UoMSkubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2xhYmVsTmFtZSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwcm92ZXIgb2YgbGV2ZWwuYXBwcm92ZXJzIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXBwcm92ZXJzJywgYXBwcm92ZXIsIGkpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RlcFwiICpuZ0lmPVwibGV2ZWwubmFtZSA9PSAnU0VRVUVOVElBTCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPT0gbGV2ZWwuYXBwcm92ZXJzLnNsaWNlKDEpLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiRmluYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaiArIDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFwcHJvdmVyLm1lbWJlcl9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSwgbGV2ZWwubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBwcm92ZXJzTGlzdEluZGV4ID0gaVxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNsb3NlLWJ0blwiIChjbGljayk9XCJyZW1vdmUoJ3dvcmtmbG93TGV2ZWwnLCBsZXZlbCwgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcclxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICFwb2xpY3lBcHByb3ZhbEZsYWdcclxuICAgICAgICAgICAgXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XHJcbiAgICAgICAgICAgIFNlbGVjdCBvciBjcmVhdGUgYW4gYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgPC9wPlxyXG5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIiAqbmdJZj1cInBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/LmFwcHJvdmVycz8ubGVuZ3RoID4gMFwiPjxidXR0b25cclxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgYWRkTW9yZUxldmVscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3b3JrZmxvd1R5cGUgPSAnU0VRVUVOVElBTCdcclxuICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICArIEFkZCBNb3JlIExldmVsc1xyXG4gICAgICAgICAgICA8L2J1dHRvbj48L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gV2hvIC8gbm93IEF0dGVzdGF0aW9uIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcycgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCB8fFxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcclxuICAgICAgICAgIFwiIFtzcmNdPVwiQVNTRVRTLmNhc2VfYXNzaWduZWVzXCIgYWx0PVwiaW1cIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJ1xyXG4gICAgICAgICAgXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QXR0ZXN0YXRpb248L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1tYi0yXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmICFncm91cEVuYWJsZWQpIHx8XHJcbiAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkICYmXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzID8gJ0FsbCB1c2VycyBoYXZlIGJlZW4gc2VsZWN0ZWQuJyA6IFxyXG4gICAgICAgICAgICAgICAgJ1NlbGVjdCB0aGUgcGVyc29ucyByZXNwb25zaWJsZSBmb3IgYXR0ZXN0aW5nIHRoaXMgcG9saWN5LidcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tYi0yXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIiAqbmdJZj1cIiFncm91cEVuYWJsZWRcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/LnNsaWNlKDAsIDEpXHJcbiAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgYXNzaWduZWUpXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImFzc2lnbmVlLmVtcGxveWVlX25hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgYXNzaWduZWUuZW1wbG95ZWVfbmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJhc3NpZ25lZVBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/LnNsaWNlKDEpLmxlbmd0aCB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwRW5hYmxlZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBFbmFibGVkICYmIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSgnYXNzaWduZWVzJywgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXT8uZW1wbG95ZWVfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCJcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiVXNlclBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgJlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZShcclxuICAgICAgICAgICAgICAgICAgICAgICdncm91cEFzc2lnbmVlcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWVbMF1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWVbMF0/Lmdyb3VwX25hbWVcclxuICAgICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZVswXT8uZ3JvdXBfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWduZWVzJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXHJcbiAgICAgICAgICAgICAgKCgocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmICFwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSAmJlxyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICAgICAgICAgICFncm91cEVuYWJsZWQpIHx8XHJcbiAgICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJiAhcG9saWN5Rm9ybS5zZWxlY3RlZEFsbEF0dGVzdG9ycykgJiZcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkKSB8fFxyXG4gICAgICAgICAgICAgICAgKGlzU2VuZEZvckF0dGVzdGF0aW9uICYmXHJcbiAgICAgICAgICAgICAgICAgIChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09PSAwICYmICFwb2xpY3lGb3JtLnNlbGVjdGVkQWxsQXR0ZXN0b3JzKSkpXHJcbiAgICAgICAgICAgIFwiIGlkPVwid2hvdmFsaWRhdGVtc2dcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIj5cclxuICAgICAgICAgICAgU2VsZWN0IHRoZSBwZXJzb25zIHJlcXVpcmVkIHRvIGF0dGVzdCB0byB0aGlzIFBvbGljeS5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoXHJcbiAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnNcIlxyXG4gICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwib25BbGxBdHRlc3RvcnNUb2dnbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwid2hvLXRvZ2dsZVwiPlNlbGVjdCBhbGwgdXNlcnMgd2l0aGluIHlvdXIgb3JnYW5pemF0aW9uXHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgYWxsIHVzZXJzIHdpdGhpbiB5b3VyIG9yZ2FuaXphdGlvbiB3aWxsIGJlIHJlcXVpcmVkIHRvIGF0dGVzdCB0aGlzIHBvbGljeS4nXHJcbiAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPjwvYXBwLWNzLXN3aXRjaD5cclxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5yZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uXCJcclxuICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiYgIXBvbGljeUZvcm0uc2VsZWN0ZWRBbGxBdHRlc3RvcnNcIiBjbGFzcz1cIndoby10b2dnbGVcIj5USElTIFBPTElDWSBSRVFVSVJFU1xyXG4gICAgICAgICAgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXHJcbiAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCB0aGUgcmVhZGVycyB3aWxsIGJlIHJlcXVpcmVkIHRvIGF0dGVzdCB0aGlzIHBvbGljeSB1c2luZyB0aGVpciBlbGVjdHJvbmljIHNpZ25hdHVyZS4nXHJcbiAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTFmOzwvaT48L2FwcC1jcy1zd2l0Y2g+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2Fzc2lnbmVlUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2lnbmVlIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI1VzZXJQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXMgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsIGFzc2lnbmVlKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgYXNzaWduZWUuZW1wbG95ZWVfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZSB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnZ3JvdXBBc3NpZ25lZXMnLCBkYXRhKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG5cclxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgLS0+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG92ZXJzZWVyIG9mIHBvbGljeUZvcm0/LkNDRW1haWwgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IG92ZXJzZWVyPy5lbXBsb3llZV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2Vlckdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjR3JvdXBFbWFpbCcsIGRhdGEpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBlbmQgLS0+XHJcblxyXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBmYWlsIHN0YXJ0IC0tPlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2VlckZhaWxQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWwgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjRmFpbCcsIG92ZXJzZWVyKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/LmVtcGxveWVlX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyRmFpbEdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwIHwgc2xpY2UgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgZGF0YSlcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/Lmdyb3VwX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICA8IS0tIG92ZXJzZWVyIGZhaWwgZW5kIC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gV2hlbiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPldoZW4/PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgPT0gJydcIiBjbGFzcz1cInNlbGVjdCBidXR0b24tc2VjXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXQgZnJlcXVlbmN5LWN1c3RvbS1pbnB1dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIHt7IGZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8IS0tIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQgYnV0dG9uLXNlY1wiXHJcbiAgICAgICAgICA+IC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICE9ICcnXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RlZCBidXR0b24tc2VjIHNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZSgnZnJlcXVlbmN5JywgcmMpXCIgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImZyZXF1ZW5jeVBsYWNlaG9sZGVyXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeSdcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPCEtLSA8L2Rpdj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1wiXHJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPkVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8cCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxyXG4gICAgICAgICAgICAgICgocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxyXG4gICAgICAgICAgICAgICAgIWdyb3VwRW5hYmxlZCkgfHxcclxuICAgICAgICAgICAgICAgICgocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgfHxcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcclxuICAgICAgICAgICAgICAgICAgZ3JvdXBFbmFibGVkKSlcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIFNlbGVjdCBhbiBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJzdWJtaXR0ZWQgJiYgcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiYgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiYgaXNQYXN0RGF0ZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAgICAgICAgICBTZXQgYSBmdXR1cmUgZGF0ZS5cclxuICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5FZmZlY3RpdmUgRGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXRpbWUtcGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIGRhdGUgZnJvbSB3aGljaCB0aGlzIHBvbGljeSBnb2VzIGludG8gZWZmZWN0LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgIHwgZGF0ZTogJ2RkIE1NTSB5eXl5J1wiIChjbGljayk9XCJvcGVuRGF0ZVBpY2tlcigpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHAtZGF0ZS1waWNrZXIgI2RhdGVQaWNrZXIgKG9uU2VsZWN0KT1cImRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7Y2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImRhdGVDb25maWdcIiBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHAtZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LW92ZXJsYXlcIiAoY2xpY2spPVwiY2xvc2VEYXRlUGlja2VyKCRldmVudClcIiAqbmdJZj1cImRhdGVQaWNrZXJPdmVybGF5XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQ2hlY2twb2ludHMgLyBBc3Nlc3NtZW50IG9mIFVuZGVyc3RhbmRpbmcgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgKm5nSWY9XCJ0cnVlXCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxyXG4gICAgICAgICAgICBBc3Nlc3NtZW50IG9mIFVuZGVyc3RhbmRpbmdcclxuICAgICAgICAgICAgPCEtLSA8YnV0dG9uICAqbmdJZj1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGg9PT0wXCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMnLHRydWUpXCI+KyBBZGQgQ2hlY2twb2ludHM8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA9PT0gMFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsIHRydWUpXCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZXQgdXAgYSBxdWVzdGlvbm5haXJlIHRvIGNvbmZpcm0gdGhlIHJlYWRlcuKAmXMgdW5kZXJzdGFuZGluZyBvZiB0aGUgcG9saWN5LlwiIHJlYWRvbmx5PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcclxuICAgICAgICAgICAgICBvZiB0aGUgcG9saWN5LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3twb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoICsgKHBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggPiAxID8nIENoZWNrcG9pbnRzJzonIENoZWNrcG9pbnQnKX19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2twb2ludC1wb2ludC10ZXh0IGZpcnN0XCI+VE9UQUwgUE9JTlRTOiA8c3BhbiBjbGFzcz1cIm5vXCI+e3twb2xpY3lGb3JtPy50b3RhbFF1ZXN0aW9ufX08L3NwYW4+PGJyPjxlbT5FYWNoIHF1ZXN0aW9uIGNhcnJpZXMgMSBwb2ludDwvZW0+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2twb2ludC1wb2ludC10ZXh0XCI+UE9JTlRTIFJFUVVJUkVEIFRPIEFUVEVTVCA6IDxzcGFuIGNsYXNzPVwibm9cIj57e3BvbGljeUZvcm0/LnBhc3NpbmdNYXJrc319PC9zcGFuPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NoZWNrcG9pbnRzJywgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHMpXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIj57e1xyXG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCArXHJcbiAgICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDFcclxuICAgICAgICAgICAgICAgID8gXCIgUXVlc3Rpb25zXCJcclxuICAgICAgICAgICAgICAgIDogXCIgUXVlc3Rpb25cIilcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwhLS0gPGFwcC1wb3BvdmVyICNjaGVja3BvaW50UG9wT3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGNoZWNrcG9pbnQgb2YgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHMgfCBzbGljZTogMTsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2hlY2twb2ludHMnLGNoZWNrcG9pbnQsaisxKVwiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoZWNrcG9pbnQ/LnF1ZXN0aW9uIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPiAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJpc2sgQ2xhc3NpZmljYXRpb24gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cInNob3dSaXNrQ2xhc3NpZmljYXRpb24gJiYgZmFsc2VcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0ucmlza1JhdGluZ1wiPlxyXG4gICAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMucmlza3NcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiIXBvbGljeUZvcm0/LnJpc2tSYXRpbmdcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIiAqbmdJZj1cInBvbGljeUZvcm0/LnJpc2tSYXRpbmdcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5SaXNrIENsYXNzaWZpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvblwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsb3dcIiAqbmdGb3I9XCJsZXQgY2xhc3Mgb2Ygcmlza0NsYXNzaWZpY2F0aW9uXCIgW25nQ2xhc3NdPVwiW2NsYXNzLmNsYXNzXVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY2xhc3NpZmljYXRpb25cIiBbdmFsdWVdPVwiY2xhc3MudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicG9saWN5Rm9ybT8ucmlza1JhdGluZyA9PT0gY2xhc3MudmFsdWVcIiBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucmlza1JhdGluZ1wiIC8+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3sgY2xhc3MubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUmVzcG9uc2liaWxpdHkgQ2VudGVyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcIlxyXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyYycgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPT0gMCB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1xyXG4gICAgICAgICAgXCIgW3NyY109XCJBU1NFVFMucmVzcG9uc2liaWxpdHlfY2VudGVyXCIgYWx0PVwiXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAncmMnXCIgY2xhc3M9XCJjaGVja0ljb25cIlxyXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJlc3BvbnNpYmlsaXR5IENlbnRlcjwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8ubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3JjJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcihzKSB0aGF0IHRoaXMgcG9saWN5IHJlbGF0ZXMgdG8uXCIgcmVhZG9ubHkgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByYyBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8uc2xpY2UoMCwgMSlcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicmMuaXRlbV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IHJjLml0ZW1fbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwicmNQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/LnNsaWNlKDEpLmxlbmd0aCB9fVxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3JjJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcmNQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3MgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ3JjJywgcmMpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyByYy5pdGVtX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBWZXJzaW9uIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0uYWRkVmVyc2lvblwiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uXCI+XHJcbiAgICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5hc3NvY2lhdGVkX3Jpc2tzXCIgYWx0PVwibmFtZVwiICpuZ0lmPVwiIXBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb25cIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlZFUlNJT048L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiIChjaGFuZ2UpPVwib25WZXJzaW9uKCRldmVudClcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3BlY2lmeSB0aGUgcG9saWN5IHZlcnNpb24uXCIgLz5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiIWlzVmVyc2lvblZhbGlkXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIHt7IHZlcnNpb25FcnJvck1lc3NhZ2UgfX1cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFJldmlld2VyIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgJiYgZmFsc2VcIlxyXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcclxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5JyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwIHx8XHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXHJcbiAgICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5yZXZpZXdlclwiIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJcclxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcidcclxuICAgICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJldmlld2VyIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIHJldmlld2luZyB0aGlzIHBvbGljeVwiIHJlYWRvbmx5IC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmV2aWV3ZXIgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnNcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmV2aWV3ZXInLCByZXZpZXdlcilcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicmV2aWV3ZXIubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgcmV2aWV3ZXIubWVtYmVyX25hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxwICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgc3VibWl0dGVkICYmXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXHJcbiAgICAgICAgICAgIFwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBTZWxlY3QgYSByZXZpZXdlciBmb3IgdGhpcyBwb2xpY3kuXHJcbiAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPldoZW4/IDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyA9PSAnJ1wiIGNsYXNzPVwic2VsZWN0IGJ1dHRvbi1zZWNcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJyZXZpZXdlckZyZXF1ZW5jeVBsYWNlaG9sZGVyXCIgcmVhZG9ubHkgLz5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICBTZXQgQSBmcmVxdWVuY3lcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIiBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgcmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZWRpdFwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPHAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcclxuICAgICAgICAgICAgXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIFNlbGVjdCB0aGUgcmV2aWV3IHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeS5cclxuICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICA8YXBwLWZvcm1hdC1hbmQtZXZpZGVuY2UgKHVwZGF0ZUZpbGVzKT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyX2F0dGFjaG1lbnRzJywgJGV2ZW50KVwiICNmb3JtYXRFdmlkZW5jZVxyXG4gICAgICAgICAgICBbbW9kZV09XCIncG9saWN5UmV2aWV3ZXInXCIgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxyXG4gICAgICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInBvbGljeUZvcm0/LmRvY3VtZW50c0FuZExpbmtzXCI+XHJcbiAgICAgICAgICA8L2FwcC1mb3JtYXQtYW5kLWV2aWRlbmNlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gT3ZlcnNlZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZE92ZXJzZWVyc1wiIFtjbGFzcy5hY3RpdmVdPVwiXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCdcclxuICAgICAgXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0VtYWlsJyAmJlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NGYWlsJyAmJlxyXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcclxuICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDAgfHwgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDBcclxuICAgICAgICBcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIChwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPT0gMCkgfHxcclxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyB8fFxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCdcclxuICAgICAgICAgIFwiIFtzcmNdPVwiQVNTRVRTLm92ZXJzaWdodFwiIGFsdD1cImltXCIgLz5cclxuXHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cIlxyXG4gICAgICAgICAgICAocG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwKSAmJlxyXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NjRW1haWwnICYmXHJcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NGYWlsJ1xyXG4gICAgICAgICAgXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XHJcbiAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+T3ZlcnNpZ2h0PC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwICYmXHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsLmxlbmd0aCA9PSAwXHJcbiAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgaGF2ZSBvdmVyc2lnaHQgb2YgdGhpcyBwb2xpY3k/XCIgcmVhZG9ubHkgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwIHx8XHJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZ3JvdXBFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2NFbWFpbCBvZiBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5zbGljZSgwLCAxKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgY2NFbWFpbClcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiY2NFbWFpbC5lbXBsb3llZV9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXHJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJjY0VtYWlsUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8uc2xpY2UoMSkubGVuZ3RoIH19XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwRW5hYmxlZFwiIGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdKVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdLmVtcGxveWVlX25hbWVcIlxyXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcclxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbFswXS5lbXBsb3llZV9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyUG9wb3Zlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWwubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWw/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgJlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjR3JvdXBFbWFpbCcsIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXSlcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsWzBdPy5ncm91cF9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXT8uZ3JvdXBfbmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcclxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJHcm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWw/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjY0VtYWlsJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID09IDAgJiZcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPT0gMFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NjRmFpbCcsIHRydWUpXCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHBvbGljeSBpcyBub3QgYXR0ZXN0ZWQgb24gdGltZT9cIiByZWFkb25seSAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcclxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxyXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZ3JvdXBFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2NGYWlsIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5zbGljZSgwLCAxKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBjY0ZhaWwpXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImNjRmFpbC5lbXBsb3llZV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxyXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IGNjRmFpbC5lbXBsb3llZV9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcclxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImNjRmFpbFBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5zbGljZSgxKS5sZW5ndGggfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBFbmFibGVkXCIgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBFbmFibGVkICYmIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxbMF0pXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsWzBdPy5lbXBsb3llZV9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsWzBdPy5lbXBsb3llZV9uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyRmFpbFBvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgJlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSgnY2NHcm91cEZhaWxFbWFpbCcsIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBbMF0pXHJcbiAgICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwWzBdPy5ncm91cF9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXHJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyRmFpbEdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggLSAxIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjY0ZhaWwnLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNjY0VtYWlsUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRW1haWwgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIGNjRW1haWwpXCI+JiN4ZTkwZDs8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBjY0VtYWlsLmVtcGxveWVlX25hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XHJcbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2NjRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjY0ZhaWwgb2YgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWwgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjRmFpbCcsIGNjRmFpbClcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNjRmFpbC5lbXBsb3llZV9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gUmVsYXRlZCBEb2N1bWVudHMgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZEFzc29jaWF0ZWREb2N1bWVudHNcIlxyXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA9PSAwXCIgW3NyY109XCJBU1NFVFMuZm9ybWF0X2V2aWRlbmNlXCIgYWx0PVwiaW1cIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwicG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzLmZvcm1hdEZpbGVzPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJjaGVja0ljb25cIlxyXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJFTEFURUQgRE9DVU1FTlRTPC9sYWJlbD5cclxuICAgICAgICAgIDxhcHAtZm9ybWF0LWFuZC1ldmlkZW5jZSAodXBkYXRlRmlsZXMpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzb2NpYXRlZERvY3VtZW50cycsICRldmVudClcIiBbbW9kZV09XCIncG9saWN5J1wiXHJcbiAgICAgICAgICAgIFtvcmdhbml6YXRpb25faWRdPVwib3JnYW5pemF0aW9uX2lkXCJcclxuICAgICAgICAgICAgW2Zvcm1hdEV2aWRhbmNlRGF0YV09XCJwb2xpY3lGb3JtPy5hc3NvY2lhdGVkRG9jdW1lbnRzXCI+PC9hcHAtZm9ybWF0LWFuZC1ldmlkZW5jZT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIExpbmsgUHJvZ3JhbXMgJiBSZXNwb25zaWJpbGl0aWVzIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LmFkZExpbmtQcm9ncmFtXCIgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxyXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnbGlua1Byb2dyYW0nXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdsaW5rUHJvZ3JhbScgJiZcclxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcclxuICAgICAgXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiXHJcbiAgICAgICAgICBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXHJcbiAgICAgICAgXCI+XHJcbiAgICAgICAgPGltZyAqbmdJZj1cIiFwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCIgW3NyY109XCJBU1NFVFMubGlua19pdGVtc1wiIGFsdD1cIlwiIC8+XHJcblxyXG4gICAgICAgIDxzdmcgKm5nSWY9XCJwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCIgY2xhc3M9XCJjaGVja0ljb25cIlxyXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkxJTksgUFJPR1JBTVMgJiBSRVNQT05TSUJJTElUSUVTPC9sYWJlbD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdsaW5rUHJvZ3JhbScsIHRydWUpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XHJcbiAgICAgICAgICAgICAgU2VsZWN0IFByb2dyYW1zICYgcmVzcG9uc2liaWxpdGllcyB0aGF0IGFyZTxiciAvPmFzc29jaWF0ZWQgd2l0aFxyXG4gICAgICAgICAgICAgIHRoaXMgcG9saWN5LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxyXG4gICAgICAgICAgICAgIDxpIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdsaW5rUHJvZ3JhbScsIHBvbGljeUZvcm0/LnByb2dyYW1TZWxlY3RlZFZhbHVlcylcclxuICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxyXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/Lm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXIucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICs0XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwcm9ncmFtUmVzcG9uc2liaWxpdHlQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbMSwgMSwgMSwgMSwgMSwgMSwgMV1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVwb3J0aW5nIGluZm9ybWF0aW9uIHNlY3VyaXR5IHdlYWtuZXNzZXMnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXBvcnRpbmcgaW5mb3JtYXRpb24gc2VjdXJpdHkgd2Vha25lc3Nlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2xpbmtQcm9ncmFtJywgdHJ1ZSlcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gTGluayBBc3Nlc3NtZW50IC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0uYWRkTGlua0Fzc2Vzc21lbnRcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXHJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdpc0Fzc2Vzc21lbnQnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdpc0Fzc2Vzc21lbnQnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxpbWcgKm5nSWY9XCIhcG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCIgW3NyY109XCJBU1NFVFMuYXNzZXNzbWVudHNcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkxJTksgQVNTRVNTTUVOVFM8L2xhYmVsPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA9PT0gMFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0Fzc2Vzc21lbnQnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCIgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxyXG4gICAgICAgICAgICAgIFNlbGVjdCBhc3Nlc3NtZW50cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpczxiciAvPnBvbGljeS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uYXNzZXNzbWVudFswXT8uYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfbmFtZVxyXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XHJcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcclxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwcm9ncmFtUmVzcG9uc2liaWxpdHlQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXNzZXNzbWVudCBvZiBwb2xpY3lGb3JtLmFzc2Vzc21lbnQgfCBzbGljZSA6IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhc3Nlc3NtZW50Py5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhc3Nlc3NtZW50Py5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0Fzc2Vzc21lbnQnLCB0cnVlKVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIExpbmsgUmVsYXRlZCBQb2xpY2VzIC0tPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llc1wiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcclxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxyXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXHJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdpc0xpbmtlZFBvbGljZXMnICYmXHJcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXHJcbiAgICAgIFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIj5cclxuICAgICAgICA8aW1nICpuZ0lmPVwiIVNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aFwiIFtzcmNdPVwiTElOS1MubGlua2VkUG9saWN5SW1hZ2VcIiBhbHQ9XCJcIiAvPlxyXG5cclxuICAgICAgICA8c3ZnICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoXCIgY2xhc3M9XCJjaGVja0ljb25cIiBbeG1sbnNdPVwiTElOS1MuY2hlY2tlZFwiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxyXG4gICAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkxJTksgUkVMQVRFRCBQT0xJQ0lFUzwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID09PSAwXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2lzTGlua2VkUG9saWNlcycsIHRydWUpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XHJcbiAgICAgICAgICAgICAgU2VsZWN0IHBvbGljaWVzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBvbGljeS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwb2xpY3kgb2YgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5zbGljZSgwLCAxKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZShDT05TVEFOVFMuTElOS19QT0xJQ1ksIHBvbGljeT8uY29udHJhY3RfaWQpXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicG9saWN5Py5jb250cmFjdF9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IHBvbGljeT8uY29udHJhY3RfbmFtZVxyXG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGggPiAxXCIgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJlbGF0ZWRQb2xpY3kucG9wb3ZlcigpXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICt7eyBTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5zbGljZSgxKS5sZW5ndGggfX1cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCB0cnVlKVwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNyZWxhdGVkUG9saWN5IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9saWN5IG9mIFNlbGVjdGVkTGlzdE9mUG9saWNpZXMgfCBzbGljZSA6IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCBwb2xpY3k/LmNvbnRyYWN0X2lkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIj4mI3hlOTBkOzwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBvbGljeT8uY29udHJhY3RfbmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cclxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkXCJcclxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUZvcm0/LkxpbmtlZFBvbGljaWVzID09IDBcIiBjbGFzcz1cIndoby10b2dnbGVcIj5ESVNQTEFZIE9OIFRIRSBQT0xJQ1kgUE9SVEFMXHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJDT05TVEFOVFMuTElOS19QT0xJQ1lfSEVMUF9URVhUXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+PC9hcHAtY3Mtc3dpdGNoPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8YXBwLWNoZWNrYm94LWxpc3QgW2NvbmZpZ109XCJjYXRlZ29yeUNvbmZpZ1wiIFt0d29Db2x1bW5dPVwiZmFsc2VcIiBbaXRlbXNMaXN0XT1cImNhdGVnb3J5TGlzdFwiXHJcbiAgICBbc2VsZWN0ZWRJdGVtc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllc1wiIFtpZGVudGlmaWVyS2V5XT1cIidfaWQnXCIgW2Rpc3BsYXlLZXldPVwiJ2l0ZW1fbmFtZSdcIlxyXG4gICAgW3Rvb2x0aXBLZXldPVwiJ2l0ZW1fbmFtZSdcIiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2F0ZWdvcnknXCIgKHNhdmVMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgJGV2ZW50KVwiXHJcbiAgICAoY2xvc2VMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCIgW2xvYWRlZF09XCIhY2F0ZWdvcmllc0xpc3RMb2FkZWRcIj5cclxuICA8L2FwcC1jaGVja2JveC1saXN0PlxyXG4gIDwhLS0gPGFwcC1jaGVja2JveC1saXN0IFtjb25maWddPVwiYXBwcm92YWxXb3JrZmxvd0NvbmZpZ1wiIFt0d29Db2x1bW5dPVwidHJ1ZVwiXHJcbiAgW2l0ZW1zTGlzdF09XCJcIlxyXG4gIFtzZWxlY3RlZEl0ZW1zXT1cInBvbGljeUZvcm0uaXNzdWVDQ1VzZXJzXCIgW2lkZW50aWZpZXJLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiIFtkaXNwbGF5S2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiIFt0b29sdGlwS2V5XT1cIidlbXBsb3llZV9lbWFpbCdcIlxyXG4gICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3I9PT0nSVNTVUVfQ0MnXCIgKHNhdmVMaXN0KT1cInNlbGVjdG9yQWN0aW9uKCRldmVudCwnSVNTVUVfQ0MnKVwiXHJcbiAgKGNsb3NlTGlzdCk9XCJmaWVsZERlc2VsZWN0b3IoJ0lTU1VFX0NDJylcIj5cclxuPC9hcHAtY2hlY2tib3gtbGlzdD4gLS0+XHJcblxyXG4gIDxhcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcIiBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyY0xpc3RcIlxyXG4gICAgW3NlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRSQ3NcIiBbcmNJZEtleV09XCInaXRlbV9pZCdcIlxyXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCAkZXZlbnQpXCIgKGNsb3NlUmNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCIgW2xvYWRlZF09XCJyY0xpc3RMb2FkZWRcIj5cclxuICA8L2FwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJzLWxpc3Q+XHJcblxyXG4gIDxhcHAtbGluay1yZWxhdGVkLXBvbGljaWVzICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09IENPTlNUQU5UUy5MSU5LX1BPTElDWVwiIFtwb2xpY3lJZF09XCJwb2xpY3lJZFwiIFttb2RlXT1cIm1vZGVcIlxyXG4gICAgW3NlbGVjdGVkUG9saWNpZXNdPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llc1wiIChjbG9zZUxpbmtQb2xpY3lMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcclxuICAgIChzZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdChDT05TVEFOVFMuTElOS19QT0xJQ1ksICRldmVudClcIj48L2FwcC1saW5rLXJlbGF0ZWQtcG9saWNpZXM+XHJcblxyXG4gIDxhcHAtdXNlcnMtcmFkaW8tbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCIgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiIFt1c2Vyc0xpc3RdPVwiYWxsUmV2aWV3ZXJzXCJcclxuICAgIFtoZWFkZXJUZXh0XT1cIidTZWxlY3QgYSBSZXZpZXdlcidcIiBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzXCIgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXHJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyJywgJGV2ZW50KVwiXHJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIj5cclxuICA8L2FwcC11c2Vycy1yYWRpby1saXN0PlxyXG5cclxuICA8YXBwLW93bmVyLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRW1haWwnICYmICFncm91cEVuYWJsZWRcIiBbdXNlcnNMaXN0XT1cIm92ZXJzZWVyc0xpc3RcIlxyXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0VtYWlsXCJcclxuICAgIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiIFtpdGVtTmFtZUtleV09XCInZW1wbG95ZWVfbmFtZSdcIiAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0VtYWlsJywgJGV2ZW50KVwiXHJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIj5cclxuICA8L2FwcC1vd25lci1saXN0PlxyXG5cclxuICA8dXNlci1ncm91cC1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyAmJiBncm91cEVuYWJsZWRcIiBbZ3JvdXBFbmFibGVkXT1cInRydWVcIiBbbG9hZGluZ109XCJwYWdpbmF0ZWRVc2Vyc0xpc3Q/LmxvYWRpbmdcIiBbdXNlcmxpc3RdPVwicGFnaW5hdGVkVXNlcnNMaXN0Py51c2Vyc1wiIFt1c2VyTGlzdEluZm9dPVwicGFnaW5hdGVkVXNlcnNMaXN0XCJcclxuICAgIFtncm91cExpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0VtYWlsXCIgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uQ0NHcm91cEVtYWlsXCIgW2lzUGFnaW5hdGlvbkVuYWJsZWRdPVwiaXNQYWdpbmF0aW9uRW5hYmxlZFwiXHJcbiAgICAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0VtYWlsJywgJGV2ZW50KVwiIChjYW5jZWwpPVwiZGlzYWJsZVNlbGVjdG9yKClcIiBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCIgKGZldGNoVXNlckRhdGEpPVwiZ2V0VXNlcnNMaXN0V2l0aFBhZ2luYXRpb24oJGV2ZW50KVwiPlxyXG4gIDwvdXNlci1ncm91cC1saXN0PlxyXG5cclxuICA8YXBwLW93bmVyLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCcgJiYgIWdyb3VwRW5hYmxlZFwiIFt1c2Vyc0xpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXHJcbiAgICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLkNDRmFpbEVtYWlsXCJcclxuICAgIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiIFtpdGVtTmFtZUtleV09XCInZW1wbG95ZWVfbmFtZSdcIiAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0ZhaWwnLCAkZXZlbnQpXCJcclxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiPlxyXG4gIDwvYXBwLW93bmVyLWxpc3Q+XHJcblxyXG4gIDx1c2VyLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCcgJiYgZ3JvdXBFbmFibGVkXCIgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcclxuICAgIFtncm91cExpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbFwiXHJcbiAgICBbc2VsZWN0ZWRHcm91cHNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwXCIgW2xvYWRpbmddPVwicGFnaW5hdGVkVXNlcnNMaXN0Py5sb2FkaW5nXCIgW3VzZXJsaXN0XT1cInBhZ2luYXRlZFVzZXJzTGlzdD8udXNlcnNcIiBbdXNlckxpc3RJbmZvXT1cInBhZ2luYXRlZFVzZXJzTGlzdFwiIFtpc1BhZ2luYXRpb25FbmFibGVkXT1cImlzUGFnaW5hdGlvbkVuYWJsZWRcIiAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0ZhaWwnLCAkZXZlbnQpXCJcclxuICAgIChjYW5jZWwpPVwiZGlzYWJsZVNlbGVjdG9yKClcIiBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCIgKGZldGNoVXNlckRhdGEpPVwiZ2V0VXNlcnNMaXN0V2l0aFBhZ2luYXRpb24oJGV2ZW50KVwiPlxyXG4gIDwvdXNlci1ncm91cC1saXN0PlxyXG5cclxuICA8YXBwLWdyb3VwLXVzZXJzLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcycgJiYgIWdyb3VwRW5hYmxlZFwiIFt1c2Vyc0xpc3RdPVwiYXNzaWduZWVzTGlzdFwiXHJcbiAgICBbZ3JvdXBzTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCIgW3VzZXJJZEtleV09XCInbXlfbWVtYmVyX2lkJ1wiXHJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCIgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCI+XHJcbiAgPC9hcHAtZ3JvdXAtdXNlcnMtbGlzdD5cclxuXHJcbiAgPHVzZXItZ3JvdXAtbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXNzaWduZWVzJyAmJiBncm91cEVuYWJsZWRcIiBbZ3JvdXBFbmFibGVkXT1cInRydWVcIlxyXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIiAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCIgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXHJcbiAgICBbc2VsZWN0ZWRHcm91cHNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWVcIiBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcclxuICAgIFtmZWF0dXJlZmxhZ109XCJncm91cEVuYWJsZWRcIiBbbG9hZGluZ109XCJwYWdpbmF0ZWRVc2Vyc0xpc3Q/LmxvYWRpbmdcIiBbdXNlcmxpc3RdPVwicGFnaW5hdGVkVXNlcnNMaXN0Py51c2Vyc1wiIFt1c2VyTGlzdEluZm9dPVwicGFnaW5hdGVkVXNlcnNMaXN0XCIgW2lzUGFnaW5hdGlvbkVuYWJsZWRdPVwiaXNQYWdpbmF0aW9uRW5hYmxlZFwiIChmZXRjaFVzZXJEYXRhKT1cImdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKCRldmVudClcIj5cclxuICA8L3VzZXItZ3JvdXAtbGlzdD5cclxuXHJcbiAgPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnICYmIGZhbHNlXCIgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgQXBwcm92ZXJzJ1wiXHJcbiAgICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbdXNlcnNMaXN0XT1cImFsbEFwcHJvdmVyc1wiIFtzaG93V29ya2Zsb3ddPVwidHJ1ZVwiXHJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJcclxuICAgICAgYWRkTW9yZUxldmVsc1xyXG4gICAgICAgID8gW11cclxuICAgICAgICA6IHBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbYXBwcm92ZXJzTGlzdEluZGV4XS5hcHByb3ZlcnNcclxuICAgIFwiIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIiBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCIgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxyXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXBwcm92ZXJzJywgJGV2ZW50KVwiIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiIFttb2RlXT1cIm1vZGVcIlxyXG4gICAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiIChyZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSk9XCJyZXZpZXdlclR5cGVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbd29ya2Zsb3dMaXN0XT1cIndvcmtmbG93TGlzdFwiIFt3b3JrZmxvd1RleHRdPVwiJ0FwcHJvdmFsIFdvcmtmbG93J1wiPlxyXG4gIDwvYXBwLW93bmVyLWxpc3Q+XHJcblxyXG4gIDxhcHAtZnJlcXVlbmN5LWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1wiIFttb2RlXT1cIidwb2xpY3knXCJcclxuICAgIFtmcmVxdWVuY3lEZXRhaWxzXT1cImZyZXF1ZW5jeURldGFpbHNcIiAoc2VsZWN0ZWRGcmVxdWVuY3kpPVwiZnJlcXVlbmN5RGF0YSgkZXZlbnQpXCIgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXHJcbiAgICBbcGFnZVR5cGVdPVwiJ3BvbGljeSdcIiAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIj48L2FwcC1mcmVxdWVuY3ktY29udGFpbmVyPlxyXG5cclxuICA8YXBwLWZyZXF1ZW5jeS1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiIFttb2RlXT1cIidyZXZpZXdlckZyZXF1ZW5jeSdcIlxyXG4gICAgW2ZyZXF1ZW5jeURldGFpbHNdPVwicmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzXCIgKHNlbGVjdGVkRnJlcXVlbmN5KT1cInJldmlld2VyRnJlcXVlbmN5RGF0YSgkZXZlbnQpXCJcclxuICAgIFtmZWF0dXJlXT1cImZlYXR1cmVcIiBbcGFnZVR5cGVdPVwiJ3BvbGljeSdcIiAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIj48L2FwcC1mcmVxdWVuY3ktY29udGFpbmVyPlxyXG5cclxuICA8dmMtbGluay1wcm9ncmFtICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdsaW5rUHJvZ3JhbSdcIiAoY2xvc2UpPVwiZGlzYWJsZVNlbGVjdG9yKClcIiBbcG9saWN5XT1cInBvbGljeUZvcm1cIlxyXG4gICAgW3NlbGVjdGVkUHJvZ3JhbV09XCJwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXNcIiBbbW9kZV09XCJtb2RlXCIgW3NlbGVjdGVkTGlua1Byb2dyYW1dPVwic2VsZWN0ZWRMaW5rUHJvZ3JhbVwiXHJcbiAgICAoY2hhbmdlVGFiKT1cImNoYW5nZVRhYignbGlua2VkUHJvZ3JhbXMnKVwiICh1cGRhdGVkUHJvZ3JhbURldGFpbHMpPVwidXBkYXRlZFByb2dyYW1EZXRhaWxzKCRldmVudClcIj5cclxuICA8L3ZjLWxpbmstcHJvZ3JhbT5cclxuXHJcbiAgPGFwcC1jaGVja3BvaW50cy1wb2xpY3ktY29udGFpbmVyIChjbG9zZUNoZWNrUG9pbnQpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxyXG4gICAgW2NoZWNrcG9pbnREYXRhXT1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzXCIgW3JlcXVpcmVkUG9pbnRdPVwicG9saWN5Rm9ybT8ucGFzc2luZ01hcmtzXCJcclxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxyXG4gICAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NoZWNrcG9pbnRzJywgJGV2ZW50KVwiPjwvYXBwLWNoZWNrcG9pbnRzLXBvbGljeS1jb250YWluZXI+XHJcbiAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cclxuXHJcbiAgPGFwcC1hcHByb3ZhbC13b3JrZmxvdyAqbmdJZj1cImVuYWJsZUFwcHJvdmFsV29ya2Zsb3dcIiBbc2VsZWN0ZWRDYXRlZ29yeV09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXNcIlxyXG4gICAgW2FwcHJvdmVyV29ya0Zsb3dMaXN0XT1cImFwcHJvdmVyV29ya0Zsb3dMaXN0XCIgW2FsbEFwcHJvdmVyc109XCJhbGxBcHByb3ZlcnNcIlxyXG4gICAgKGxpc3RDYW5jZWxDbGlja2VkKT1cImxpc3RDYW5jZWxDbGlja2VkKCRldmVudClcIiAoc2VsZWN0ZWRXb3JrZmxvd05leHQpPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KCRldmVudClcIlxyXG4gICAgKHNhdmVBcHByb3ZhbFdvcmtmbG93KT1cImFwcHJvdmFsV29ya2Zsb3dBUElDYWxsKCRldmVudClcIiBbZWRpdEFwcHJvdmFsV29ya2Zsb3ddPVwiZWRpdEFwcHJvdmFsV29ya2Zsb3dcIlxyXG4gICAgW2NyZWF0ZUFwcHJvdmFsQ2xpY2tdPVwiY3JlYXRlQXBwcm92YWxDbGlja1wiIChjbG9zZUNyZWF0ZUNsaWNrZWQpPVwiY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpXCJcclxuICAgIFtlZGl0V29ya2Zsb3dMZXZlbF09XCJlZGl0V29ya2Zsb3dMZXZlbFwiPjwvYXBwLWFwcHJvdmFsLXdvcmtmbG93PlxyXG4gIDwhLS0gPGFwcC1zZWxlY3QtYXBwcm92ZXJzPjwvYXBwLXNlbGVjdC1hcHByb3ZlcnM+IC0tPlxyXG5cclxuICA8YXBwLXBvbGljeS1hY2Nlc3MgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3BvbGljeUFjY2VzcydcIiBbcG9saWN5QWNjZXNzVHlwZV09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGVcIlxyXG4gICAgKGNsb3NlKT1cImRpc2FibGVTZWxlY3RvcigpXCIgW29yZ1VzZXJzTGlzdF09XCJwYWdpbmF0ZWRVc2Vyc0xpc3Q/LnVzZXJzXCIgW3VzZXJzQWNjZXNzTGlzdF09XCJ1c2Vyc0FjY2Vzc0xpc3RcIlxyXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIiBbZ3JvdXBzQWNjZXNzTGlzdF09XCJncm91cHNBY2Nlc3NMaXN0XCJcclxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzXCIgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzXCJcclxuICAgIFtkaXNhYmxlZElkc109XCJ1c2Vyc0FjY2Vzc0xpc3RJZHNcIiBbZGlzYWJsZWRHcm91cElkc109XCJncm91cHNBY2Nlc3NMaXN0SWRzXCJcclxuICAgIFtmdXR1cmVVc2Vyc1dpbGxTZWxlY3RdPVwicG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcIiAoc2F2ZUNoZWNrUG9pbnQpPVwic2F2ZVNlbGVjdGVkTGlzdCgncG9saWN5QWNjZXNzJywgJGV2ZW50KVwiXHJcbiAgICAoc2V0UG9saWN5QWNjZXNzVHlwZSk9XCJwb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfdHlwZSA9ICRldmVudFwiIFtsb2FkaW5nXT1cInBhZ2luYXRlZFVzZXJzTGlzdD8ubG9hZGluZ1wiIFt1c2VyTGlzdEluZm9dPVwicGFnaW5hdGVkVXNlcnNMaXN0XCIgW2lzUGFnaW5hdGlvbkVuYWJsZWRdPVwiaXNQYWdpbmF0aW9uRW5hYmxlZFwiIChmZXRjaFVzZXJEYXRhKT1cImdldFVzZXJzTGlzdFdpdGhQYWdpbmF0aW9uKCRldmVudClcIiBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCI+XHJcbiAgPC9hcHAtcG9saWN5LWFjY2Vzcz5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q3JlYXRlRG9jdW1lbnRzXCI+XHJcbiAgPCEtLSA8YXBwLWNyZWF0ZS1kb2N1bWVudHMgKm5nSWY9XCJzaG93Q3JlYXRlRG9jdW1lbnRzXCJcclxuICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxyXG4gICBbbWVtYmVyX29ial9pZF09XCJtZW1iZXJfb2JqX2lkXCJcclxuICAgW3VzZXJJbmZvXT1cInVzZXJJbmZvXCJcclxuICAgW3BvbGljeUlkXT1cInBvbGljeUlkXCJcclxuICAgW3BvbGljeU5hbWVdPVwicG9saWN5Rm9ybS5wb2xpY3lOYW1lXCJcclxuICAgKGRpc2Nvbm5lY3RSZWZyZXNoKT1cImRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpXCJcclxuICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXHJcbiAgID48L2FwcC1jcmVhdGUtZG9jdW1lbnRzPiAtLT5cclxuICA8bGliLWRvY3VtZW50LXNlY3Rpb24gKm5nSWY9XCJzaG93Q3JlYXRlRG9jdW1lbnRzXCIgW3RlbXBsYXRlVmlld109XCJ0ZW1wbGF0ZVZpZXdcIiBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXHJcbiAgICBbbWVtYmVyX29ial9pZF09XCJtZW1iZXJfb2JqX2lkXCIgW3VzZXJJbmZvXT1cInVzZXJJbmZvXCIgW3BvbGljeUlkXT1cInBvbGljeUlkXCIgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXHJcbiAgICBbdGVtcGxhdGVVcmxdPVwidGVtcGxhdGVVcmxcIiBbcG9saWN5TmFtZV09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIiAoZGlzY29ubmVjdFJlZnJlc2gpPVwiZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSlcIlxyXG4gICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiIChvcGVuVGVtcGxhdGUpPVwidGVtcGxhdGVWaWV3ID0gdHJ1ZVwiPjwvbGliLWRvY3VtZW50LXNlY3Rpb24+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuPGFwcC1hc3Nlc3NtZW50LWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIiBbcHJvZ3JhbV9pZHNdPVwiJydcIlxyXG4gIFtpc0VkaXRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCIgKGNhbmNlbEFzc2Vzc21lbnQpPVwic2F2ZVNlbGVjdGVkTGlzdCgnaXNBc3Nlc3NtZW50JywgZmFsc2UpXCJcclxuICBbc2VsZWN0ZWRBc3Nlc3NtZW50XT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnRbMF1cIiBbbW9kZV09XCIncG9saWN5J1wiIChvbkFzc2Vzc21lbnRTZWxlY3QpPVwiXHJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgc2F2ZVNlbGVjdGVkTGlzdCgnaXNBc3Nlc3NtZW50JywgZmFsc2UpXHJcbiAgXCI+PC9hcHAtYXNzZXNzbWVudC1saXN0PlxyXG5cclxuPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnICYmIGZhbHNlXCIgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgQXBwcm92ZXJzJ1wiXHJcbiAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIiBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCIgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIiBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxyXG4gIFtzZWxlY3RlZFVzZXJzXT1cIlxyXG4gICAgYWRkTW9yZUxldmVsc1xyXG4gICAgICA/IFtdXHJcbiAgICAgIDogcG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1thcHByb3ZlcnNMaXN0SW5kZXhdLmFwcHJvdmVyc1xyXG4gIFwiIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIiBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCIgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxyXG4gIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIiAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIiBbbW9kZV09XCJtb2RlXCJcclxuICBbcmV2aWV3ZXJXb3JrZmxvd1R5cGVdPVwid29ya2Zsb3dUeXBlXCIgKHJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlKT1cInJldmlld2VyVHlwZUNoYW5nZSgkZXZlbnQpXCJcclxuICBbd29ya2Zsb3dMaXN0XT1cIndvcmtmbG93TGlzdFwiIFt3b3JrZmxvd1RleHRdPVwiJ0FwcHJvdmFsIFdvcmtmbG93J1wiPlxyXG48L2FwcC1vd25lci1saXN0PlxyXG5cclxuPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdvd25lcnMnXCIgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgT3duZXIocyknXCIgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxyXG4gIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbdXNlcnNMaXN0XT1cImFsbEFwcHJvdmVyc1wiIFtzaG93V29ya2Zsb3ddPVwiZmFsc2VcIiBbdXNlcklkS2V5XT1cIidtZW1iZXJfaWQnXCJcclxuICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCIgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIiAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvd25lcnMnLCAkZXZlbnQpXCJcclxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIiBbbW9kZV09XCJtb2RlXCIgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybT8ucG9saWN5X293bmVycyA/PyBbXVwiPlxyXG48L2FwcC1vd25lci1saXN0PlxyXG5cclxuPGFwcC1zZWxlY3QtdGVtcGxhdGUtbGlzdCAqbmdJZj1cInRlbXBsYXRlVmlld1wiIFtzZWxlY3RlZENhdGVnb3J5SWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzXCIgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXHJcbiAgKG9uVGVtcGxhdGVTZWxlY3QpPVwib25UZW1wbGF0ZVNlbGVjdCgkZXZlbnQpXCI+PC9hcHAtc2VsZWN0LXRlbXBsYXRlLWxpc3Q+Il19
|