vcomply-workflow-engine 6.1.70 → 6.1.72
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/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +4 -22
- package/esm2022/lib/sharedComponents/format-and-evidence/format-and-evidence.component.mjs +1 -2
- package/esm2022/lib/sharedComponents/link-responsibility/link-responsibility.component.mjs +3 -3
- package/esm2022/lib/ui-kit/avatar-v2/avatar-v2.component.mjs +5 -3
- package/esm2022/lib/ui-kit/tooltip/tooltip.directive.mjs +1 -1
- package/esm2022/lib/workflow/shared/components/program-responsibility-listing/program-responsibility-listing.component.mjs +2 -3
- package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +7 -7
- package/fesm2022/vcomply-workflow-engine.mjs +14 -34
- package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -201,7 +201,7 @@ export class WorkflowComplianceComponent {
|
|
|
201
201
|
this.responsibilityCentersList = [];
|
|
202
202
|
this.categoryList = [];
|
|
203
203
|
this.nonRemovableUsersList = [];
|
|
204
|
-
this.responsibilityCenterType =
|
|
204
|
+
this.responsibilityCenterType = 1;
|
|
205
205
|
this.responsibilityForm = {
|
|
206
206
|
assignors: {
|
|
207
207
|
enable: false,
|
|
@@ -216,7 +216,7 @@ export class WorkflowComplianceComponent {
|
|
|
216
216
|
list: [],
|
|
217
217
|
},
|
|
218
218
|
assignees: {
|
|
219
|
-
whoCanComplete: '
|
|
219
|
+
whoCanComplete: 'ANY_ONE',
|
|
220
220
|
list: [],
|
|
221
221
|
},
|
|
222
222
|
allowEditDueDate: false,
|
|
@@ -224,7 +224,7 @@ export class WorkflowComplianceComponent {
|
|
|
224
224
|
description: '',
|
|
225
225
|
objective: '',
|
|
226
226
|
rc: [],
|
|
227
|
-
responsibilityCenterType:
|
|
227
|
+
responsibilityCenterType: 1,
|
|
228
228
|
category: [],
|
|
229
229
|
program: [],
|
|
230
230
|
program_selected_ids: [],
|
|
@@ -556,7 +556,7 @@ export class WorkflowComplianceComponent {
|
|
|
556
556
|
this.moreOptions[event.code] = event.checked;
|
|
557
557
|
}
|
|
558
558
|
onRcTypeChange(selectedType) {
|
|
559
|
-
this.responsibilityCenterType = selectedType ??
|
|
559
|
+
this.responsibilityCenterType = selectedType ?? 1;
|
|
560
560
|
}
|
|
561
561
|
getRCList(program_id) {
|
|
562
562
|
let params = new HttpParams();
|
|
@@ -3953,11 +3953,11 @@ export class WorkflowComplianceComponent {
|
|
|
3953
3953
|
}
|
|
3954
3954
|
}
|
|
3955
3955
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowComplianceComponent, deps: [{ token: i1.AuthService }, { token: i2.ResponsibilityService }, { token: i3.FrequencyService }, { token: i4.UiKitService }, { token: i5.SnackBarService }, { token: i1.AuthService }, { token: i6.ProgramsService }, { token: i7.GrcService }, { token: i8.OrganizationUserService }, { token: i9.ComplianceCommonService }, { token: i10.OrganizationCommonService }, { token: i11.IframeService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3956
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowComplianceComponent, selector: "app-workflow-compliance", inputs: { mode: "mode", responsibilityId: "responsibilityId", frameworkDetails: "frameworkDetails", isEntrust: "isEntrust", feature: "feature", assessmentDetails: "assessmentDetails", isDuplicate: "isDuplicate", closeOnEsc: "closeOnEsc", orgDetails: "orgDetails", openedFrom: "openedFrom", selectedRC: "selectedRC", setSelectedProgram: ["selectedProgram", "setSelectedProgram"], responsibilityDetails: "responsibilityDetails" }, outputs: { pickerChanged: "pickerChanged", populateOption: "populateOption", hideElementsFromMoreOptions: "hideElementsFromMoreOptions", closeWorkflow: "closeWorkflow", resetForm: "resetForm", disconnectRefresh: "disconnectRefresh", checkpointCountUpdated: "checkpointCountUpdated", rcSelected: "rcSelected", onRemovingCheckpoint: "onRemovingCheckpoint", isAssessmentDisabled: "isAssessmentDisabled", assigneeTypeChange: "assigneeTypeChange", onReviewerTypeChange: "onReviewerTypeChange" }, viewQueries: [{ propertyName: "whatInput", first: true, predicate: ["what"], descendants: true }, { propertyName: "customItemTemplate", first: true, predicate: ["customItemTemplate"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"workflw-compliance\" *ngIf=\"!showSmiley\">\n <!-- Behalf -->\n <div *ngIf=\"mode !== 'EDIT'\" class=\"form-group-row\" [class.active]=\"activeSelector === 'assignors'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignors' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <img [src]=\"ASSETS.im_creating\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length == 0 ||\n activeSelector === 'assignors'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">I am creating this responsibility on behalf of someone else\n <app-cs-switch [ngValue]=\"responsibilityForm.assignors.enable\" (ngValueChange)=\"\n responsibilityForm.assignors.enable = $event;\n responsibilityForm.assignors.list = []\n \">\n </app-cs-switch>\n </label>\n <div class=\"select\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length === 0 ||\n activeSelector === 'assignors'\n \">\n <input type=\"text\" (click)=\"activateSelector('assignors', true)\"\n placeholder=\"Who is responsible for managing this responsibility?\" readonly\n [disabled]=\"!responsibilityForm?.assignors?.enable\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignors', b_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"b_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ b_user.member_name }}</span>\n </ng-container>\n <button *ngIf=\"responsibilityForm?.assignors?.list?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">\n +{{ responsibilityForm?.assignors?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\">\n <span class=\"chip\" *ngFor=\"let b_user of responsibilityForm?.assignors?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignors',b_user)\"></i>\n {{b_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignors?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignors?.list?.slice(2).length}}</button>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignors'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignors', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #behalf [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list | slice : 2;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignors', b_user)\"></i>\n {{ b_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p *ngIf=\"invalidType === 'whom'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for managing this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- What -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'framework'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'responsibilityName' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <img [src]=\"ASSETS.what\" alt=\"im\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() === '' ||\n focus.responsibilityName\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n What? <span class=\"required\">*</span>\n <button *ngIf=\"\n isFrameworkAvailable &&\n mode !== 'EDIT' &&\n openedFrom !== 'RISK_TREATMENT' &&\n assessmentDetails?.assessment_type !== 'compliance_audit'\n \" (click)=\"activateSelector('framework', true)\" class=\"button\">\n Select From A framework\n </button>\n </label>\n <span *ngIf=\"responsibilityForm?.responsibility?.keyResponsibility\" class=\"indicator\"\n [appTooltip]=\"'This responsibility is marked as key responsibility.'\" placement=\"bottom\" type=\"black\"\n delay=\"0\" [tooltipMandatory]=\"true\">\n <i class=\"icons\"></i>\n </span>\n <input *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() == '' || !isEditWhat\n \" type=\"text\" [ngModel]=\"responsibilityForm.responsibility.name\" placeholder=\"What is the responsibility?\"\n (change)=\"whatChanged($event)\" (focusin)=\"activateSelector('responsibilityName', true)\"\n (focusout)=\"activeDeselector()\" (clickOutside)=\"testFunction()\" #what />\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() != '' && isEditWhat\n \">\n <div class=\"chip-container\">\n <span class=\"value\">{{\n responsibilityForm.responsibility?.name\n }}</span>\n </div>\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" class=\"edit\" type=\"button\"\n (click)=\"onEditWhat($event)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'what'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please enter a name for this responsibility.\n </p>\n <div class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.responsibility?.keyResponsibility\" (ngValueChange)=\"\n responsibilityForm.responsibility.keyResponsibility = $event\n \">Key Responsibility\n </app-cs-switch>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Who -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <img [src]=\"ASSETS.case_assignees\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 ||\n activeSelector === 'assignees'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"edit-due-date\">\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\n <div *ngIf=\"allowEditDueDateFeatureFlag && false\" class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.allowEditDueDate\"\n (ngValueChange)=\"responsibilityForm.allowEditDueDate = $event\">ALLOW ASSIGNEE TO EDIT COMPLETED WORK<i\n class=\"icons\" [appTooltip]=\"\n 'If it\u2019s enabled, the assignee will have the option to modify a previously completed due date.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-switch>\n </div>\n </div>\n <div class=\"select vx-mt-0\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list?.length == 0 &&\n featureFlag_groups))\n \">\n <input type=\"text\" (click)=\"activateSelector('assignees', true)\"\n placeholder=\"Who is responsible for completing the responsibility?\" readonly />\n </div>\n\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.assignees?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.assignees?.list?.length > 0 ||\n responsibilityForm?.assigneeGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignees', e_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"e_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ e_user.member_name }}</span>\n </ng-container>\n <button\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\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.slice(1).length }}\n </button>\n </div>\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('assignees', responsibilityForm?.assignees?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assignees?.list[0]?.employee_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assignees?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"left\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n responsibilityForm?.assigneeGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupassignees',\n responsibilityForm?.assigneeGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\">\n +{{ responsibilityForm?.assigneeGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assignees?.length>1\" [class.plus]=\"responsibilityForm?.assignees?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let e_user of responsibilityForm?.assignees?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignees',e_user)\"></i>\n {{e_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignees?.list?.slice(2).length}}</button>\n </div> -->\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('assignees',responsibilityForm?.assignees?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assignees?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assignees?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.assignees?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0 && responsibilityForm?.assigneeGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\" >\n <i *ngIf=\"(!allGroupAssignee || mode !== 'EDIT')\" class=\"icons cross vx-mr-1\" (click)=\"remove('groupassignees',responsibilityForm?.assigneeGroups?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assigneeGroups?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assigneeGroups?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.assigneeGroups?.list?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignees'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignees', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.assigneeGroups?.list\n | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i *ngIf=\"\n !featureFlag_groups ||\n (featureFlag_groups &&\n (!allGroupAssignee || mode !== 'EDIT'))\n \" class=\"icons\" (click)=\"remove('groupassignees', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <p *ngIf=\"invalidType === 'who'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for completing this\n responsibility.\n </p>\n <ng-container *ngIf=\"!isGroupAssigned\">\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ALL'\"\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ALL'\" [name]=\"'what'\">ALL SELECTED PERSONS NEED\n TO COMPLETE THIS<i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each person.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"\n responsibilityForm.assignees.whoCanComplete = 'ANY_ONE'\n \" [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\" [name]=\"'what'\">ANY SELECTED PERSON\n CAN COMPLETE THIS\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, only one responsibility will be created.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n <div class=\"switch-row align-right\" *ngIf=\"\n mode == 'EDIT' &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list.length === 0 &&\n featureFlag_groups))\n \">\n <app-cs-switch (ngValueChange)=\"openAssigneeChangeConfirmation($event)\" [ngValue]=\"\n responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\n \">\n ANY SELECTED PERSON CAN COMPLETE THIS\n </app-cs-switch>\n </div>\n </ng-container>\n <app-popover #assignees [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- When? -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n !responsibilityForm?.frequency || activeSelector === 'frequency'\n \">\n <img [src]=\"ASSETS.when\" alt=\"im\" *ngIf=\"!responsibilityForm?.frequency || activeSelector === 'frequency'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.frequency &&\n activeSelector !== 'frequency' &&\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency != '5~0~0~0'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When? <span class=\"required\">*</span></label>\n <div *ngIf=\"\n responsibilityForm?.frequency == '' ||\n responsibilityForm?.frequency == '5~0~0~0'\n \" class=\"select button-sec\">\n <input type=\"text\" (click)=\"activateSelector('frequency', true)\" [placeholder]=\"frequencyPlaceholder\"\n readonly />\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <div *ngIf=\"\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency !== '5~0~0~0'\n \" class=\"selected button-sec\">\n <span class=\"chip\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\" delay=\"0\" type=\"black\"\n [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\n (click)=\"activateSelector('frequency', true)\">\n <i class=\"icons\"></i>Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'when'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the frequency of occurrence for this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'notes'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'notes' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \">\n <img [src]=\"ASSETS.notes\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() === '' ||\n focus.description\n \" />\n\n <svg class=\"checkIcon\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Notes</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.description\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n link: true,\n id: 'notes',\n placeholder:\n 'Add more information about completing the responsibility'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Objective -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OBJECTIVE\" [attr.id]=\"'OBJECTIVE'\"\n [class.active]=\"activeSelector === 'objective'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'objective' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <img [src]=\"ASSETS.objectives\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() === '' ||\n focus.objective\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Objective</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.objective\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n id: 'objective',\n link: true,\n placeholder:\n 'This option lets you specify an objective for the responsibility.'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RC\" [attr.id]=\"'RC'\"\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\n \">\n <img [src]=\"ASSETS.responsibility_center\" alt=\"\"\n *ngIf=\"responsibilityForm?.rc?.length == 0 || activeSelector === 'rc'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center </label>\n\n <div class=\"select\" *ngIf=\"responsibilityForm?.rc?.length === 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('rc', true)\"\n aria-placeholder=\"Select the responsibility center or the responsibility centers for this responsibility.\">\n </div>\n <!-- <input type=\"text\" (click)=\"activateSelector('rc',true)\" placeholder=\"Select Responsibility Center(s)\" readonly> -->\n </div>\n\n <div class=\"selected\" *ngIf=\"responsibilityForm?.rc?.length > 0\"\n [class.readOnly]=\"openedFrom === 'RISK_TREATMENT'\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let rc of responsibilityForm?.rc?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"\n *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc?.item_name\" placement=\"bottom-left\" delay=\"0\"\n type=\"black\" [tooltipMandatory]=\"false\">{{ rc?.item_name }}</span>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"responsibilityForm?.rc?.length > 1\" appPopover (click)=\"rcPopover.popover()\" placement=\"left\">\n +{{ responsibilityForm?.rc?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.rc?.length>1\" [class.plus]=\"responsibilityForm?.rc?.length>2\">\n <span class=\"chip\" *ngFor=\"let rc of responsibilityForm?.rc?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('rc',rc)\" *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>{{rc?.item_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.rc?.length > 2\" type=\"button\" appPopover (click)=\"rc.popover()\" placement=\"right\" placement=\"right\">+{{responsibilityForm?.rc?.slice(2).length}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'rc' && openedFrom !== 'RISK_TREATMENT'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('rc', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let rc of responsibilityForm?.rc | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <ng-container *ngIf=\"\n isResponsibilityRcLinkEnabled &&\n (mode != 'EDIT' || responsibilityForm?.rc?.length <= 1)\n \">\n <!-- <app-cs-radio><div [appTooltip]=\"'Create separate responsibilities for each responsibility center'\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026</div><i class=\"icons\" [appTooltip]=\"'If selected, separate responsibilities will be created for each Responsibility Center.'\" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio> -->\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 0\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(0)\">\n <div class=\"rc-radio-text\" [appTooltip]=\"\n 'Create separate responsibilities for each responsibility centers'\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">\n CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026\n </div>\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 1\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(1)\">DISPLAY THE SAME RESPONSIBILITY IN ALL RESPONSIBILITY CENTERS<i\n class=\"icons\" [appTooltip]=\"\n 'If selected, the same responsibility will be linked to each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Program -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.PROGRAM\" [attr.id]=\"'PROGRAM'\"\n [class.active]=\"activeSelector === 'program'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'program' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.program?.length > 0 && activeSelector !== 'program'\n \">\n <img [src]=\"ASSETS.case_category\" alt=\"\" *ngIf=\"\n (responsibilityForm?.program?.length == 0 ||\n activeSelector === 'program') &&\n allProgamSelected?.length == 0\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n (responsibilityForm?.program?.length > 0 &&\n activeSelector !== 'program') ||\n allProgamSelected?.length > 0\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Program</label>\n <div class=\"select\" *ngIf=\"allProgamSelected?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('program', true)\"\n aria-placeholder=\"Select the Program or Program Categories that this responsibility relates to.\"></div>\n <!-- <input type=\"text\" (click)=\"activateSelector('program',true)\" placeholder=\"Select Responsibility program(s)\" readonly> -->\n </div>\n <div class=\"selected\" *ngIf=\"allProgamSelected?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container>\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" (click)=\"remove('program', allProgamSelected[0])\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"allProgamSelected[0]?.name ?? '--'\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ allProgamSelected[0]?.name\n ?? \"--\" }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"program.popover()\" placement=\"right\" *ngIf=\"allProgamSelected?.length > 1\">\n +{{ allProgamSelected?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.program?.length>1\" [class.plus]=\"responsibilityForm?.program?.length>2\">\n <span class=\"chip\" *ngFor=\"let program of responsibilityForm?.program\"><i class=\"icons\" *ngIf=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" (click)=\"remove('program',program)\"></i> {{program?.name??'--'}}</span>\n <!- - <button *ngIf=\"responsibilityForm?.program?.length > 2\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.program?.slice(2).length}}</button> - ->\n <button *ngIf=\"responsibilityForm?.linkedProgram?.length > 1\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.linkedProgram?.length - 1}}</button>\n </div> -->\n\n <button *ngIf=\"\n activeSelector !== 'program' && !hiddenList.includes('PROGRAM')\n \" class=\"edit\" type=\"button\" (click)=\"activateSelector('program', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <app-popover #program [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let program of allProgamSelected | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\" [appTooltip]=\"program?.name\" placement=\"bottom\" type=\"black\" delay=\"0\"\n [tooltipMandatory]=\"false\">\n <i *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" class=\"icons\" (click)=\"remove('program', program)\"></i>\n {{ program?.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <div *ngIf=\"responsibilityForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of responsibilityForm?.customTags\">\n <ng-container *ngIf=\"tag?.name?.trim()\">\n <label class=\"vx-control-panel vx-mt-2\">{{\n tag?.name\n }}</label>\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag?.name }}\" />\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Format & Evidence -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.FORMATE_EVIDENCE\"\n [attr.id]=\"'FORMATE_EVIDENCE'\" [class.active]=\"activeSelector === 'formate_evidence'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'formate_evidence' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired == false &&\n this.responsibilityForm.formatAndEvidence.formatFiles.length == 0 &&\n this.responsibilityForm.formatAndEvidence.formatLinks?.length == 0\n \" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\n\n <svg *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired ||\n this.responsibilityForm.formatAndEvidence.formatFiles.length ||\n this.responsibilityForm.formatAndEvidence.formatLinks?.length\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('formate_evidence', $event)\" [mode]=\"'responsibility'\"\n [formatEvidanceData]=\"responsibilityForm?.formatAndEvidence\" [organization_id]=\"organizationId\">\n </app-format-and-evidence>\n </div>\n </div>\n\n <!-- Assessment -->\n <div *ngIf=\"moreOptions?.ASSESSMENT\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n [attr.id]=\"'ASSESSMENT'\" [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm.assessment?.assessment_id\">\n <img *ngIf=\"!responsibilityForm.assessment?.assessment_id\" [src]=\"ASSETS.assessments\" alt=\"im\" />\n\n <svg *ngIf=\"responsibilityForm.assessment?.assessment_id\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">ASSESSMENTS</label>\n <div *ngIf=\"!responsibilityForm.assessment?.assessment_id\" class=\"select\">\n <input type=\"text\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" placeholder=\"Select an assessment for this responsibility\"\n [disabled]=\"responsibilityForm.checkpoints?.length\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.assessment?.assessment_id\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assessment', category)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n }}</span>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-ml-1 vx-text-center\">\n {{ responsibilityForm.assessment?.assessmentDetails?.questions }}\n {{\n responsibilityForm.assessment?.assessmentDetails?.questions > 1\n ? \"Questions\"\n : \"Question\"\n }}\n </div>\n </div>\n\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" class=\"edit\" type=\"button\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS\"\n [attr.id]=\"'CHECKPOINTS'\" [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.checkpoints?.length > 0 &&\n activeSelector !== 'checkpoints'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <button *ngIf=\"responsibilityForm?.checkpoints?.length === 0\" class=\"button\"\n (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"responsibilityForm?.checkpoints?.length === 0\">\n <input [disabled]=\"!responsibilityForm.checkpoints?.length\" type=\"text\"\n (click)=\"activateSelector('checkpoints', true)\" placeholder=\"Add checkpoints for this responsibility\"\n readonly />\n <button [disabled]=\"!responsibilityForm.checkpoints?.length\" (click)=\"activateSelector('checkpoints', true)\"\n type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.checkpoints?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints?.slice(0, 1)\n \">\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"checkpoint?.label\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ checkpoint?.label }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"checkpoint.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm.checkpoints?.length > 1\">\n +{{ responsibilityForm.checkpoints?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"responsibilityForm.checkpoints?.length>1\" [class.plus]=\"responsibilityForm.checkpoints?.length>2\">\n <span class=\"chip\" *ngFor=\"let checkpoint of responsibilityForm.checkpoints?.slice(0,1)\">{{checkpoint?.label}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm.checkpoints?.length > 1\" type=\"button\" appPopover (click)=\"checkpoint.popover()\" placement=\"right\">+{{responsibilityForm.checkpoints?.length- 1}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <div *ngIf=\"this.responsibilityForm.checkpoints?.length\" class=\"assessment-text\">\n <i class=\"icons alert-icon\"></i>\n <span>You can now use the new <strong>Checkpoints </strong>or\n <strong>Assessments</strong> feature instead of the old checkpoints\n functionality to create analytical questions.\n <button class=\"remove-btn\" (click)=\"onRemoveCheckpoints('checkpoint')\">\n Remove Checkpoints\n </button>\n to continue.</span>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- New Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS_NEW\"\n [attr.id]=\"'CHECKPOINTS-NEW'\" [class.active]=\"activeSelector === 'checkpoints-new'\">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"checkpointCount > 0 && activeSelector !== 'checkpoints'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <span class=\"checkpoint-version\"> V2.0</span> -->\n <!-- <button class=\"button\"\n (click)=\"activateSelector('checkpoints-new',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"checkpointCount === 0\">\n <input type=\"text\" (click)=\"activateSelector('checkpoints-new', true)\"\n placeholder=\"Add checkpoints for this responsibility\" readonly />\n <button (click)=\"activateSelector('checkpoints-new', true)\" type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"checkpointCount > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{ checkpointCount }}\n {{ checkpointCount > 1 ? \"Questions\" : \"Question\" }}</span>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"checkpointCount > 0\">\n <span class=\"chip\">\n <i class=\"icons\" (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n {{checkpointCount}} {{checkpointCount > 1 ? 'Questions': 'Question'}}</span>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints-new'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints-new', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RISK_CLASSIFICATION\"\n [attr.id]=\"'RISK_CLASSIFICATION'\" [class.active]=\"activeSelector === 'riskCalculator'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'riskCalculator' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm?.riskClass\">\n <svg *ngIf=\"responsibilityForm?.riskClass\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Risk Classification\n <button (click)=\"activateSelector('riskCalculator', true)\" class=\"button\">\n + Risk Calculator\n </button>\n </label>\n\n <div class=\"classification\">\n <label class=\"low\" *ngFor=\"let risk of riskClassification\" [ngClass]=\"[risk.class]\">\n <input type=\"radio\" name=\"classification\" [(ngModel)]=\"responsibilityForm.riskClass\"\n [value]=\"risk?.value\" />\n <span>{{ risk?.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.REVIEWER\" [attr.id]=\"'REVIEWER'\"\n [class.active]=\"\n activeSelector === 'reviewerFrequency' || activeSelector === 'reviewer'\n \" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.reviewers?.list?.length == 0 ||\n activeSelector === 'reviewer'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.reviewers?.list?.length > 0 &&\n activeSelector !== 'reviewer'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n responsibilityForm?.groupReviewers?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\" placeholder=\"Select Reviewer\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.reviewers?.list?.length > 0 ||\n responsibilityForm?.groupReviewers?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"reviewer.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"!featureFlag_groups\" [class.more-one]=\"responsibilityForm?.reviewers?.list?.length>1\"\n [class.plus]=\"responsibilityForm?.reviewers?.list?.length>2\">\n <span class=\"chip\" *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('reviewer',reviewer)\"></i> {{reviewer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.reviewers?.list?.length > 2\" type=\"button\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">+{{responsibilityForm?.reviewers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.reviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('reviewer', responsibilityForm?.reviewers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.reviewers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.reviewers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.length - 1 }}\n </button>\n </div>\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.reviewers?.list.length > 0 &&\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n &\n </div>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupReviewer',\n responsibilityForm?.groupReviewers?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\">\n +{{ responsibilityForm?.groupReviewers?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 \">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('reviewer',responsibilityForm?.reviewers?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.reviewers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.reviewers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.reviewers?.list?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 && responsibilityForm?.groupReviewers?.list?.length > 0\">&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('groupReviewer',responsibilityForm?.groupReviewers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.groupReviewers?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.groupReviewers?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.groupReviewers?.list?.length - 1}}</button>\n\n </div>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'reviewer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('reviewer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-cs-radio [checked]=\"responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('sequential')\" [class.disabled]=\"\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n SEQUENTIAL<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review one at a time in the sequence defined by you.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio [checked]=\"!responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('anyReviewer')\">\n ANY REVIEWER CAN MARK THIS AS REVIEWED<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-popover #reviewer [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.groupReviewers?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupReviewer', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OVERSEER\" [attr.id]=\"'OVERSEER'\"\n [class.active]=\"\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n \" [class.disabled]=\"\n activeSelector &&\n !['overseerNotify', 'overseerNotify'].includes(activeSelector) &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.oversight\" alt=\"\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseers?.notifyList?.length == 0) ||\n activeSelector === 'overseerNotify' ||\n activeSelector === 'overseer'\n \" />\n <svg class=\"checkIcon\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseers?.notifyList?.length > 0) &&\n !(\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n )\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseersGroups?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseer', true)\"\n placeholder=\"Who should have oversight of the responsibility?\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseersGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseer', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseers.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.list?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.list?.length>2\" *ngIf=\"!featureFlag_groups\" >\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseer',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.list?.length > 2\" type=\"button\" appPopover (click)=\"overseers.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('overseer', responsibilityForm?.overseers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"overseerUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.list.length > 0 &&\n responsibilityForm?.overseersGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroup',\n responsibilityForm?.overseersGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.list[0].group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.list[0].group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\">\n +{{ responsibilityForm?.overseersGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseer',responsibilityForm?.overseers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"overseerUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0 && responsibilityForm?.overseersGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroup',responsibilityForm?.overseersGroups?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.list[0].group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.list[0].group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.list?.length -1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseerNotify', true)\"\n placeholder=\"Who should be notified if the responsibility is not complet...\" readonly [appTooltip]=\"\n 'Who should be notified if the responsibility is not completed?'\n \" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.notifyList?.length > 0 ||\n responsibilityForm?.overseersGroups?.notifyList?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList?.slice(\n 0,\n 1\n )\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseerNotifyList', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notify.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.notifyList?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.notifyList?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 2\" type=\"button\" appPopover (click)=\"notify.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.notifyList?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerNotifyList',\n responsibilityForm?.overseers?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"notifyUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.notifyList.length > 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroupNotifyList',\n responsibilityForm?.overseersGroups?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notifyGroup.popover()\" placement=\"right\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 1\n \">\n +{{\n responsibilityForm?.overseersGroups?.notifyList?.length - 1\n }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerNotifyList',responsibilityForm?.overseers?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.notifyList[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.notifyList[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\" class=\"count user\" appPopover (click)=\"notifyUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.notifyList?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0 && responsibilityForm?.overseersGroups?.notifyList?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroupNotifyList',responsibilityForm?.overseersGroups?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.notifyList[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 1\" class=\"count\" appPopover (click)=\"notifyGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.notifyList?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseerNotify'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseerNotify', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #overseers [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseers of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseers)\"></i>\n {{ overseers?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseersGroups?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroup', overseer)\"></i>\n {{ overseer?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notify [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.overseersGroups?.notifyList\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroupNotifyList', group)\"></i>\n {{ group?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Assurance -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.ASSURANCE\" [attr.id]=\"'ASSURANCE'\"\n [class.active]=\"activeSelector === 'assurance'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assurance' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.assuranceList?.length == 0 ||\n activeSelector === 'assurance'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.assuranceList?.length > 0 &&\n activeSelector !== 'assurance'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Assurance</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.assuranceList?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('assurance', true)\"\n aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\"></div>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.assuranceList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let assurance of responsibilityForm?.assuranceList?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assurance', assurance)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assurance.category_name\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assurance.category_name\n }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"assurance.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assuranceList?.length > 1\">\n +{{ responsibilityForm?.assuranceList?.slice(1).length }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assurance', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #assurance [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let assurance of responsibilityForm?.assuranceList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assurance', assurance)\"></i>\n {{ assurance.category_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Requires Audit -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.REQUIRES_AUDIT && responsibilityForm.rc.length > 0\" [attr.id]=\"'REQUIRES_AUDIT'\"\n [class.active]=\"activeSelector === 'requires_audit'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'requires_audit' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.requiresAuditList?.length == 0 ||\n activeSelector === 'requires_audit'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.requiresAuditList?.length > 0 &&\n activeSelector !== 'requires_audit'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REQUIRES AUDIT?</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.requiresAuditList?.length == 0\">\n <input type=\"text\" placeholder=\"If yes, select an Audit Category.\" readonly\n (click)=\"activateSelector('requires_audit', true)\" />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.requiresAuditList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('requires_audit', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.requiresAuditList[0]?.category_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.requiresAuditList[0]?.category_name\n }}</span>\n </div>\n\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('requires_audit', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n <!-- class=\"icons\"></i>\n Edit</button> -->\n </div>\n <ng-container *ngIf=\"responsibilityForm?.requiresAuditList?.length\">\n <label class=\"vx-control-panel vx-mt-8\">\n SAMPLE SIZE\n <app-cs-switch [(ngValue)]=\"isSample\" (ngValueChange)=\"switchEnable($event)\"></app-cs-switch>\n </label>\n <div class=\"sample-part\" [class.disabled]=\"!isSample\">\n <app-cs-radio value=\"0\" class=\"sample-radio\" (click)=\"selectedSampleData(0)\"\n [checked]=\"selectedSample === 0\">\n <div class=\"name\">COUNT</div>\n <input type=\"number\" placeholder=\"--\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"sampleValue\" />\n </app-cs-radio>\n <div class=\"or\">OR</div>\n <app-cs-radio value=\"1\" class=\"sample-radio\" (click)=\"selectedSampleData(1)\"\n [checked]=\"selectedSample === 1\">\n <div class=\"name\">PERCENTAGE</div>\n <input type=\"number\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"samplePercentage\"\n placeholder=\"--\" />\n </app-cs-radio>\n </div>\n <label class=\"vx-control-panel vx-mt-8\">SET A REMINDER IF THE AUDIT PLAN IS NOT CREATED.</label>\n <div class=\"reminder-part\">\n Send reminder every\n <input type=\"number\" value=\"2\" [(ngModel)]=\"sendAuditRemindersValue\" />\n Day by\n <div class=\"picker-group\">\n <input class=\"time\" aria-label=\"12hr format\" [(ngModel)]=\"auditTime\" [ngxTimepicker]=\"dailyTime\"\n placeholder=\"auditTime.toUpperCase()\" type=\"text\" [min]=\"currentTime\" readonly />\n <i class=\"icons\"></i>\n <ngx-material-timepicker #dailyTime [defaultTime]=\"auditTime\">\n </ngx-material-timepicker>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Link of GRC objects -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.GRC_OBJECTS && responsibilityForm.rc.length > 0\" [attr.id]=\"'GRC_OBJECTS'\"\n [class.active]=\"activeSelector === 'GRC_OBJECTS'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'GRC_OBJECTS' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length == 0 ||\n activeSelector === 'GRC_OBJECTS'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length > 0 &&\n activeSelector !== 'GRC_OBJECTS'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK GRC OBJECT(S)</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.selectedGRCObjects?.length === 0\">\n <input type=\"text\" placeholder=\"Select GRC object(s) to link with this responsibility\" readonly\n (click)=\"activateSelector('GRC_OBJECTS', true)\" />\n </div>\n <ng-container *ngIf=\"responsibilityForm?.selectedGRCObjects?.length\">\n <ng-container *ngFor=\"let selectedGRC of GRC_TYPE_ARRAY; let i = index\">\n <div *ngIf=\"grcDataWithTypes[selectedGRC]?.length\" class=\"selected vx-mb-2\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"let grc of grcDataWithTypes[selectedGRC]?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('GRC_OBJECTS', grc, 0)\"></i>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\n {{ selectedGRC | titlecase }}\n </div>\n\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"grc?.name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ grc?.name }}</span>\n </ng-container>\n\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"popoverGRC.popover()\" placement=\"left\"\n *ngIf=\"grcDataWithTypes[selectedGRC]?.length > 1\">\n +{{ grcDataWithTypes[selectedGRC].length - 1 }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'GRC'\" class=\"edit\" type=\"button\" (click)=\"\n selectedGRCTab = grcDataWithTypes[selectedGRC][0]?.type;\n getOtherGRCObjects();\n activateSelector('GRC_OBJECTS', true)\n \">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #popoverGRC [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let grc of grcDataWithTypes[selectedGRC] | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('GRC_OBJECTS', grc, j + 1)\"></i>\n {{ grc.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<app-users-radio-list *ngIf=\"activeSelector === 'assignors'\" [usersList]=\"assignorsList\"\n [selectedUsers]=\"responsibilityForm.assignors.list\" [itemEmailKey]=\"'member_email'\" [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('assignors', $event)\"\n (closeUsersList)=\"activeDeselector()\" [loaded]=\"assignorsListLoaded\">\n</app-users-radio-list>\n\n<ng-container *ngIf=\"activeSelector === 'assignees'\">\n <app-group-users-list *ngIf=\"\n isEntrust || responsibilityForm?.assignees?.whoCanComplete === 'ANY_ONE'\n \" [openedFrom]=\"openedFrom\" [usersList]=\"assigneesList\" [fromResponsibility]=\"'Assignee'\" [groupsList]=\"groupsList\"\n [assigneeGroupsList]=\"groupAssigneeList\" [selectedUsers]=\"responsibilityForm?.assignees?.list\"\n [selectedGroups]=\"responsibilityForm?.assigneeGroups?.list\" [userIdKey]=\"'my_member_id'\" [groupIdKey]=\"'group_id'\"\n [loader]=\"userListLoader || assignorsListLoader\" (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"activeDeselector()\" [groupsEnabled]=\"featureFlag_groups\">\n </app-group-users-list>\n <app-users-radio-list *ngIf=\"\n !isEntrust && responsibilityForm.assignees.whoCanComplete !== 'ANY_ONE'\n \" [itemEmailKey]=\"'employee_email'\" [usersList]=\"assigneesList\" [selectedUsers]=\"responsibilityForm.assignees.list\"\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" [fromResponsibility]=\"'Assignee'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"activeDeselector()\"\n [loaded]=\"assigneesListLoaded\">\n </app-users-radio-list>\n</ng-container>\n\n<app-checkpoints *ngIf=\"activeSelector === 'checkpoints'\"\n [checkpointInstruction]=\"responsibilityForm?.checkpointInstruction\" [checkpointData]=\"responsibilityForm?.checkpoints\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\" (closeCheckPoint)=\"activeDeselector()\"></app-checkpoints>\n<app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [frequencyDetails]=\"frequencyDetails\"\n [feature]=\"feature\" [onCompletionResponsibility]=\"responsibilityDetails?.onCompletionResponsibility\"\n (selectedFrequency)=\"frequencyData($event)\" [mode]=\"'responsibility'\" (closeFrequency)=\"activeDeselector()\">\n</app-frequency-container>\n\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [loaded]=\"rcListLoaded\"\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"\n mode == 'EDIT' && responsibilityCenterType === 0 ? true : false\n \" [selectedResponsibilityCenters]=\"responsibilityForm.rc\" [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"activeDeselector()\">\n</app-responsibility-centers-list>\n\n<app-category-multi-select *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categories\"\n [allCategories]=\"allCategories\" [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"responsibilityForm.category\"\n (saveSelectedCategory)=\"saveSelectedList('category', $event)\" (closeCategoriesList)=\"activeDeselector()\">\n</app-category-multi-select>\n\n<!-- Program List Popup -->\n<app-list-container *ngIf=\"activeSelector === 'program'\" (close)=\"activeDeselector()\">\n <app-program-list body (itemsSelectedChange)=\"onItemsSelectedChange($event)\" [selectedItems]=\"selectedPrograms\"\n [url]=\"programListUrl\"></app-program-list>\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-w-100\" footer>\n <div class=\"left-side vx-fs-12 vx-d-flex\">\n <ng-container *ngIf=\"allProgamSelected.length > 0\">\n <button\n class=\"selected-count-box vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\">\n {{ allProgamSelected.length }}\n </button>\n <span class=\"selected-text\">\n Program\n {{ allProgamSelected.length > 1 ? \"Categories\" : \"Category\" }}\n Selected</span>\n </ng-container>\n </div>\n <div class=\"right-side vx-d-flex\">\n <button class=\"cancelBtn\" (click)=\"activeDeselector()\">Cancel</button>\n <button class=\"nextBtn\" (click)=\"activeDeselector(); selectCategory()\">\n Next <i class=\"icons\"></i>\n </button>\n </div>\n </div>\n</app-list-container>\n\n<app-owner-list *ngIf=\"activeSelector === 'reviewer' && !featureFlag_groups\" [listHeading]=\"'Select a Reviewer'\"\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [showWorkflow]=\"true\"\n [selectedUsers]=\"responsibilityForm.reviewers.list\" [userIdKey]=\"'employee_id'\" [itemEmailKey]=\"'employee_email'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" (closeUsersList)=\"activeDeselector()\" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'reviewer' && featureFlag_groups\" [selectedReviewer]=\"true\"\n [userlist]=\"reviewerMemberIdsList\" [groupEnabled]=\"true\" [groupList]=\"groupReviewerList\"\n [selectedGroups]=\"responsibilityForm?.groupReviewers?.list\" [selectedUsers]=\"responsibilityForm?.reviewers?.list\"\n (cancel)=\"activeDeselector()\" (save)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [loading]=\"userListLoader || assignorsListLoader\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n<app-owner-list *ngIf=\"activeSelector === 'overseer' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [selectedUsers]=\"responsibilityForm.overseers.list\"\n [userIdKey]=\"'employee_id'\" [fromResponsibility]=\"'Overseer'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseer', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseer' && featureFlag_groups\" [groupEnabled]=\"true\"\n [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.list\"\n [userlist]=\"overseersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseer', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'overseerNotify' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [fromResponsibility]=\"'Overseer'\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseerNotify', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\"></app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseerNotify' && featureFlag_groups\" [userlist]=\"overseersList\"\n [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\"\n [selectedGroups]=\"responsibilityForm?.overseersGroups?.notifyList\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseerNotify', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'assurance'\" [singularText]=\"'Test Category selected'\"\n [pluralText]=\"'Test Categories selected'\" [searchPlaceholder]=\"'Search Test Category...'\"\n [listHeading]=\"'Select Test Categories'\" [usersList]=\"assuranceCategoriesList\"\n [noDataText]=\"'No Test Categories Found'\" [selectedUsers]=\"responsibilityForm.assuranceList\"\n [userIdKey]=\"'category_id'\" [itemEmailKey]=\"'category_name'\" [itemNameKey]=\"'category_name'\"\n (saveSelectedList)=\"saveSelectedList('assurance', $event)\" (closeUsersList)=\"activeDeselector()\"\n [searchPlaceholder]=\"'Search Category'\">\n</app-owner-list>\n\n<app-audit-category-list *ngIf=\"activeSelector === 'requires_audit'\" (closeList)=\"activeDeselector()\"\n [auditCategory]=\"assuranceRequiresAuditList\" (saveSelectedList)=\"saveSelectedList('requires_audit', $event)\"\n [selectedData]=\"responsibilityForm?.requiresAuditList[0]\"></app-audit-category-list>\n\n<app-loader-inline *ngIf=\"(loader && this.mode === 'EDIT') || entrustLoader\"></app-loader-inline>\n<app-framework-list *ngIf=\"activeSelector === 'framework'\" (assignControl)=\"assignFromFramework($event)\"\n [previousSelectedValues]=\"selectedFrameworkValues\" (closeFramework)=\"activeDeselector()\"\n (entrustFramework)=\"entrustFramework($event)\"></app-framework-list>\n\n<!-- risk-calculator here -->\n<app-risk-classification *ngIf=\"activeSelector === 'riskCalculator'\" [currentRiskValue]=\"responsibilityForm.riskClass\"\n (saveList)=\"saveSelectedList('calculatedrisk', $event)\" (closeList)=\"activeDeselector()\">\n</app-risk-classification>\n\n<app-review-frequency *ngIf=\"activeSelector === 'reviewerFrequency'\" [reviewCompleteDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewCompleteDays\n \" [reviewNOtCompletedDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewNOtCompletedDays\n \" (saveReviewFrequency)=\"saveSelectedList('reviewFrequency', $event)\" (closeReviewFrequency)=\"\n activeDeselector();\n activateSelector('reviewer', false);\n responsibilityForm.reviewers.list = [];\n responsibilityForm.groupReviewers.list = []\n \" (backToUserList)=\"activeDeselector(); activateSelector('reviewer', true)\">\n</app-review-frequency>\n\n<app-assessment-list *ngIf=\"isAssessment\" [program_ids]=\"responsibilityForm.program[0]?._id\" (cancelAssessment)=\"\n isAssessment = false; activateSelector('isAssessment', false)\n \" [isEdit]=\"responsibilityForm?.assessment?.assessment_id ? true : false\"\n [selectedAssessment]=\"responsibilityForm?.assessment\" (onAssessmentSelect)=\"\n onAssessmentSelect($event); activateSelector('isAssessment', false)\n \"></app-assessment-list>\n\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>\n\n<div class=\"import\" *ngIf=\"activeSelector === 'checkpoints-new'\">\n <app-create-assessment-container #editor [openPortal]=\"'RESPONSIBILITY_CHECKPOINT'\"\n (postAssessment)=\"postAssessment($event)\" (setIsUploaded)=\"setIsUploaded($event)\"\n [checkpointJSON]=\"responsibilityForm.new_checkpoints\">\n </app-create-assessment-container>\n</div>\n\n<app-grc-object-list *ngIf=\"activeSelector === 'GRC_OBJECTS'\" [grcObject]=\"grcList\"\n [selectedGRC]=\"responsibilityForm.selectedGRCObjects | refDisconnect\" [loader]=\"grcLoader\" [tableCard]=\"otherGRCCard\"\n [selectedTab]=\"selectedGRCTab\" [cardLoader]=\"grcTabLoader\" (getOtherGRCObjects)=\"getOtherGRCObjects($event)\"\n (saveOtherGRC)=\"saveSelectedList('GRC_OBJECTS', $event)\"\n (closeOtherGRC)=\"activateSelector('GRC_OBJECTS', false)\"></app-grc-object-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::ng-deep .workflw-compliance{display:block;position:relative}::ng-deep .workflw-compliance vcomply-editor .editor-container{border-radius:4px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block{min-height:72px;padding:11px 15px;line-height:20px;font-size:14px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul li{list-style:unset}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .workflw-compliance 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 .workflw-compliance 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 .workflw-compliance .sample-part{display:flex;align-items:center;margin-bottom:4px}::ng-deep .workflw-compliance .sample-part .sample-radio{width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item{position:relative;width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .radio{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:8px 8px 8px 36px;margin:0;max-width:100%;width:100%;display:flex;align-items:center;justify-content:space-between;pointer-events:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value .name{color:#747576;font-size:11px;font-weight:500;text-transform:uppercase}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input{border:1px solid #dcdcdc;background:#fff;border-radius:4px;height:24px;width:64px;text-align:center;padding:4px;color:#747576;font-size:13px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input:focus{outline:none;box-shadow:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~svg{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~.value{border:1px solid #34aa44;background:#eefcf0;pointer-events:auto}::ng-deep .workflw-compliance .sample-part .or{color:#161b2f;font-size:9px;font-weight:500;text-transform:uppercase;margin:0 10px}::ng-deep .workflw-compliance .sample-part.disabled{pointer-events:none}::ng-deep .workflw-compliance .sample-part.disabled .sample-radio .radio-item .value{background:#fbfbfb;border:1px solid #f1f1f1}::ng-deep .workflw-compliance .reminder-part{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:4px 12px;color:#747576;font-size:12px;display:flex;align-items:center}::ng-deep .workflw-compliance .reminder-part input{width:30px;border:none;border-radius:0;border-bottom:1px solid #dbdbdb;text-align:center;color:#747576;font-size:13px;font-weight:500;margin:0 4px}::ng-deep .workflw-compliance .reminder-part input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group{position:relative}::ng-deep .workflw-compliance .reminder-part .picker-group input{border:1px solid #f1f1f1!important;border-radius:4px!important;width:104px!important;height:28px!important;margin-left:8px!important;padding:6px 8px!important;cursor:pointer;color:#747576!important;font-size:12px!important;font-weight:500!important;text-align:left!important}::ng-deep .workflw-compliance .reminder-part .picker-group input:hover,::ng-deep .workflw-compliance .reminder-part .picker-group input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group i{color:#1e5dd3;position:absolute;top:6px;right:10px;font-size:16px}.assessment-text{color:#747576;font-size:11px;display:flex;align-items:center;padding:0 8px;margin:-16px 0 20px}.assessment-text i.alert-icon{color:#f2bf19;font-size:16px;margin-right:8px}.assessment-text strong{font-weight:600}.assessment-text button.remove-btn{background:transparent;border-radius:0;border:none;color:#1e5dd3;font-size:10px;font-weight:600;padding:0;margin:0}.import{position:fixed;inset:0 30px 0 0;z-index:-1;width:calc(100vw - 30px)}.wf-action-list ul.action-item li.multiple-program{background:#f8f8f8}.wf-action-list ul.action-item li.multiple-program .avatar-card{padding:2px 7.5px}.wf-action-list ul.action-item li.multiple-program .avatar-card span.value{color:#747576;font-size:11px;font-weight:600;width:unset}.primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}.edit-due-date{display:flex;align-items:baseline;justify-content:space-between}.left-side{color:#707070}.right-side button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}.right-side button i{margin-left:8px;font-size:11px}.right-side button:disabled{background:#f1f1f1!important;color:#747576!important;opacity:1}.right-side button.cancelBtn{background:transparent!important;color:#eb2424!important}.selected-count-box{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem;position:relative}.selected-text{color:#707070;font-size:11px;font-weight:500;position:fixed;padding-left:2.5rem}\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 .chipContainer button.countBtn.blueBg{background:#1e5dd3}::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}.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: i12.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: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i13.CreateAssessmentContainerComponent, selector: "app-create-assessment-container", inputs: ["openPortal", "assessmentJSON", "checkpointJSON"], outputs: ["setIsUploaded", "postAssessment"] }, { kind: "component", type: i14.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i15.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i16.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i17.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i18.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i19.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closePopoverEvent"] }, { kind: "directive", type: i20.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i21.NgxMaterialTimepickerComponent, selector: "ngx-material-timepicker", inputs: ["cancelBtnTmpl", "editableHintTmpl", "confirmBtnTmpl", "ESC", "enableKeyboardInput", "preventOverlayClick", "disableAnimation", "appendToInput", "hoursOnly", "defaultTime", "timepickerClass", "theme", "min", "max", "ngxMaterialTimepickerTheme", "format", "minutesGap"], outputs: ["timeSet", "opened", "closed", "hourSelected", "timeChanged"] }, { kind: "directive", type: i21.TimepickerDirective, selector: "[ngxTimepicker]", inputs: ["format", "min", "max", "ngxTimepicker", "value", "disabled", "disableClick"] }, { kind: "component", type: i22.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i23.SmileyDialogInlineComponent, selector: "app-smiley-dialog-inline", inputs: ["message", "actionButtons"], outputs: ["action", "closeSmiley"] }, { kind: "directive", type: i24.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "component", type: i25.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", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i26.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i27.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: i28.GrcObjectListComponent, selector: "app-grc-object-list", inputs: ["grcObject", "currentPage", "loader", "tableCard", "selectedTab", "cardLoader", "onEditGRCId", "mode", "selectedGRC"], outputs: ["saveOtherGRC", "closeOtherGRC", "getOtherGRCObjects"] }, { kind: "component", type: i29.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData"], outputs: ["updateFiles"] }, { kind: "component", type: i30.ProgramListComponent, selector: "app-program-list", inputs: ["items", "selectedItems", "url"], outputs: ["itemSelected", "itemDeselected", "itemsSelectedChange"] }, { kind: "component", type: i31.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: i32.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: i33.CategoryMultiSelectComponent, selector: "app-category-multi-select", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i34.CheckpointsComponent, selector: "app-checkpoints", inputs: ["checkpointData", "checkpointInstruction"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i35.ReviewFrequencyComponent, selector: "app-review-frequency", inputs: ["reviewCompleteDays", "reviewNOtCompletedDays"], outputs: ["closeReviewFrequency", "backToUserList", "saveReviewFrequency"] }, { kind: "component", type: i36.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType", "onCompletionResponsibility"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i37.FrameworkListComponent, selector: "app-framework-list", inputs: ["previousSelectedValues", "headerText", "workflowPage", "policy", "frameWorkList", "selectedFrameWork", "selectedCategories"], outputs: ["entrustFramework", "closeFramework", "assignControl"] }, { kind: "component", type: i38.RiskClassificationComponent, selector: "app-risk-classification", inputs: ["currentRiskValue"], outputs: ["saveList", "closeList"] }, { kind: "component", type: i39.AuditCategoryListComponent, selector: "app-audit-category-list", inputs: ["selectedData", "selectedIndex", "auditCategory"], outputs: ["closeList", "saveSelectedList"] }, { kind: "component", type: i40.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids", "isFullScreen"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i41.ListContainerComponent, selector: "app-list-container", inputs: ["heading"], outputs: ["close"] }, { kind: "pipe", type: i15.SlicePipe, name: "slice" }, { kind: "pipe", type: i15.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i42.RefDisconnectPipe, name: "refDisconnect" }] }); }
|
|
3956
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowComplianceComponent, selector: "app-workflow-compliance", inputs: { mode: "mode", responsibilityId: "responsibilityId", frameworkDetails: "frameworkDetails", isEntrust: "isEntrust", feature: "feature", assessmentDetails: "assessmentDetails", isDuplicate: "isDuplicate", closeOnEsc: "closeOnEsc", orgDetails: "orgDetails", openedFrom: "openedFrom", selectedRC: "selectedRC", setSelectedProgram: ["selectedProgram", "setSelectedProgram"], responsibilityDetails: "responsibilityDetails" }, outputs: { pickerChanged: "pickerChanged", populateOption: "populateOption", hideElementsFromMoreOptions: "hideElementsFromMoreOptions", closeWorkflow: "closeWorkflow", resetForm: "resetForm", disconnectRefresh: "disconnectRefresh", checkpointCountUpdated: "checkpointCountUpdated", rcSelected: "rcSelected", onRemovingCheckpoint: "onRemovingCheckpoint", isAssessmentDisabled: "isAssessmentDisabled", assigneeTypeChange: "assigneeTypeChange", onReviewerTypeChange: "onReviewerTypeChange" }, viewQueries: [{ propertyName: "whatInput", first: true, predicate: ["what"], descendants: true }, { propertyName: "customItemTemplate", first: true, predicate: ["customItemTemplate"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"workflw-compliance\" *ngIf=\"!showSmiley\">\n <!-- Behalf -->\n <div *ngIf=\"mode !== 'EDIT'\" class=\"form-group-row\" [class.active]=\"activeSelector === 'assignors'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignors' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <img [src]=\"ASSETS.im_creating\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length == 0 ||\n activeSelector === 'assignors'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">I am creating this responsibility on behalf of someone else\n <app-cs-switch [ngValue]=\"responsibilityForm.assignors.enable\" (ngValueChange)=\"\n responsibilityForm.assignors.enable = $event;\n responsibilityForm.assignors.list = []\n \">\n </app-cs-switch>\n </label>\n <div class=\"select\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length === 0 ||\n activeSelector === 'assignors'\n \">\n <input type=\"text\" (click)=\"activateSelector('assignors', true)\"\n placeholder=\"Who is responsible for managing this responsibility?\" readonly\n [disabled]=\"!responsibilityForm?.assignors?.enable\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignors', b_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"b_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ b_user.member_name }}</span>\n </ng-container>\n <button *ngIf=\"responsibilityForm?.assignors?.list?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">\n +{{ responsibilityForm?.assignors?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\">\n <span class=\"chip\" *ngFor=\"let b_user of responsibilityForm?.assignors?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignors',b_user)\"></i>\n {{b_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignors?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignors?.list?.slice(2).length}}</button>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignors'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignors', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #behalf [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list | slice : 2;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignors', b_user)\"></i>\n {{ b_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p *ngIf=\"invalidType === 'whom'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for managing this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- What -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'framework'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'responsibilityName' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <img [src]=\"ASSETS.what\" alt=\"im\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() === '' ||\n focus.responsibilityName\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n What? <span class=\"required\">*</span>\n <button *ngIf=\"\n isFrameworkAvailable &&\n mode !== 'EDIT' &&\n openedFrom !== 'RISK_TREATMENT' &&\n assessmentDetails?.assessment_type !== 'compliance_audit'\n \" (click)=\"activateSelector('framework', true)\" class=\"button\">\n Select From A framework\n </button>\n </label>\n <span *ngIf=\"responsibilityForm?.responsibility?.keyResponsibility\" class=\"indicator\"\n [appTooltip]=\"'This responsibility is marked as key responsibility.'\" placement=\"bottom\" type=\"black\"\n delay=\"0\" [tooltipMandatory]=\"true\">\n <i class=\"icons\"></i>\n </span>\n <input *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() == '' || !isEditWhat\n \" type=\"text\" [ngModel]=\"responsibilityForm.responsibility.name\" placeholder=\"What is the responsibility?\"\n (change)=\"whatChanged($event)\" (focusin)=\"activateSelector('responsibilityName', true)\"\n (focusout)=\"activeDeselector()\" (clickOutside)=\"testFunction()\" #what />\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() != '' && isEditWhat\n \">\n <div class=\"chip-container\">\n <span class=\"value\">{{\n responsibilityForm.responsibility?.name\n }}</span>\n </div>\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" class=\"edit\" type=\"button\"\n (click)=\"onEditWhat($event)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'what'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please enter a name for this responsibility.\n </p>\n <div class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.responsibility?.keyResponsibility\" (ngValueChange)=\"\n responsibilityForm.responsibility.keyResponsibility = $event\n \">Key Responsibility\n </app-cs-switch>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Who -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <img [src]=\"ASSETS.case_assignees\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 ||\n activeSelector === 'assignees'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"edit-due-date\">\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\n <div *ngIf=\"allowEditDueDateFeatureFlag && false\" class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.allowEditDueDate\"\n (ngValueChange)=\"responsibilityForm.allowEditDueDate = $event\">ALLOW ASSIGNEE TO EDIT COMPLETED WORK<i\n class=\"icons\" [appTooltip]=\"\n 'If it\u2019s enabled, the assignee will have the option to modify a previously completed due date.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-switch>\n </div>\n </div>\n <div class=\"select vx-mt-0\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list?.length == 0 &&\n featureFlag_groups))\n \">\n <input type=\"text\" (click)=\"activateSelector('assignees', true)\"\n placeholder=\"Who is responsible for completing the responsibility?\" readonly />\n </div>\n\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.assignees?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.assignees?.list?.length > 0 ||\n responsibilityForm?.assigneeGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignees', e_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"e_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ e_user.member_name }}</span>\n </ng-container>\n <button\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\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.slice(1).length }}\n </button>\n </div>\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('assignees', responsibilityForm?.assignees?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assignees?.list[0]?.employee_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assignees?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"left\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n responsibilityForm?.assigneeGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupassignees',\n responsibilityForm?.assigneeGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\">\n +{{ responsibilityForm?.assigneeGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assignees?.length>1\" [class.plus]=\"responsibilityForm?.assignees?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let e_user of responsibilityForm?.assignees?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignees',e_user)\"></i>\n {{e_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignees?.list?.slice(2).length}}</button>\n </div> -->\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('assignees',responsibilityForm?.assignees?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assignees?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assignees?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.assignees?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0 && responsibilityForm?.assigneeGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\" >\n <i *ngIf=\"(!allGroupAssignee || mode !== 'EDIT')\" class=\"icons cross vx-mr-1\" (click)=\"remove('groupassignees',responsibilityForm?.assigneeGroups?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assigneeGroups?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assigneeGroups?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.assigneeGroups?.list?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignees'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignees', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.assigneeGroups?.list\n | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i *ngIf=\"\n !featureFlag_groups ||\n (featureFlag_groups &&\n (!allGroupAssignee || mode !== 'EDIT'))\n \" class=\"icons\" (click)=\"remove('groupassignees', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <p *ngIf=\"invalidType === 'who'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for completing this\n responsibility.\n </p>\n <ng-container *ngIf=\"!isGroupAssigned\">\n\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"\n responsibilityForm.assignees.whoCanComplete = 'ANY_ONE'\n \" [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\" [name]=\"'what'\">ANY SELECTED PERSON\n CAN COMPLETE THIS\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, only one responsibility will be created.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ALL'\"\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ALL'\" [name]=\"'what'\">ALL SELECTED PERSONS NEED\n TO COMPLETE THIS<i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each person.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n <div class=\"switch-row align-right\" *ngIf=\"\n mode == 'EDIT' &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list.length === 0 &&\n featureFlag_groups))\n \">\n <app-cs-switch (ngValueChange)=\"openAssigneeChangeConfirmation($event)\" [ngValue]=\"\n responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\n \">\n ANY SELECTED PERSON CAN COMPLETE THIS\n </app-cs-switch>\n </div>\n </ng-container>\n <app-popover #assignees [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- When? -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n !responsibilityForm?.frequency || activeSelector === 'frequency'\n \">\n <img [src]=\"ASSETS.when\" alt=\"im\" *ngIf=\"!responsibilityForm?.frequency || activeSelector === 'frequency'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.frequency &&\n activeSelector !== 'frequency' &&\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency != '5~0~0~0'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When? <span class=\"required\">*</span></label>\n <div *ngIf=\"\n responsibilityForm?.frequency == '' ||\n responsibilityForm?.frequency == '5~0~0~0'\n \" class=\"select button-sec\">\n <input type=\"text\" (click)=\"activateSelector('frequency', true)\" [placeholder]=\"frequencyPlaceholder\"\n readonly />\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <div *ngIf=\"\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency !== '5~0~0~0'\n \" class=\"selected button-sec\">\n <span class=\"chip\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\" delay=\"0\" type=\"black\"\n [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\n (click)=\"activateSelector('frequency', true)\">\n <i class=\"icons\"></i>Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'when'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the frequency of occurrence for this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'notes'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'notes' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \">\n <img [src]=\"ASSETS.notes\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() === '' ||\n focus.description\n \" />\n\n <svg class=\"checkIcon\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Notes</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.description\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n link: true,\n id: 'notes',\n placeholder:\n 'Add more information about completing the responsibility'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Objective -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OBJECTIVE\" [attr.id]=\"'OBJECTIVE'\"\n [class.active]=\"activeSelector === 'objective'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'objective' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <img [src]=\"ASSETS.objectives\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() === '' ||\n focus.objective\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Objective</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.objective\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n id: 'objective',\n link: true,\n placeholder:\n 'This option lets you specify an objective for the responsibility.'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RC\" [attr.id]=\"'RC'\"\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\n \">\n <img [src]=\"ASSETS.responsibility_center\" alt=\"\"\n *ngIf=\"responsibilityForm?.rc?.length == 0 || activeSelector === 'rc'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center </label>\n\n <div class=\"select\" *ngIf=\"responsibilityForm?.rc?.length === 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('rc', true)\"\n aria-placeholder=\"Select the responsibility center or the responsibility centers for this responsibility.\">\n </div>\n <!-- <input type=\"text\" (click)=\"activateSelector('rc',true)\" placeholder=\"Select Responsibility Center(s)\" readonly> -->\n </div>\n\n <div class=\"selected\" *ngIf=\"responsibilityForm?.rc?.length > 0\"\n [class.readOnly]=\"openedFrom === 'RISK_TREATMENT'\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let rc of responsibilityForm?.rc?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"\n *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc?.item_name\" placement=\"bottom-left\" delay=\"0\"\n type=\"black\" [tooltipMandatory]=\"false\">{{ rc?.item_name }}</span>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"responsibilityForm?.rc?.length > 1\" appPopover (click)=\"rcPopover.popover()\" placement=\"left\">\n +{{ responsibilityForm?.rc?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.rc?.length>1\" [class.plus]=\"responsibilityForm?.rc?.length>2\">\n <span class=\"chip\" *ngFor=\"let rc of responsibilityForm?.rc?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('rc',rc)\" *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>{{rc?.item_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.rc?.length > 2\" type=\"button\" appPopover (click)=\"rc.popover()\" placement=\"right\" placement=\"right\">+{{responsibilityForm?.rc?.slice(2).length}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'rc' && openedFrom !== 'RISK_TREATMENT'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('rc', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let rc of responsibilityForm?.rc | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <ng-container *ngIf=\"\n isResponsibilityRcLinkEnabled &&\n (mode != 'EDIT' || responsibilityForm?.rc?.length <= 1)\n \">\n <!-- <app-cs-radio><div [appTooltip]=\"'Create separate responsibilities for each responsibility center'\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026</div><i class=\"icons\" [appTooltip]=\"'If selected, separate responsibilities will be created for each Responsibility Center.'\" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio> -->\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 1\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(1)\">DISPLAY THE SAME RESPONSIBILITY IN ALL RESPONSIBILITY CENTERS<i\n class=\"icons\" [appTooltip]=\"\n 'If selected, the same responsibility will be linked to each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio>\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 0\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(0)\">\n <div class=\"rc-radio-text\" [appTooltip]=\"\n 'Create separate responsibilities for each responsibility centers'\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">\n CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026\n </div>\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Program -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.PROGRAM\" [attr.id]=\"'PROGRAM'\"\n [class.active]=\"activeSelector === 'program'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'program' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.program?.length > 0 && activeSelector !== 'program'\n \">\n <img [src]=\"ASSETS.case_category\" alt=\"\" *ngIf=\"\n (responsibilityForm?.program?.length == 0 ||\n activeSelector === 'program') &&\n allProgamSelected?.length == 0\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n (responsibilityForm?.program?.length > 0 &&\n activeSelector !== 'program') ||\n allProgamSelected?.length > 0\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Program</label>\n <div class=\"select\" *ngIf=\"allProgamSelected?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('program', true)\"\n aria-placeholder=\"Select the Program or Program Categories that this responsibility relates to.\"></div>\n <!-- <input type=\"text\" (click)=\"activateSelector('program',true)\" placeholder=\"Select Responsibility program(s)\" readonly> -->\n </div>\n <div class=\"selected\" *ngIf=\"allProgamSelected?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container>\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" (click)=\"remove('program', allProgamSelected[0])\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"allProgamSelected[0]?.name ?? '--'\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ allProgamSelected[0]?.name\n ?? \"--\" }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"program.popover()\" placement=\"right\" *ngIf=\"allProgamSelected?.length > 1\">\n +{{ allProgamSelected?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.program?.length>1\" [class.plus]=\"responsibilityForm?.program?.length>2\">\n <span class=\"chip\" *ngFor=\"let program of responsibilityForm?.program\"><i class=\"icons\" *ngIf=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" (click)=\"remove('program',program)\"></i> {{program?.name??'--'}}</span>\n <!- - <button *ngIf=\"responsibilityForm?.program?.length > 2\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.program?.slice(2).length}}</button> - ->\n <button *ngIf=\"responsibilityForm?.linkedProgram?.length > 1\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.linkedProgram?.length - 1}}</button>\n </div> -->\n\n <button *ngIf=\"\n activeSelector !== 'program' && !hiddenList.includes('PROGRAM')\n \" class=\"edit\" type=\"button\" (click)=\"activateSelector('program', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <app-popover #program [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let program of allProgamSelected | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\" [appTooltip]=\"program?.name\" placement=\"bottom\" type=\"black\" delay=\"0\"\n [tooltipMandatory]=\"false\">\n <i *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" class=\"icons\" (click)=\"remove('program', program)\"></i>\n {{ program?.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <div *ngIf=\"responsibilityForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of responsibilityForm?.customTags\">\n <ng-container *ngIf=\"tag?.name?.trim()\">\n <label class=\"vx-control-panel vx-mt-2\">{{\n tag?.name\n }}</label>\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag?.name }}\" />\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Format & Evidence -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.FORMATE_EVIDENCE\"\n [attr.id]=\"'FORMATE_EVIDENCE'\" [class.active]=\"activeSelector === 'formate_evidence'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'formate_evidence' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired == false &&\n this.responsibilityForm.formatAndEvidence.formatFiles.length == 0 &&\n this.responsibilityForm.formatAndEvidence.formatLinks?.length == 0\n \" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\n\n <svg *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired ||\n this.responsibilityForm.formatAndEvidence.formatFiles.length ||\n this.responsibilityForm.formatAndEvidence.formatLinks?.length\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('formate_evidence', $event)\" [mode]=\"'responsibility'\"\n [formatEvidanceData]=\"responsibilityForm?.formatAndEvidence\" [organization_id]=\"organizationId\">\n </app-format-and-evidence>\n </div>\n </div>\n\n <!-- Assessment -->\n <div *ngIf=\"moreOptions?.ASSESSMENT\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n [attr.id]=\"'ASSESSMENT'\" [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm.assessment?.assessment_id\">\n <img *ngIf=\"!responsibilityForm.assessment?.assessment_id\" [src]=\"ASSETS.assessments\" alt=\"im\" />\n\n <svg *ngIf=\"responsibilityForm.assessment?.assessment_id\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">ASSESSMENTS</label>\n <div *ngIf=\"!responsibilityForm.assessment?.assessment_id\" class=\"select\">\n <input type=\"text\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" placeholder=\"Select an assessment for this responsibility\"\n [disabled]=\"responsibilityForm.checkpoints?.length\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.assessment?.assessment_id\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assessment', category)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n }}</span>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-ml-1 vx-text-center\">\n {{ responsibilityForm.assessment?.assessmentDetails?.questions }}\n {{\n responsibilityForm.assessment?.assessmentDetails?.questions > 1\n ? \"Questions\"\n : \"Question\"\n }}\n </div>\n </div>\n\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" class=\"edit\" type=\"button\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS\"\n [attr.id]=\"'CHECKPOINTS'\" [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.checkpoints?.length > 0 &&\n activeSelector !== 'checkpoints'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <button *ngIf=\"responsibilityForm?.checkpoints?.length === 0\" class=\"button\"\n (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"responsibilityForm?.checkpoints?.length === 0\">\n <input [disabled]=\"!responsibilityForm.checkpoints?.length\" type=\"text\"\n (click)=\"activateSelector('checkpoints', true)\" placeholder=\"Add checkpoints for this responsibility\"\n readonly />\n <button [disabled]=\"!responsibilityForm.checkpoints?.length\" (click)=\"activateSelector('checkpoints', true)\"\n type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.checkpoints?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints?.slice(0, 1)\n \">\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"checkpoint?.label\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ checkpoint?.label }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"checkpoint.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm.checkpoints?.length > 1\">\n +{{ responsibilityForm.checkpoints?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"responsibilityForm.checkpoints?.length>1\" [class.plus]=\"responsibilityForm.checkpoints?.length>2\">\n <span class=\"chip\" *ngFor=\"let checkpoint of responsibilityForm.checkpoints?.slice(0,1)\">{{checkpoint?.label}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm.checkpoints?.length > 1\" type=\"button\" appPopover (click)=\"checkpoint.popover()\" placement=\"right\">+{{responsibilityForm.checkpoints?.length- 1}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <div *ngIf=\"this.responsibilityForm.checkpoints?.length\" class=\"assessment-text\">\n <i class=\"icons alert-icon\"></i>\n <span>You can now use the new <strong>Checkpoints </strong>or\n <strong>Assessments</strong> feature instead of the old checkpoints\n functionality to create analytical questions.\n <button class=\"remove-btn\" (click)=\"onRemoveCheckpoints('checkpoint')\">\n Remove Checkpoints\n </button>\n to continue.</span>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- New Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS_NEW\"\n [attr.id]=\"'CHECKPOINTS-NEW'\" [class.active]=\"activeSelector === 'checkpoints-new'\">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"checkpointCount > 0 && activeSelector !== 'checkpoints'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <span class=\"checkpoint-version\"> V2.0</span> -->\n <!-- <button class=\"button\"\n (click)=\"activateSelector('checkpoints-new',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"checkpointCount === 0\">\n <input type=\"text\" (click)=\"activateSelector('checkpoints-new', true)\"\n placeholder=\"Add checkpoints for this responsibility\" readonly />\n <button (click)=\"activateSelector('checkpoints-new', true)\" type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"checkpointCount > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{ checkpointCount }}\n {{ checkpointCount > 1 ? \"Questions\" : \"Question\" }}</span>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"checkpointCount > 0\">\n <span class=\"chip\">\n <i class=\"icons\" (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n {{checkpointCount}} {{checkpointCount > 1 ? 'Questions': 'Question'}}</span>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints-new'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints-new', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RISK_CLASSIFICATION\"\n [attr.id]=\"'RISK_CLASSIFICATION'\" [class.active]=\"activeSelector === 'riskCalculator'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'riskCalculator' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm?.riskClass\">\n <svg *ngIf=\"responsibilityForm?.riskClass\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Risk Classification\n <button (click)=\"activateSelector('riskCalculator', true)\" class=\"button\">\n + Risk Calculator\n </button>\n </label>\n\n <div class=\"classification\">\n <label class=\"low\" *ngFor=\"let risk of riskClassification\" [ngClass]=\"[risk.class]\">\n <input type=\"radio\" name=\"classification\" [(ngModel)]=\"responsibilityForm.riskClass\"\n [value]=\"risk?.value\" />\n <span>{{ risk?.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.REVIEWER\" [attr.id]=\"'REVIEWER'\"\n [class.active]=\"\n activeSelector === 'reviewerFrequency' || activeSelector === 'reviewer'\n \" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.reviewers?.list?.length == 0 ||\n activeSelector === 'reviewer'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.reviewers?.list?.length > 0 &&\n activeSelector !== 'reviewer'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n responsibilityForm?.groupReviewers?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\" placeholder=\"Select Reviewer\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.reviewers?.list?.length > 0 ||\n responsibilityForm?.groupReviewers?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"reviewer.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"!featureFlag_groups\" [class.more-one]=\"responsibilityForm?.reviewers?.list?.length>1\"\n [class.plus]=\"responsibilityForm?.reviewers?.list?.length>2\">\n <span class=\"chip\" *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('reviewer',reviewer)\"></i> {{reviewer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.reviewers?.list?.length > 2\" type=\"button\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">+{{responsibilityForm?.reviewers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.reviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('reviewer', responsibilityForm?.reviewers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.reviewers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.reviewers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.length - 1 }}\n </button>\n </div>\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.reviewers?.list.length > 0 &&\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n &\n </div>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupReviewer',\n responsibilityForm?.groupReviewers?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\">\n +{{ responsibilityForm?.groupReviewers?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 \">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('reviewer',responsibilityForm?.reviewers?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.reviewers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.reviewers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.reviewers?.list?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 && responsibilityForm?.groupReviewers?.list?.length > 0\">&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('groupReviewer',responsibilityForm?.groupReviewers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.groupReviewers?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.groupReviewers?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.groupReviewers?.list?.length - 1}}</button>\n\n </div>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'reviewer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('reviewer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-cs-radio [checked]=\"responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('sequential')\" [class.disabled]=\"\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n SEQUENTIAL<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review one at a time in the sequence defined by you.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio [checked]=\"!responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('anyReviewer')\">\n ANY REVIEWER CAN MARK THIS AS REVIEWED<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-popover #reviewer [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.groupReviewers?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupReviewer', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OVERSEER\" [attr.id]=\"'OVERSEER'\"\n [class.active]=\"\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n \" [class.disabled]=\"\n activeSelector &&\n !['overseerNotify', 'overseerNotify'].includes(activeSelector) &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.oversight\" alt=\"\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseers?.notifyList?.length == 0) ||\n activeSelector === 'overseerNotify' ||\n activeSelector === 'overseer'\n \" />\n <svg class=\"checkIcon\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseers?.notifyList?.length > 0) &&\n !(\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n )\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseersGroups?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseer', true)\"\n placeholder=\"Who should have oversight of the responsibility?\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseersGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseer', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseers.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.list?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.list?.length>2\" *ngIf=\"!featureFlag_groups\" >\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseer',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.list?.length > 2\" type=\"button\" appPopover (click)=\"overseers.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('overseer', responsibilityForm?.overseers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"overseerUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.list.length > 0 &&\n responsibilityForm?.overseersGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroup',\n responsibilityForm?.overseersGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.list[0].group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.list[0].group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\">\n +{{ responsibilityForm?.overseersGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseer',responsibilityForm?.overseers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"overseerUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0 && responsibilityForm?.overseersGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroup',responsibilityForm?.overseersGroups?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.list[0].group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.list[0].group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.list?.length -1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseerNotify', true)\"\n placeholder=\"Who should be notified if the responsibility is not complet...\" readonly [appTooltip]=\"\n 'Who should be notified if the responsibility is not completed?'\n \" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.notifyList?.length > 0 ||\n responsibilityForm?.overseersGroups?.notifyList?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList?.slice(\n 0,\n 1\n )\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseerNotifyList', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notify.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.notifyList?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.notifyList?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 2\" type=\"button\" appPopover (click)=\"notify.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.notifyList?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerNotifyList',\n responsibilityForm?.overseers?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"notifyUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.notifyList.length > 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroupNotifyList',\n responsibilityForm?.overseersGroups?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notifyGroup.popover()\" placement=\"right\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 1\n \">\n +{{\n responsibilityForm?.overseersGroups?.notifyList?.length - 1\n }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerNotifyList',responsibilityForm?.overseers?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.notifyList[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.notifyList[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\" class=\"count user\" appPopover (click)=\"notifyUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.notifyList?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0 && responsibilityForm?.overseersGroups?.notifyList?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroupNotifyList',responsibilityForm?.overseersGroups?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.notifyList[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 1\" class=\"count\" appPopover (click)=\"notifyGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.notifyList?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseerNotify'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseerNotify', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #overseers [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseers of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseers)\"></i>\n {{ overseers?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseersGroups?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroup', overseer)\"></i>\n {{ overseer?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notify [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.overseersGroups?.notifyList\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroupNotifyList', group)\"></i>\n {{ group?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Assurance -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.ASSURANCE\" [attr.id]=\"'ASSURANCE'\"\n [class.active]=\"activeSelector === 'assurance'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assurance' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.assuranceList?.length == 0 ||\n activeSelector === 'assurance'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.assuranceList?.length > 0 &&\n activeSelector !== 'assurance'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Assurance</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.assuranceList?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('assurance', true)\"\n aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\"></div>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.assuranceList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let assurance of responsibilityForm?.assuranceList?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assurance', assurance)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assurance.category_name\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assurance.category_name\n }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"assurance.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assuranceList?.length > 1\">\n +{{ responsibilityForm?.assuranceList?.slice(1).length }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assurance', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #assurance [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let assurance of responsibilityForm?.assuranceList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assurance', assurance)\"></i>\n {{ assurance.category_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Requires Audit -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.REQUIRES_AUDIT && responsibilityForm.rc.length > 0\" [attr.id]=\"'REQUIRES_AUDIT'\"\n [class.active]=\"activeSelector === 'requires_audit'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'requires_audit' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.requiresAuditList?.length == 0 ||\n activeSelector === 'requires_audit'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.requiresAuditList?.length > 0 &&\n activeSelector !== 'requires_audit'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REQUIRES AUDIT?</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.requiresAuditList?.length == 0\">\n <input type=\"text\" placeholder=\"If yes, select an Audit Category.\" readonly\n (click)=\"activateSelector('requires_audit', true)\" />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.requiresAuditList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('requires_audit', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.requiresAuditList[0]?.category_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.requiresAuditList[0]?.category_name\n }}</span>\n </div>\n\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('requires_audit', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n <!-- class=\"icons\"></i>\n Edit</button> -->\n </div>\n <ng-container *ngIf=\"responsibilityForm?.requiresAuditList?.length\">\n <label class=\"vx-control-panel vx-mt-8\">\n SAMPLE SIZE\n <app-cs-switch [(ngValue)]=\"isSample\" (ngValueChange)=\"switchEnable($event)\"></app-cs-switch>\n </label>\n <div class=\"sample-part\" [class.disabled]=\"!isSample\">\n <app-cs-radio value=\"0\" class=\"sample-radio\" (click)=\"selectedSampleData(0)\"\n [checked]=\"selectedSample === 0\">\n <div class=\"name\">COUNT</div>\n <input type=\"number\" placeholder=\"--\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"sampleValue\" />\n </app-cs-radio>\n <div class=\"or\">OR</div>\n <app-cs-radio value=\"1\" class=\"sample-radio\" (click)=\"selectedSampleData(1)\"\n [checked]=\"selectedSample === 1\">\n <div class=\"name\">PERCENTAGE</div>\n <input type=\"number\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"samplePercentage\"\n placeholder=\"--\" />\n </app-cs-radio>\n </div>\n <label class=\"vx-control-panel vx-mt-8\">SET A REMINDER IF THE AUDIT PLAN IS NOT CREATED.</label>\n <div class=\"reminder-part\">\n Send reminder every\n <input type=\"number\" value=\"2\" [(ngModel)]=\"sendAuditRemindersValue\" />\n Day by\n <div class=\"picker-group\">\n <input class=\"time\" aria-label=\"12hr format\" [(ngModel)]=\"auditTime\" [ngxTimepicker]=\"dailyTime\"\n placeholder=\"auditTime.toUpperCase()\" type=\"text\" [min]=\"currentTime\" readonly />\n <i class=\"icons\"></i>\n <ngx-material-timepicker #dailyTime [defaultTime]=\"auditTime\">\n </ngx-material-timepicker>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Link of GRC objects -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.GRC_OBJECTS && responsibilityForm.rc.length > 0\" [attr.id]=\"'GRC_OBJECTS'\"\n [class.active]=\"activeSelector === 'GRC_OBJECTS'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'GRC_OBJECTS' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length == 0 ||\n activeSelector === 'GRC_OBJECTS'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length > 0 &&\n activeSelector !== 'GRC_OBJECTS'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK GRC OBJECT(S)</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.selectedGRCObjects?.length === 0\">\n <input type=\"text\" placeholder=\"Select GRC object(s) to link with this responsibility\" readonly\n (click)=\"activateSelector('GRC_OBJECTS', true)\" />\n </div>\n <ng-container *ngIf=\"responsibilityForm?.selectedGRCObjects?.length\">\n <ng-container *ngFor=\"let selectedGRC of GRC_TYPE_ARRAY; let i = index\">\n <div *ngIf=\"grcDataWithTypes[selectedGRC]?.length\" class=\"selected vx-mb-2\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"let grc of grcDataWithTypes[selectedGRC]?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('GRC_OBJECTS', grc, 0)\"></i>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\n {{ selectedGRC | titlecase }}\n </div>\n\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"grc?.name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ grc?.name }}</span>\n </ng-container>\n\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"popoverGRC.popover()\" placement=\"left\"\n *ngIf=\"grcDataWithTypes[selectedGRC]?.length > 1\">\n +{{ grcDataWithTypes[selectedGRC].length - 1 }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'GRC'\" class=\"edit\" type=\"button\" (click)=\"\n selectedGRCTab = grcDataWithTypes[selectedGRC][0]?.type;\n getOtherGRCObjects();\n activateSelector('GRC_OBJECTS', true)\n \">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #popoverGRC [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let grc of grcDataWithTypes[selectedGRC] | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('GRC_OBJECTS', grc, j + 1)\"></i>\n {{ grc.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<app-users-radio-list *ngIf=\"activeSelector === 'assignors'\" [usersList]=\"assignorsList\"\n [selectedUsers]=\"responsibilityForm.assignors.list\" [itemEmailKey]=\"'member_email'\" [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('assignors', $event)\"\n (closeUsersList)=\"activeDeselector()\" [loaded]=\"assignorsListLoaded\">\n</app-users-radio-list>\n\n<ng-container *ngIf=\"activeSelector === 'assignees'\">\n <app-group-users-list *ngIf=\"\n isEntrust || responsibilityForm?.assignees?.whoCanComplete === 'ANY_ONE'\n \" [openedFrom]=\"openedFrom\" [usersList]=\"assigneesList\" [fromResponsibility]=\"'Assignee'\" [groupsList]=\"groupsList\"\n [assigneeGroupsList]=\"groupAssigneeList\" [selectedUsers]=\"responsibilityForm?.assignees?.list\"\n [selectedGroups]=\"responsibilityForm?.assigneeGroups?.list\" [userIdKey]=\"'my_member_id'\" [groupIdKey]=\"'group_id'\"\n [loader]=\"userListLoader || assignorsListLoader\" (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"activeDeselector()\" [groupsEnabled]=\"featureFlag_groups\">\n </app-group-users-list>\n <app-users-radio-list *ngIf=\"\n !isEntrust && responsibilityForm.assignees.whoCanComplete !== 'ANY_ONE'\n \" [itemEmailKey]=\"'employee_email'\" [usersList]=\"assigneesList\" [selectedUsers]=\"responsibilityForm.assignees.list\"\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" [fromResponsibility]=\"'Assignee'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"activeDeselector()\"\n [loaded]=\"assigneesListLoaded\">\n </app-users-radio-list>\n</ng-container>\n\n<app-checkpoints *ngIf=\"activeSelector === 'checkpoints'\"\n [checkpointInstruction]=\"responsibilityForm?.checkpointInstruction\" [checkpointData]=\"responsibilityForm?.checkpoints\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\" (closeCheckPoint)=\"activeDeselector()\"></app-checkpoints>\n<app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [frequencyDetails]=\"frequencyDetails\"\n [feature]=\"feature\" [onCompletionResponsibility]=\"responsibilityDetails?.onCompletionResponsibility\"\n (selectedFrequency)=\"frequencyData($event)\" [mode]=\"'responsibility'\" (closeFrequency)=\"activeDeselector()\">\n</app-frequency-container>\n\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [loaded]=\"rcListLoaded\"\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"\n mode == 'EDIT' && responsibilityCenterType === 0 ? true : false\n \" [selectedResponsibilityCenters]=\"responsibilityForm.rc\" [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"activeDeselector()\">\n</app-responsibility-centers-list>\n\n<app-category-multi-select *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categories\"\n [allCategories]=\"allCategories\" [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"responsibilityForm.category\"\n (saveSelectedCategory)=\"saveSelectedList('category', $event)\" (closeCategoriesList)=\"activeDeselector()\">\n</app-category-multi-select>\n\n<!-- Program List Popup -->\n<app-list-container *ngIf=\"activeSelector === 'program'\" (close)=\"activeDeselector()\">\n <app-program-list body (itemsSelectedChange)=\"onItemsSelectedChange($event)\" [selectedItems]=\"selectedPrograms\"\n [url]=\"programListUrl\"></app-program-list>\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-w-100\" footer>\n <div class=\"left-side vx-fs-12 vx-d-flex\">\n <ng-container *ngIf=\"allProgamSelected.length > 0\">\n <button\n class=\"selected-count-box vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\">\n {{ allProgamSelected.length }}\n </button>\n <span class=\"selected-text\">\n Program\n {{ allProgamSelected.length > 1 ? \"Categories\" : \"Category\" }}\n Selected</span>\n </ng-container>\n </div>\n <div class=\"right-side vx-d-flex\">\n <button class=\"cancelBtn\" (click)=\"activeDeselector()\">Cancel</button>\n <button class=\"nextBtn\" (click)=\"activeDeselector(); selectCategory()\">\n Next <i class=\"icons\"></i>\n </button>\n </div>\n </div>\n</app-list-container>\n\n<app-owner-list *ngIf=\"activeSelector === 'reviewer' && !featureFlag_groups\" [listHeading]=\"'Select a Reviewer'\"\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [showWorkflow]=\"true\"\n [selectedUsers]=\"responsibilityForm.reviewers.list\" [userIdKey]=\"'employee_id'\" [itemEmailKey]=\"'employee_email'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" (closeUsersList)=\"activeDeselector()\" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'reviewer' && featureFlag_groups\" [selectedReviewer]=\"true\"\n [userlist]=\"reviewerMemberIdsList\" [groupEnabled]=\"true\" [groupList]=\"groupReviewerList\"\n [selectedGroups]=\"responsibilityForm?.groupReviewers?.list\" [selectedUsers]=\"responsibilityForm?.reviewers?.list\"\n (cancel)=\"activeDeselector()\" (save)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [loading]=\"userListLoader || assignorsListLoader\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n<app-owner-list *ngIf=\"activeSelector === 'overseer' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [selectedUsers]=\"responsibilityForm.overseers.list\"\n [userIdKey]=\"'employee_id'\" [fromResponsibility]=\"'Overseer'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseer', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseer' && featureFlag_groups\" [groupEnabled]=\"true\"\n [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.list\"\n [userlist]=\"overseersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseer', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'overseerNotify' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [fromResponsibility]=\"'Overseer'\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseerNotify', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\"></app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseerNotify' && featureFlag_groups\" [userlist]=\"overseersList\"\n [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\"\n [selectedGroups]=\"responsibilityForm?.overseersGroups?.notifyList\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseerNotify', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'assurance'\" [singularText]=\"'Test Category selected'\"\n [pluralText]=\"'Test Categories selected'\" [searchPlaceholder]=\"'Search Test Category...'\"\n [listHeading]=\"'Select Test Categories'\" [usersList]=\"assuranceCategoriesList\"\n [noDataText]=\"'No Test Categories Found'\" [selectedUsers]=\"responsibilityForm.assuranceList\"\n [userIdKey]=\"'category_id'\" [itemEmailKey]=\"'category_name'\" [itemNameKey]=\"'category_name'\"\n (saveSelectedList)=\"saveSelectedList('assurance', $event)\" (closeUsersList)=\"activeDeselector()\"\n [searchPlaceholder]=\"'Search Category'\">\n</app-owner-list>\n\n<app-audit-category-list *ngIf=\"activeSelector === 'requires_audit'\" (closeList)=\"activeDeselector()\"\n [auditCategory]=\"assuranceRequiresAuditList\" (saveSelectedList)=\"saveSelectedList('requires_audit', $event)\"\n [selectedData]=\"responsibilityForm?.requiresAuditList[0]\"></app-audit-category-list>\n\n<app-loader-inline *ngIf=\"(loader && this.mode === 'EDIT') || entrustLoader\"></app-loader-inline>\n<app-framework-list *ngIf=\"activeSelector === 'framework'\" (assignControl)=\"assignFromFramework($event)\"\n [previousSelectedValues]=\"selectedFrameworkValues\" (closeFramework)=\"activeDeselector()\"\n (entrustFramework)=\"entrustFramework($event)\"></app-framework-list>\n\n<!-- risk-calculator here -->\n<app-risk-classification *ngIf=\"activeSelector === 'riskCalculator'\" [currentRiskValue]=\"responsibilityForm.riskClass\"\n (saveList)=\"saveSelectedList('calculatedrisk', $event)\" (closeList)=\"activeDeselector()\">\n</app-risk-classification>\n\n<app-review-frequency *ngIf=\"activeSelector === 'reviewerFrequency'\" [reviewCompleteDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewCompleteDays\n \" [reviewNOtCompletedDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewNOtCompletedDays\n \" (saveReviewFrequency)=\"saveSelectedList('reviewFrequency', $event)\" (closeReviewFrequency)=\"\n activeDeselector();\n activateSelector('reviewer', false);\n responsibilityForm.reviewers.list = [];\n responsibilityForm.groupReviewers.list = []\n \" (backToUserList)=\"activeDeselector(); activateSelector('reviewer', true)\">\n</app-review-frequency>\n\n<app-assessment-list *ngIf=\"isAssessment\" [program_ids]=\"responsibilityForm.program[0]?._id\" (cancelAssessment)=\"\n isAssessment = false; activateSelector('isAssessment', false)\n \" [isEdit]=\"responsibilityForm?.assessment?.assessment_id ? true : false\"\n [selectedAssessment]=\"responsibilityForm?.assessment\" (onAssessmentSelect)=\"\n onAssessmentSelect($event); activateSelector('isAssessment', false)\n \"></app-assessment-list>\n\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>\n\n<div class=\"import\" *ngIf=\"activeSelector === 'checkpoints-new'\">\n <app-create-assessment-container #editor [openPortal]=\"'RESPONSIBILITY_CHECKPOINT'\"\n (postAssessment)=\"postAssessment($event)\" (setIsUploaded)=\"setIsUploaded($event)\"\n [checkpointJSON]=\"responsibilityForm.new_checkpoints\">\n </app-create-assessment-container>\n</div>\n\n<app-grc-object-list *ngIf=\"activeSelector === 'GRC_OBJECTS'\" [grcObject]=\"grcList\"\n [selectedGRC]=\"responsibilityForm.selectedGRCObjects | refDisconnect\" [loader]=\"grcLoader\" [tableCard]=\"otherGRCCard\"\n [selectedTab]=\"selectedGRCTab\" [cardLoader]=\"grcTabLoader\" (getOtherGRCObjects)=\"getOtherGRCObjects($event)\"\n (saveOtherGRC)=\"saveSelectedList('GRC_OBJECTS', $event)\"\n (closeOtherGRC)=\"activateSelector('GRC_OBJECTS', false)\"></app-grc-object-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::ng-deep .workflw-compliance{display:block;position:relative}::ng-deep .workflw-compliance vcomply-editor .editor-container{border-radius:4px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block{min-height:72px;padding:11px 15px;line-height:20px;font-size:14px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul li{list-style:unset}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .workflw-compliance 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 .workflw-compliance 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 .workflw-compliance .sample-part{display:flex;align-items:center;margin-bottom:4px}::ng-deep .workflw-compliance .sample-part .sample-radio{width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item{position:relative;width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .radio{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:8px 8px 8px 36px;margin:0;max-width:100%;width:100%;display:flex;align-items:center;justify-content:space-between;pointer-events:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value .name{color:#747576;font-size:11px;font-weight:500;text-transform:uppercase}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input{border:1px solid #dcdcdc;background:#fff;border-radius:4px;height:24px;width:64px;text-align:center;padding:4px;color:#747576;font-size:13px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input:focus{outline:none;box-shadow:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~svg{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~.value{border:1px solid #34aa44;background:#eefcf0;pointer-events:auto}::ng-deep .workflw-compliance .sample-part .or{color:#161b2f;font-size:9px;font-weight:500;text-transform:uppercase;margin:0 10px}::ng-deep .workflw-compliance .sample-part.disabled{pointer-events:none}::ng-deep .workflw-compliance .sample-part.disabled .sample-radio .radio-item .value{background:#fbfbfb;border:1px solid #f1f1f1}::ng-deep .workflw-compliance .reminder-part{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:4px 12px;color:#747576;font-size:12px;display:flex;align-items:center}::ng-deep .workflw-compliance .reminder-part input{width:30px;border:none;border-radius:0;border-bottom:1px solid #dbdbdb;text-align:center;color:#747576;font-size:13px;font-weight:500;margin:0 4px}::ng-deep .workflw-compliance .reminder-part input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group{position:relative}::ng-deep .workflw-compliance .reminder-part .picker-group input{border:1px solid #f1f1f1!important;border-radius:4px!important;width:104px!important;height:28px!important;margin-left:8px!important;padding:6px 8px!important;cursor:pointer;color:#747576!important;font-size:12px!important;font-weight:500!important;text-align:left!important}::ng-deep .workflw-compliance .reminder-part .picker-group input:hover,::ng-deep .workflw-compliance .reminder-part .picker-group input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group i{color:#1e5dd3;position:absolute;top:6px;right:10px;font-size:16px}.assessment-text{color:#747576;font-size:11px;display:flex;align-items:center;padding:0 8px;margin:-16px 0 20px}.assessment-text i.alert-icon{color:#f2bf19;font-size:16px;margin-right:8px}.assessment-text strong{font-weight:600}.assessment-text button.remove-btn{background:transparent;border-radius:0;border:none;color:#1e5dd3;font-size:10px;font-weight:600;padding:0;margin:0}.import{position:fixed;inset:0 30px 0 0;z-index:-1;width:calc(100vw - 30px)}.wf-action-list ul.action-item li.multiple-program{background:#f8f8f8}.wf-action-list ul.action-item li.multiple-program .avatar-card{padding:2px 7.5px}.wf-action-list ul.action-item li.multiple-program .avatar-card span.value{color:#747576;font-size:11px;font-weight:600;width:unset}.primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}.edit-due-date{display:flex;align-items:baseline;justify-content:space-between}.left-side{color:#707070}.right-side button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}.right-side button i{margin-left:8px;font-size:11px}.right-side button:disabled{background:#f1f1f1!important;color:#747576!important;opacity:1}.right-side button.cancelBtn{background:transparent!important;color:#eb2424!important}.selected-count-box{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem;position:relative}.selected-text{color:#707070;font-size:11px;font-weight:500;position:fixed;padding-left:2.5rem}\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 .chipContainer button.countBtn.blueBg{background:#1e5dd3}::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}.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: i12.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: i12.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i12.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i12.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i13.CreateAssessmentContainerComponent, selector: "app-create-assessment-container", inputs: ["openPortal", "assessmentJSON", "checkpointJSON"], outputs: ["setIsUploaded", "postAssessment"] }, { kind: "component", type: i14.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i15.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i16.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i17.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i18.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i19.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"], outputs: ["closePopoverEvent"] }, { kind: "directive", type: i20.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i12.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i21.NgxMaterialTimepickerComponent, selector: "ngx-material-timepicker", inputs: ["cancelBtnTmpl", "editableHintTmpl", "confirmBtnTmpl", "ESC", "enableKeyboardInput", "preventOverlayClick", "disableAnimation", "appendToInput", "hoursOnly", "defaultTime", "timepickerClass", "theme", "min", "max", "ngxMaterialTimepickerTheme", "format", "minutesGap"], outputs: ["timeSet", "opened", "closed", "hourSelected", "timeChanged"] }, { kind: "directive", type: i21.TimepickerDirective, selector: "[ngxTimepicker]", inputs: ["format", "min", "max", "ngxTimepicker", "value", "disabled", "disableClick"] }, { kind: "component", type: i22.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i23.SmileyDialogInlineComponent, selector: "app-smiley-dialog-inline", inputs: ["message", "actionButtons"], outputs: ["action", "closeSmiley"] }, { kind: "directive", type: i24.ClickOutsideDirective, selector: "[clickOutside]", outputs: ["clickOutside"] }, { kind: "component", type: i25.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", "groupList", "selectedGroups"], outputs: ["save", "cancel", "reviewerWorkflowTypeChange", "fetchUserData"] }, { kind: "component", type: i26.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i27.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: i28.GrcObjectListComponent, selector: "app-grc-object-list", inputs: ["grcObject", "currentPage", "loader", "tableCard", "selectedTab", "cardLoader", "onEditGRCId", "mode", "selectedGRC"], outputs: ["saveOtherGRC", "closeOtherGRC", "getOtherGRCObjects"] }, { kind: "component", type: i29.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData"], outputs: ["updateFiles"] }, { kind: "component", type: i30.ProgramListComponent, selector: "app-program-list", inputs: ["items", "selectedItems", "url"], outputs: ["itemSelected", "itemDeselected", "itemsSelectedChange"] }, { kind: "component", type: i31.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: i32.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: i33.CategoryMultiSelectComponent, selector: "app-category-multi-select", inputs: ["categoryList", "allCategories", "categoryIdKey", "selectedCategories"], outputs: ["saveSelectedCategory", "closeList", "closeCategoriesList"] }, { kind: "component", type: i34.CheckpointsComponent, selector: "app-checkpoints", inputs: ["checkpointData", "checkpointInstruction"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i35.ReviewFrequencyComponent, selector: "app-review-frequency", inputs: ["reviewCompleteDays", "reviewNOtCompletedDays"], outputs: ["closeReviewFrequency", "backToUserList", "saveReviewFrequency"] }, { kind: "component", type: i36.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType", "onCompletionResponsibility"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i37.FrameworkListComponent, selector: "app-framework-list", inputs: ["previousSelectedValues", "headerText", "workflowPage", "policy", "frameWorkList", "selectedFrameWork", "selectedCategories"], outputs: ["entrustFramework", "closeFramework", "assignControl"] }, { kind: "component", type: i38.RiskClassificationComponent, selector: "app-risk-classification", inputs: ["currentRiskValue"], outputs: ["saveList", "closeList"] }, { kind: "component", type: i39.AuditCategoryListComponent, selector: "app-audit-category-list", inputs: ["selectedData", "selectedIndex", "auditCategory"], outputs: ["closeList", "saveSelectedList"] }, { kind: "component", type: i40.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids", "isFullScreen"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i41.ListContainerComponent, selector: "app-list-container", inputs: ["heading"], outputs: ["close"] }, { kind: "pipe", type: i15.SlicePipe, name: "slice" }, { kind: "pipe", type: i15.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i42.RefDisconnectPipe, name: "refDisconnect" }] }); }
|
|
3957
3957
|
}
|
|
3958
3958
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowComplianceComponent, decorators: [{
|
|
3959
3959
|
type: Component,
|
|
3960
|
-
args: [{ selector: 'app-workflow-compliance', template: "<div class=\"workflw-compliance\" *ngIf=\"!showSmiley\">\n <!-- Behalf -->\n <div *ngIf=\"mode !== 'EDIT'\" class=\"form-group-row\" [class.active]=\"activeSelector === 'assignors'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignors' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <img [src]=\"ASSETS.im_creating\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length == 0 ||\n activeSelector === 'assignors'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">I am creating this responsibility on behalf of someone else\n <app-cs-switch [ngValue]=\"responsibilityForm.assignors.enable\" (ngValueChange)=\"\n responsibilityForm.assignors.enable = $event;\n responsibilityForm.assignors.list = []\n \">\n </app-cs-switch>\n </label>\n <div class=\"select\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length === 0 ||\n activeSelector === 'assignors'\n \">\n <input type=\"text\" (click)=\"activateSelector('assignors', true)\"\n placeholder=\"Who is responsible for managing this responsibility?\" readonly\n [disabled]=\"!responsibilityForm?.assignors?.enable\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignors', b_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"b_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ b_user.member_name }}</span>\n </ng-container>\n <button *ngIf=\"responsibilityForm?.assignors?.list?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">\n +{{ responsibilityForm?.assignors?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\">\n <span class=\"chip\" *ngFor=\"let b_user of responsibilityForm?.assignors?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignors',b_user)\"></i>\n {{b_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignors?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignors?.list?.slice(2).length}}</button>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignors'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignors', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #behalf [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list | slice : 2;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignors', b_user)\"></i>\n {{ b_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p *ngIf=\"invalidType === 'whom'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for managing this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- What -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'framework'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'responsibilityName' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <img [src]=\"ASSETS.what\" alt=\"im\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() === '' ||\n focus.responsibilityName\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n What? <span class=\"required\">*</span>\n <button *ngIf=\"\n isFrameworkAvailable &&\n mode !== 'EDIT' &&\n openedFrom !== 'RISK_TREATMENT' &&\n assessmentDetails?.assessment_type !== 'compliance_audit'\n \" (click)=\"activateSelector('framework', true)\" class=\"button\">\n Select From A framework\n </button>\n </label>\n <span *ngIf=\"responsibilityForm?.responsibility?.keyResponsibility\" class=\"indicator\"\n [appTooltip]=\"'This responsibility is marked as key responsibility.'\" placement=\"bottom\" type=\"black\"\n delay=\"0\" [tooltipMandatory]=\"true\">\n <i class=\"icons\"></i>\n </span>\n <input *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() == '' || !isEditWhat\n \" type=\"text\" [ngModel]=\"responsibilityForm.responsibility.name\" placeholder=\"What is the responsibility?\"\n (change)=\"whatChanged($event)\" (focusin)=\"activateSelector('responsibilityName', true)\"\n (focusout)=\"activeDeselector()\" (clickOutside)=\"testFunction()\" #what />\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() != '' && isEditWhat\n \">\n <div class=\"chip-container\">\n <span class=\"value\">{{\n responsibilityForm.responsibility?.name\n }}</span>\n </div>\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" class=\"edit\" type=\"button\"\n (click)=\"onEditWhat($event)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'what'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please enter a name for this responsibility.\n </p>\n <div class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.responsibility?.keyResponsibility\" (ngValueChange)=\"\n responsibilityForm.responsibility.keyResponsibility = $event\n \">Key Responsibility\n </app-cs-switch>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Who -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <img [src]=\"ASSETS.case_assignees\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 ||\n activeSelector === 'assignees'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"edit-due-date\">\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\n <div *ngIf=\"allowEditDueDateFeatureFlag && false\" class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.allowEditDueDate\"\n (ngValueChange)=\"responsibilityForm.allowEditDueDate = $event\">ALLOW ASSIGNEE TO EDIT COMPLETED WORK<i\n class=\"icons\" [appTooltip]=\"\n 'If it\u2019s enabled, the assignee will have the option to modify a previously completed due date.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-switch>\n </div>\n </div>\n <div class=\"select vx-mt-0\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list?.length == 0 &&\n featureFlag_groups))\n \">\n <input type=\"text\" (click)=\"activateSelector('assignees', true)\"\n placeholder=\"Who is responsible for completing the responsibility?\" readonly />\n </div>\n\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.assignees?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.assignees?.list?.length > 0 ||\n responsibilityForm?.assigneeGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignees', e_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"e_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ e_user.member_name }}</span>\n </ng-container>\n <button\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\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.slice(1).length }}\n </button>\n </div>\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('assignees', responsibilityForm?.assignees?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assignees?.list[0]?.employee_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assignees?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"left\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n responsibilityForm?.assigneeGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupassignees',\n responsibilityForm?.assigneeGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\">\n +{{ responsibilityForm?.assigneeGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assignees?.length>1\" [class.plus]=\"responsibilityForm?.assignees?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let e_user of responsibilityForm?.assignees?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignees',e_user)\"></i>\n {{e_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignees?.list?.slice(2).length}}</button>\n </div> -->\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('assignees',responsibilityForm?.assignees?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assignees?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assignees?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.assignees?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0 && responsibilityForm?.assigneeGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\" >\n <i *ngIf=\"(!allGroupAssignee || mode !== 'EDIT')\" class=\"icons cross vx-mr-1\" (click)=\"remove('groupassignees',responsibilityForm?.assigneeGroups?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assigneeGroups?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assigneeGroups?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.assigneeGroups?.list?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignees'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignees', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.assigneeGroups?.list\n | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i *ngIf=\"\n !featureFlag_groups ||\n (featureFlag_groups &&\n (!allGroupAssignee || mode !== 'EDIT'))\n \" class=\"icons\" (click)=\"remove('groupassignees', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <p *ngIf=\"invalidType === 'who'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for completing this\n responsibility.\n </p>\n <ng-container *ngIf=\"!isGroupAssigned\">\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ALL'\"\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ALL'\" [name]=\"'what'\">ALL SELECTED PERSONS NEED\n TO COMPLETE THIS<i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each person.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"\n responsibilityForm.assignees.whoCanComplete = 'ANY_ONE'\n \" [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\" [name]=\"'what'\">ANY SELECTED PERSON\n CAN COMPLETE THIS\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, only one responsibility will be created.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n <div class=\"switch-row align-right\" *ngIf=\"\n mode == 'EDIT' &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list.length === 0 &&\n featureFlag_groups))\n \">\n <app-cs-switch (ngValueChange)=\"openAssigneeChangeConfirmation($event)\" [ngValue]=\"\n responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\n \">\n ANY SELECTED PERSON CAN COMPLETE THIS\n </app-cs-switch>\n </div>\n </ng-container>\n <app-popover #assignees [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- When? -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n !responsibilityForm?.frequency || activeSelector === 'frequency'\n \">\n <img [src]=\"ASSETS.when\" alt=\"im\" *ngIf=\"!responsibilityForm?.frequency || activeSelector === 'frequency'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.frequency &&\n activeSelector !== 'frequency' &&\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency != '5~0~0~0'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When? <span class=\"required\">*</span></label>\n <div *ngIf=\"\n responsibilityForm?.frequency == '' ||\n responsibilityForm?.frequency == '5~0~0~0'\n \" class=\"select button-sec\">\n <input type=\"text\" (click)=\"activateSelector('frequency', true)\" [placeholder]=\"frequencyPlaceholder\"\n readonly />\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <div *ngIf=\"\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency !== '5~0~0~0'\n \" class=\"selected button-sec\">\n <span class=\"chip\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\" delay=\"0\" type=\"black\"\n [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\n (click)=\"activateSelector('frequency', true)\">\n <i class=\"icons\"></i>Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'when'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the frequency of occurrence for this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'notes'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'notes' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \">\n <img [src]=\"ASSETS.notes\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() === '' ||\n focus.description\n \" />\n\n <svg class=\"checkIcon\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Notes</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.description\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n link: true,\n id: 'notes',\n placeholder:\n 'Add more information about completing the responsibility'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Objective -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OBJECTIVE\" [attr.id]=\"'OBJECTIVE'\"\n [class.active]=\"activeSelector === 'objective'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'objective' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <img [src]=\"ASSETS.objectives\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() === '' ||\n focus.objective\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Objective</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.objective\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n id: 'objective',\n link: true,\n placeholder:\n 'This option lets you specify an objective for the responsibility.'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RC\" [attr.id]=\"'RC'\"\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\n \">\n <img [src]=\"ASSETS.responsibility_center\" alt=\"\"\n *ngIf=\"responsibilityForm?.rc?.length == 0 || activeSelector === 'rc'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center </label>\n\n <div class=\"select\" *ngIf=\"responsibilityForm?.rc?.length === 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('rc', true)\"\n aria-placeholder=\"Select the responsibility center or the responsibility centers for this responsibility.\">\n </div>\n <!-- <input type=\"text\" (click)=\"activateSelector('rc',true)\" placeholder=\"Select Responsibility Center(s)\" readonly> -->\n </div>\n\n <div class=\"selected\" *ngIf=\"responsibilityForm?.rc?.length > 0\"\n [class.readOnly]=\"openedFrom === 'RISK_TREATMENT'\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let rc of responsibilityForm?.rc?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"\n *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc?.item_name\" placement=\"bottom-left\" delay=\"0\"\n type=\"black\" [tooltipMandatory]=\"false\">{{ rc?.item_name }}</span>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"responsibilityForm?.rc?.length > 1\" appPopover (click)=\"rcPopover.popover()\" placement=\"left\">\n +{{ responsibilityForm?.rc?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.rc?.length>1\" [class.plus]=\"responsibilityForm?.rc?.length>2\">\n <span class=\"chip\" *ngFor=\"let rc of responsibilityForm?.rc?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('rc',rc)\" *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>{{rc?.item_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.rc?.length > 2\" type=\"button\" appPopover (click)=\"rc.popover()\" placement=\"right\" placement=\"right\">+{{responsibilityForm?.rc?.slice(2).length}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'rc' && openedFrom !== 'RISK_TREATMENT'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('rc', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let rc of responsibilityForm?.rc | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <ng-container *ngIf=\"\n isResponsibilityRcLinkEnabled &&\n (mode != 'EDIT' || responsibilityForm?.rc?.length <= 1)\n \">\n <!-- <app-cs-radio><div [appTooltip]=\"'Create separate responsibilities for each responsibility center'\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026</div><i class=\"icons\" [appTooltip]=\"'If selected, separate responsibilities will be created for each Responsibility Center.'\" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio> -->\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 0\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(0)\">\n <div class=\"rc-radio-text\" [appTooltip]=\"\n 'Create separate responsibilities for each responsibility centers'\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">\n CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026\n </div>\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 1\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(1)\">DISPLAY THE SAME RESPONSIBILITY IN ALL RESPONSIBILITY CENTERS<i\n class=\"icons\" [appTooltip]=\"\n 'If selected, the same responsibility will be linked to each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Program -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.PROGRAM\" [attr.id]=\"'PROGRAM'\"\n [class.active]=\"activeSelector === 'program'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'program' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.program?.length > 0 && activeSelector !== 'program'\n \">\n <img [src]=\"ASSETS.case_category\" alt=\"\" *ngIf=\"\n (responsibilityForm?.program?.length == 0 ||\n activeSelector === 'program') &&\n allProgamSelected?.length == 0\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n (responsibilityForm?.program?.length > 0 &&\n activeSelector !== 'program') ||\n allProgamSelected?.length > 0\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Program</label>\n <div class=\"select\" *ngIf=\"allProgamSelected?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('program', true)\"\n aria-placeholder=\"Select the Program or Program Categories that this responsibility relates to.\"></div>\n <!-- <input type=\"text\" (click)=\"activateSelector('program',true)\" placeholder=\"Select Responsibility program(s)\" readonly> -->\n </div>\n <div class=\"selected\" *ngIf=\"allProgamSelected?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container>\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" (click)=\"remove('program', allProgamSelected[0])\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"allProgamSelected[0]?.name ?? '--'\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ allProgamSelected[0]?.name\n ?? \"--\" }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"program.popover()\" placement=\"right\" *ngIf=\"allProgamSelected?.length > 1\">\n +{{ allProgamSelected?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.program?.length>1\" [class.plus]=\"responsibilityForm?.program?.length>2\">\n <span class=\"chip\" *ngFor=\"let program of responsibilityForm?.program\"><i class=\"icons\" *ngIf=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" (click)=\"remove('program',program)\"></i> {{program?.name??'--'}}</span>\n <!- - <button *ngIf=\"responsibilityForm?.program?.length > 2\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.program?.slice(2).length}}</button> - ->\n <button *ngIf=\"responsibilityForm?.linkedProgram?.length > 1\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.linkedProgram?.length - 1}}</button>\n </div> -->\n\n <button *ngIf=\"\n activeSelector !== 'program' && !hiddenList.includes('PROGRAM')\n \" class=\"edit\" type=\"button\" (click)=\"activateSelector('program', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <app-popover #program [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let program of allProgamSelected | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\" [appTooltip]=\"program?.name\" placement=\"bottom\" type=\"black\" delay=\"0\"\n [tooltipMandatory]=\"false\">\n <i *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" class=\"icons\" (click)=\"remove('program', program)\"></i>\n {{ program?.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <div *ngIf=\"responsibilityForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of responsibilityForm?.customTags\">\n <ng-container *ngIf=\"tag?.name?.trim()\">\n <label class=\"vx-control-panel vx-mt-2\">{{\n tag?.name\n }}</label>\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag?.name }}\" />\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Format & Evidence -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.FORMATE_EVIDENCE\"\n [attr.id]=\"'FORMATE_EVIDENCE'\" [class.active]=\"activeSelector === 'formate_evidence'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'formate_evidence' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired == false &&\n this.responsibilityForm.formatAndEvidence.formatFiles.length == 0 &&\n this.responsibilityForm.formatAndEvidence.formatLinks?.length == 0\n \" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\n\n <svg *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired ||\n this.responsibilityForm.formatAndEvidence.formatFiles.length ||\n this.responsibilityForm.formatAndEvidence.formatLinks?.length\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('formate_evidence', $event)\" [mode]=\"'responsibility'\"\n [formatEvidanceData]=\"responsibilityForm?.formatAndEvidence\" [organization_id]=\"organizationId\">\n </app-format-and-evidence>\n </div>\n </div>\n\n <!-- Assessment -->\n <div *ngIf=\"moreOptions?.ASSESSMENT\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n [attr.id]=\"'ASSESSMENT'\" [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm.assessment?.assessment_id\">\n <img *ngIf=\"!responsibilityForm.assessment?.assessment_id\" [src]=\"ASSETS.assessments\" alt=\"im\" />\n\n <svg *ngIf=\"responsibilityForm.assessment?.assessment_id\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">ASSESSMENTS</label>\n <div *ngIf=\"!responsibilityForm.assessment?.assessment_id\" class=\"select\">\n <input type=\"text\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" placeholder=\"Select an assessment for this responsibility\"\n [disabled]=\"responsibilityForm.checkpoints?.length\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.assessment?.assessment_id\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assessment', category)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n }}</span>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-ml-1 vx-text-center\">\n {{ responsibilityForm.assessment?.assessmentDetails?.questions }}\n {{\n responsibilityForm.assessment?.assessmentDetails?.questions > 1\n ? \"Questions\"\n : \"Question\"\n }}\n </div>\n </div>\n\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" class=\"edit\" type=\"button\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS\"\n [attr.id]=\"'CHECKPOINTS'\" [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.checkpoints?.length > 0 &&\n activeSelector !== 'checkpoints'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <button *ngIf=\"responsibilityForm?.checkpoints?.length === 0\" class=\"button\"\n (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"responsibilityForm?.checkpoints?.length === 0\">\n <input [disabled]=\"!responsibilityForm.checkpoints?.length\" type=\"text\"\n (click)=\"activateSelector('checkpoints', true)\" placeholder=\"Add checkpoints for this responsibility\"\n readonly />\n <button [disabled]=\"!responsibilityForm.checkpoints?.length\" (click)=\"activateSelector('checkpoints', true)\"\n type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.checkpoints?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints?.slice(0, 1)\n \">\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"checkpoint?.label\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ checkpoint?.label }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"checkpoint.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm.checkpoints?.length > 1\">\n +{{ responsibilityForm.checkpoints?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"responsibilityForm.checkpoints?.length>1\" [class.plus]=\"responsibilityForm.checkpoints?.length>2\">\n <span class=\"chip\" *ngFor=\"let checkpoint of responsibilityForm.checkpoints?.slice(0,1)\">{{checkpoint?.label}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm.checkpoints?.length > 1\" type=\"button\" appPopover (click)=\"checkpoint.popover()\" placement=\"right\">+{{responsibilityForm.checkpoints?.length- 1}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <div *ngIf=\"this.responsibilityForm.checkpoints?.length\" class=\"assessment-text\">\n <i class=\"icons alert-icon\"></i>\n <span>You can now use the new <strong>Checkpoints </strong>or\n <strong>Assessments</strong> feature instead of the old checkpoints\n functionality to create analytical questions.\n <button class=\"remove-btn\" (click)=\"onRemoveCheckpoints('checkpoint')\">\n Remove Checkpoints\n </button>\n to continue.</span>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- New Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS_NEW\"\n [attr.id]=\"'CHECKPOINTS-NEW'\" [class.active]=\"activeSelector === 'checkpoints-new'\">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"checkpointCount > 0 && activeSelector !== 'checkpoints'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <span class=\"checkpoint-version\"> V2.0</span> -->\n <!-- <button class=\"button\"\n (click)=\"activateSelector('checkpoints-new',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"checkpointCount === 0\">\n <input type=\"text\" (click)=\"activateSelector('checkpoints-new', true)\"\n placeholder=\"Add checkpoints for this responsibility\" readonly />\n <button (click)=\"activateSelector('checkpoints-new', true)\" type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"checkpointCount > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{ checkpointCount }}\n {{ checkpointCount > 1 ? \"Questions\" : \"Question\" }}</span>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"checkpointCount > 0\">\n <span class=\"chip\">\n <i class=\"icons\" (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n {{checkpointCount}} {{checkpointCount > 1 ? 'Questions': 'Question'}}</span>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints-new'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints-new', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RISK_CLASSIFICATION\"\n [attr.id]=\"'RISK_CLASSIFICATION'\" [class.active]=\"activeSelector === 'riskCalculator'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'riskCalculator' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm?.riskClass\">\n <svg *ngIf=\"responsibilityForm?.riskClass\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Risk Classification\n <button (click)=\"activateSelector('riskCalculator', true)\" class=\"button\">\n + Risk Calculator\n </button>\n </label>\n\n <div class=\"classification\">\n <label class=\"low\" *ngFor=\"let risk of riskClassification\" [ngClass]=\"[risk.class]\">\n <input type=\"radio\" name=\"classification\" [(ngModel)]=\"responsibilityForm.riskClass\"\n [value]=\"risk?.value\" />\n <span>{{ risk?.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.REVIEWER\" [attr.id]=\"'REVIEWER'\"\n [class.active]=\"\n activeSelector === 'reviewerFrequency' || activeSelector === 'reviewer'\n \" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.reviewers?.list?.length == 0 ||\n activeSelector === 'reviewer'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.reviewers?.list?.length > 0 &&\n activeSelector !== 'reviewer'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n responsibilityForm?.groupReviewers?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\" placeholder=\"Select Reviewer\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.reviewers?.list?.length > 0 ||\n responsibilityForm?.groupReviewers?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"reviewer.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"!featureFlag_groups\" [class.more-one]=\"responsibilityForm?.reviewers?.list?.length>1\"\n [class.plus]=\"responsibilityForm?.reviewers?.list?.length>2\">\n <span class=\"chip\" *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('reviewer',reviewer)\"></i> {{reviewer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.reviewers?.list?.length > 2\" type=\"button\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">+{{responsibilityForm?.reviewers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.reviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('reviewer', responsibilityForm?.reviewers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.reviewers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.reviewers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.length - 1 }}\n </button>\n </div>\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.reviewers?.list.length > 0 &&\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n &\n </div>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupReviewer',\n responsibilityForm?.groupReviewers?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\">\n +{{ responsibilityForm?.groupReviewers?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 \">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('reviewer',responsibilityForm?.reviewers?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.reviewers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.reviewers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.reviewers?.list?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 && responsibilityForm?.groupReviewers?.list?.length > 0\">&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('groupReviewer',responsibilityForm?.groupReviewers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.groupReviewers?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.groupReviewers?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.groupReviewers?.list?.length - 1}}</button>\n\n </div>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'reviewer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('reviewer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-cs-radio [checked]=\"responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('sequential')\" [class.disabled]=\"\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n SEQUENTIAL<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review one at a time in the sequence defined by you.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio [checked]=\"!responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('anyReviewer')\">\n ANY REVIEWER CAN MARK THIS AS REVIEWED<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-popover #reviewer [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.groupReviewers?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupReviewer', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OVERSEER\" [attr.id]=\"'OVERSEER'\"\n [class.active]=\"\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n \" [class.disabled]=\"\n activeSelector &&\n !['overseerNotify', 'overseerNotify'].includes(activeSelector) &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.oversight\" alt=\"\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseers?.notifyList?.length == 0) ||\n activeSelector === 'overseerNotify' ||\n activeSelector === 'overseer'\n \" />\n <svg class=\"checkIcon\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseers?.notifyList?.length > 0) &&\n !(\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n )\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseersGroups?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseer', true)\"\n placeholder=\"Who should have oversight of the responsibility?\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseersGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseer', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseers.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.list?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.list?.length>2\" *ngIf=\"!featureFlag_groups\" >\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseer',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.list?.length > 2\" type=\"button\" appPopover (click)=\"overseers.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('overseer', responsibilityForm?.overseers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"overseerUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.list.length > 0 &&\n responsibilityForm?.overseersGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroup',\n responsibilityForm?.overseersGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.list[0].group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.list[0].group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\">\n +{{ responsibilityForm?.overseersGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseer',responsibilityForm?.overseers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"overseerUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0 && responsibilityForm?.overseersGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroup',responsibilityForm?.overseersGroups?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.list[0].group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.list[0].group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.list?.length -1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseerNotify', true)\"\n placeholder=\"Who should be notified if the responsibility is not complet...\" readonly [appTooltip]=\"\n 'Who should be notified if the responsibility is not completed?'\n \" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.notifyList?.length > 0 ||\n responsibilityForm?.overseersGroups?.notifyList?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList?.slice(\n 0,\n 1\n )\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseerNotifyList', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notify.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.notifyList?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.notifyList?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 2\" type=\"button\" appPopover (click)=\"notify.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.notifyList?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerNotifyList',\n responsibilityForm?.overseers?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"notifyUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.notifyList.length > 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroupNotifyList',\n responsibilityForm?.overseersGroups?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notifyGroup.popover()\" placement=\"right\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 1\n \">\n +{{\n responsibilityForm?.overseersGroups?.notifyList?.length - 1\n }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerNotifyList',responsibilityForm?.overseers?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.notifyList[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.notifyList[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\" class=\"count user\" appPopover (click)=\"notifyUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.notifyList?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0 && responsibilityForm?.overseersGroups?.notifyList?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroupNotifyList',responsibilityForm?.overseersGroups?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.notifyList[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 1\" class=\"count\" appPopover (click)=\"notifyGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.notifyList?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseerNotify'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseerNotify', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #overseers [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseers of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseers)\"></i>\n {{ overseers?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseersGroups?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroup', overseer)\"></i>\n {{ overseer?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notify [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.overseersGroups?.notifyList\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroupNotifyList', group)\"></i>\n {{ group?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Assurance -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.ASSURANCE\" [attr.id]=\"'ASSURANCE'\"\n [class.active]=\"activeSelector === 'assurance'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assurance' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.assuranceList?.length == 0 ||\n activeSelector === 'assurance'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.assuranceList?.length > 0 &&\n activeSelector !== 'assurance'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Assurance</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.assuranceList?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('assurance', true)\"\n aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\"></div>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.assuranceList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let assurance of responsibilityForm?.assuranceList?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assurance', assurance)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assurance.category_name\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assurance.category_name\n }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"assurance.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assuranceList?.length > 1\">\n +{{ responsibilityForm?.assuranceList?.slice(1).length }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assurance', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #assurance [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let assurance of responsibilityForm?.assuranceList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assurance', assurance)\"></i>\n {{ assurance.category_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Requires Audit -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.REQUIRES_AUDIT && responsibilityForm.rc.length > 0\" [attr.id]=\"'REQUIRES_AUDIT'\"\n [class.active]=\"activeSelector === 'requires_audit'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'requires_audit' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.requiresAuditList?.length == 0 ||\n activeSelector === 'requires_audit'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.requiresAuditList?.length > 0 &&\n activeSelector !== 'requires_audit'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REQUIRES AUDIT?</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.requiresAuditList?.length == 0\">\n <input type=\"text\" placeholder=\"If yes, select an Audit Category.\" readonly\n (click)=\"activateSelector('requires_audit', true)\" />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.requiresAuditList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('requires_audit', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.requiresAuditList[0]?.category_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.requiresAuditList[0]?.category_name\n }}</span>\n </div>\n\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('requires_audit', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n <!-- class=\"icons\"></i>\n Edit</button> -->\n </div>\n <ng-container *ngIf=\"responsibilityForm?.requiresAuditList?.length\">\n <label class=\"vx-control-panel vx-mt-8\">\n SAMPLE SIZE\n <app-cs-switch [(ngValue)]=\"isSample\" (ngValueChange)=\"switchEnable($event)\"></app-cs-switch>\n </label>\n <div class=\"sample-part\" [class.disabled]=\"!isSample\">\n <app-cs-radio value=\"0\" class=\"sample-radio\" (click)=\"selectedSampleData(0)\"\n [checked]=\"selectedSample === 0\">\n <div class=\"name\">COUNT</div>\n <input type=\"number\" placeholder=\"--\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"sampleValue\" />\n </app-cs-radio>\n <div class=\"or\">OR</div>\n <app-cs-radio value=\"1\" class=\"sample-radio\" (click)=\"selectedSampleData(1)\"\n [checked]=\"selectedSample === 1\">\n <div class=\"name\">PERCENTAGE</div>\n <input type=\"number\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"samplePercentage\"\n placeholder=\"--\" />\n </app-cs-radio>\n </div>\n <label class=\"vx-control-panel vx-mt-8\">SET A REMINDER IF THE AUDIT PLAN IS NOT CREATED.</label>\n <div class=\"reminder-part\">\n Send reminder every\n <input type=\"number\" value=\"2\" [(ngModel)]=\"sendAuditRemindersValue\" />\n Day by\n <div class=\"picker-group\">\n <input class=\"time\" aria-label=\"12hr format\" [(ngModel)]=\"auditTime\" [ngxTimepicker]=\"dailyTime\"\n placeholder=\"auditTime.toUpperCase()\" type=\"text\" [min]=\"currentTime\" readonly />\n <i class=\"icons\"></i>\n <ngx-material-timepicker #dailyTime [defaultTime]=\"auditTime\">\n </ngx-material-timepicker>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Link of GRC objects -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.GRC_OBJECTS && responsibilityForm.rc.length > 0\" [attr.id]=\"'GRC_OBJECTS'\"\n [class.active]=\"activeSelector === 'GRC_OBJECTS'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'GRC_OBJECTS' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length == 0 ||\n activeSelector === 'GRC_OBJECTS'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length > 0 &&\n activeSelector !== 'GRC_OBJECTS'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK GRC OBJECT(S)</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.selectedGRCObjects?.length === 0\">\n <input type=\"text\" placeholder=\"Select GRC object(s) to link with this responsibility\" readonly\n (click)=\"activateSelector('GRC_OBJECTS', true)\" />\n </div>\n <ng-container *ngIf=\"responsibilityForm?.selectedGRCObjects?.length\">\n <ng-container *ngFor=\"let selectedGRC of GRC_TYPE_ARRAY; let i = index\">\n <div *ngIf=\"grcDataWithTypes[selectedGRC]?.length\" class=\"selected vx-mb-2\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"let grc of grcDataWithTypes[selectedGRC]?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('GRC_OBJECTS', grc, 0)\"></i>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\n {{ selectedGRC | titlecase }}\n </div>\n\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"grc?.name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ grc?.name }}</span>\n </ng-container>\n\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"popoverGRC.popover()\" placement=\"left\"\n *ngIf=\"grcDataWithTypes[selectedGRC]?.length > 1\">\n +{{ grcDataWithTypes[selectedGRC].length - 1 }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'GRC'\" class=\"edit\" type=\"button\" (click)=\"\n selectedGRCTab = grcDataWithTypes[selectedGRC][0]?.type;\n getOtherGRCObjects();\n activateSelector('GRC_OBJECTS', true)\n \">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #popoverGRC [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let grc of grcDataWithTypes[selectedGRC] | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('GRC_OBJECTS', grc, j + 1)\"></i>\n {{ grc.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<app-users-radio-list *ngIf=\"activeSelector === 'assignors'\" [usersList]=\"assignorsList\"\n [selectedUsers]=\"responsibilityForm.assignors.list\" [itemEmailKey]=\"'member_email'\" [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('assignors', $event)\"\n (closeUsersList)=\"activeDeselector()\" [loaded]=\"assignorsListLoaded\">\n</app-users-radio-list>\n\n<ng-container *ngIf=\"activeSelector === 'assignees'\">\n <app-group-users-list *ngIf=\"\n isEntrust || responsibilityForm?.assignees?.whoCanComplete === 'ANY_ONE'\n \" [openedFrom]=\"openedFrom\" [usersList]=\"assigneesList\" [fromResponsibility]=\"'Assignee'\" [groupsList]=\"groupsList\"\n [assigneeGroupsList]=\"groupAssigneeList\" [selectedUsers]=\"responsibilityForm?.assignees?.list\"\n [selectedGroups]=\"responsibilityForm?.assigneeGroups?.list\" [userIdKey]=\"'my_member_id'\" [groupIdKey]=\"'group_id'\"\n [loader]=\"userListLoader || assignorsListLoader\" (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"activeDeselector()\" [groupsEnabled]=\"featureFlag_groups\">\n </app-group-users-list>\n <app-users-radio-list *ngIf=\"\n !isEntrust && responsibilityForm.assignees.whoCanComplete !== 'ANY_ONE'\n \" [itemEmailKey]=\"'employee_email'\" [usersList]=\"assigneesList\" [selectedUsers]=\"responsibilityForm.assignees.list\"\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" [fromResponsibility]=\"'Assignee'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"activeDeselector()\"\n [loaded]=\"assigneesListLoaded\">\n </app-users-radio-list>\n</ng-container>\n\n<app-checkpoints *ngIf=\"activeSelector === 'checkpoints'\"\n [checkpointInstruction]=\"responsibilityForm?.checkpointInstruction\" [checkpointData]=\"responsibilityForm?.checkpoints\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\" (closeCheckPoint)=\"activeDeselector()\"></app-checkpoints>\n<app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [frequencyDetails]=\"frequencyDetails\"\n [feature]=\"feature\" [onCompletionResponsibility]=\"responsibilityDetails?.onCompletionResponsibility\"\n (selectedFrequency)=\"frequencyData($event)\" [mode]=\"'responsibility'\" (closeFrequency)=\"activeDeselector()\">\n</app-frequency-container>\n\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [loaded]=\"rcListLoaded\"\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"\n mode == 'EDIT' && responsibilityCenterType === 0 ? true : false\n \" [selectedResponsibilityCenters]=\"responsibilityForm.rc\" [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"activeDeselector()\">\n</app-responsibility-centers-list>\n\n<app-category-multi-select *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categories\"\n [allCategories]=\"allCategories\" [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"responsibilityForm.category\"\n (saveSelectedCategory)=\"saveSelectedList('category', $event)\" (closeCategoriesList)=\"activeDeselector()\">\n</app-category-multi-select>\n\n<!-- Program List Popup -->\n<app-list-container *ngIf=\"activeSelector === 'program'\" (close)=\"activeDeselector()\">\n <app-program-list body (itemsSelectedChange)=\"onItemsSelectedChange($event)\" [selectedItems]=\"selectedPrograms\"\n [url]=\"programListUrl\"></app-program-list>\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-w-100\" footer>\n <div class=\"left-side vx-fs-12 vx-d-flex\">\n <ng-container *ngIf=\"allProgamSelected.length > 0\">\n <button\n class=\"selected-count-box vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\">\n {{ allProgamSelected.length }}\n </button>\n <span class=\"selected-text\">\n Program\n {{ allProgamSelected.length > 1 ? \"Categories\" : \"Category\" }}\n Selected</span>\n </ng-container>\n </div>\n <div class=\"right-side vx-d-flex\">\n <button class=\"cancelBtn\" (click)=\"activeDeselector()\">Cancel</button>\n <button class=\"nextBtn\" (click)=\"activeDeselector(); selectCategory()\">\n Next <i class=\"icons\"></i>\n </button>\n </div>\n </div>\n</app-list-container>\n\n<app-owner-list *ngIf=\"activeSelector === 'reviewer' && !featureFlag_groups\" [listHeading]=\"'Select a Reviewer'\"\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [showWorkflow]=\"true\"\n [selectedUsers]=\"responsibilityForm.reviewers.list\" [userIdKey]=\"'employee_id'\" [itemEmailKey]=\"'employee_email'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" (closeUsersList)=\"activeDeselector()\" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'reviewer' && featureFlag_groups\" [selectedReviewer]=\"true\"\n [userlist]=\"reviewerMemberIdsList\" [groupEnabled]=\"true\" [groupList]=\"groupReviewerList\"\n [selectedGroups]=\"responsibilityForm?.groupReviewers?.list\" [selectedUsers]=\"responsibilityForm?.reviewers?.list\"\n (cancel)=\"activeDeselector()\" (save)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [loading]=\"userListLoader || assignorsListLoader\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n<app-owner-list *ngIf=\"activeSelector === 'overseer' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [selectedUsers]=\"responsibilityForm.overseers.list\"\n [userIdKey]=\"'employee_id'\" [fromResponsibility]=\"'Overseer'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseer', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseer' && featureFlag_groups\" [groupEnabled]=\"true\"\n [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.list\"\n [userlist]=\"overseersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseer', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'overseerNotify' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [fromResponsibility]=\"'Overseer'\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseerNotify', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\"></app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseerNotify' && featureFlag_groups\" [userlist]=\"overseersList\"\n [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\"\n [selectedGroups]=\"responsibilityForm?.overseersGroups?.notifyList\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseerNotify', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'assurance'\" [singularText]=\"'Test Category selected'\"\n [pluralText]=\"'Test Categories selected'\" [searchPlaceholder]=\"'Search Test Category...'\"\n [listHeading]=\"'Select Test Categories'\" [usersList]=\"assuranceCategoriesList\"\n [noDataText]=\"'No Test Categories Found'\" [selectedUsers]=\"responsibilityForm.assuranceList\"\n [userIdKey]=\"'category_id'\" [itemEmailKey]=\"'category_name'\" [itemNameKey]=\"'category_name'\"\n (saveSelectedList)=\"saveSelectedList('assurance', $event)\" (closeUsersList)=\"activeDeselector()\"\n [searchPlaceholder]=\"'Search Category'\">\n</app-owner-list>\n\n<app-audit-category-list *ngIf=\"activeSelector === 'requires_audit'\" (closeList)=\"activeDeselector()\"\n [auditCategory]=\"assuranceRequiresAuditList\" (saveSelectedList)=\"saveSelectedList('requires_audit', $event)\"\n [selectedData]=\"responsibilityForm?.requiresAuditList[0]\"></app-audit-category-list>\n\n<app-loader-inline *ngIf=\"(loader && this.mode === 'EDIT') || entrustLoader\"></app-loader-inline>\n<app-framework-list *ngIf=\"activeSelector === 'framework'\" (assignControl)=\"assignFromFramework($event)\"\n [previousSelectedValues]=\"selectedFrameworkValues\" (closeFramework)=\"activeDeselector()\"\n (entrustFramework)=\"entrustFramework($event)\"></app-framework-list>\n\n<!-- risk-calculator here -->\n<app-risk-classification *ngIf=\"activeSelector === 'riskCalculator'\" [currentRiskValue]=\"responsibilityForm.riskClass\"\n (saveList)=\"saveSelectedList('calculatedrisk', $event)\" (closeList)=\"activeDeselector()\">\n</app-risk-classification>\n\n<app-review-frequency *ngIf=\"activeSelector === 'reviewerFrequency'\" [reviewCompleteDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewCompleteDays\n \" [reviewNOtCompletedDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewNOtCompletedDays\n \" (saveReviewFrequency)=\"saveSelectedList('reviewFrequency', $event)\" (closeReviewFrequency)=\"\n activeDeselector();\n activateSelector('reviewer', false);\n responsibilityForm.reviewers.list = [];\n responsibilityForm.groupReviewers.list = []\n \" (backToUserList)=\"activeDeselector(); activateSelector('reviewer', true)\">\n</app-review-frequency>\n\n<app-assessment-list *ngIf=\"isAssessment\" [program_ids]=\"responsibilityForm.program[0]?._id\" (cancelAssessment)=\"\n isAssessment = false; activateSelector('isAssessment', false)\n \" [isEdit]=\"responsibilityForm?.assessment?.assessment_id ? true : false\"\n [selectedAssessment]=\"responsibilityForm?.assessment\" (onAssessmentSelect)=\"\n onAssessmentSelect($event); activateSelector('isAssessment', false)\n \"></app-assessment-list>\n\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>\n\n<div class=\"import\" *ngIf=\"activeSelector === 'checkpoints-new'\">\n <app-create-assessment-container #editor [openPortal]=\"'RESPONSIBILITY_CHECKPOINT'\"\n (postAssessment)=\"postAssessment($event)\" (setIsUploaded)=\"setIsUploaded($event)\"\n [checkpointJSON]=\"responsibilityForm.new_checkpoints\">\n </app-create-assessment-container>\n</div>\n\n<app-grc-object-list *ngIf=\"activeSelector === 'GRC_OBJECTS'\" [grcObject]=\"grcList\"\n [selectedGRC]=\"responsibilityForm.selectedGRCObjects | refDisconnect\" [loader]=\"grcLoader\" [tableCard]=\"otherGRCCard\"\n [selectedTab]=\"selectedGRCTab\" [cardLoader]=\"grcTabLoader\" (getOtherGRCObjects)=\"getOtherGRCObjects($event)\"\n (saveOtherGRC)=\"saveSelectedList('GRC_OBJECTS', $event)\"\n (closeOtherGRC)=\"activateSelector('GRC_OBJECTS', false)\"></app-grc-object-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::ng-deep .workflw-compliance{display:block;position:relative}::ng-deep .workflw-compliance vcomply-editor .editor-container{border-radius:4px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block{min-height:72px;padding:11px 15px;line-height:20px;font-size:14px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul li{list-style:unset}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .workflw-compliance 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 .workflw-compliance 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 .workflw-compliance .sample-part{display:flex;align-items:center;margin-bottom:4px}::ng-deep .workflw-compliance .sample-part .sample-radio{width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item{position:relative;width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .radio{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:8px 8px 8px 36px;margin:0;max-width:100%;width:100%;display:flex;align-items:center;justify-content:space-between;pointer-events:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value .name{color:#747576;font-size:11px;font-weight:500;text-transform:uppercase}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input{border:1px solid #dcdcdc;background:#fff;border-radius:4px;height:24px;width:64px;text-align:center;padding:4px;color:#747576;font-size:13px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input:focus{outline:none;box-shadow:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~svg{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~.value{border:1px solid #34aa44;background:#eefcf0;pointer-events:auto}::ng-deep .workflw-compliance .sample-part .or{color:#161b2f;font-size:9px;font-weight:500;text-transform:uppercase;margin:0 10px}::ng-deep .workflw-compliance .sample-part.disabled{pointer-events:none}::ng-deep .workflw-compliance .sample-part.disabled .sample-radio .radio-item .value{background:#fbfbfb;border:1px solid #f1f1f1}::ng-deep .workflw-compliance .reminder-part{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:4px 12px;color:#747576;font-size:12px;display:flex;align-items:center}::ng-deep .workflw-compliance .reminder-part input{width:30px;border:none;border-radius:0;border-bottom:1px solid #dbdbdb;text-align:center;color:#747576;font-size:13px;font-weight:500;margin:0 4px}::ng-deep .workflw-compliance .reminder-part input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group{position:relative}::ng-deep .workflw-compliance .reminder-part .picker-group input{border:1px solid #f1f1f1!important;border-radius:4px!important;width:104px!important;height:28px!important;margin-left:8px!important;padding:6px 8px!important;cursor:pointer;color:#747576!important;font-size:12px!important;font-weight:500!important;text-align:left!important}::ng-deep .workflw-compliance .reminder-part .picker-group input:hover,::ng-deep .workflw-compliance .reminder-part .picker-group input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group i{color:#1e5dd3;position:absolute;top:6px;right:10px;font-size:16px}.assessment-text{color:#747576;font-size:11px;display:flex;align-items:center;padding:0 8px;margin:-16px 0 20px}.assessment-text i.alert-icon{color:#f2bf19;font-size:16px;margin-right:8px}.assessment-text strong{font-weight:600}.assessment-text button.remove-btn{background:transparent;border-radius:0;border:none;color:#1e5dd3;font-size:10px;font-weight:600;padding:0;margin:0}.import{position:fixed;inset:0 30px 0 0;z-index:-1;width:calc(100vw - 30px)}.wf-action-list ul.action-item li.multiple-program{background:#f8f8f8}.wf-action-list ul.action-item li.multiple-program .avatar-card{padding:2px 7.5px}.wf-action-list ul.action-item li.multiple-program .avatar-card span.value{color:#747576;font-size:11px;font-weight:600;width:unset}.primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}.edit-due-date{display:flex;align-items:baseline;justify-content:space-between}.left-side{color:#707070}.right-side button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}.right-side button i{margin-left:8px;font-size:11px}.right-side button:disabled{background:#f1f1f1!important;color:#747576!important;opacity:1}.right-side button.cancelBtn{background:transparent!important;color:#eb2424!important}.selected-count-box{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem;position:relative}.selected-text{color:#707070;font-size:11px;font-weight:500;position:fixed;padding-left:2.5rem}\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 .chipContainer button.countBtn.blueBg{background:#1e5dd3}::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}.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"] }]
|
|
3960
|
+
args: [{ selector: 'app-workflow-compliance', template: "<div class=\"workflw-compliance\" *ngIf=\"!showSmiley\">\n <!-- Behalf -->\n <div *ngIf=\"mode !== 'EDIT'\" class=\"form-group-row\" [class.active]=\"activeSelector === 'assignors'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignors' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <img [src]=\"ASSETS.im_creating\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length == 0 ||\n activeSelector === 'assignors'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">I am creating this responsibility on behalf of someone else\n <app-cs-switch [ngValue]=\"responsibilityForm.assignors.enable\" (ngValueChange)=\"\n responsibilityForm.assignors.enable = $event;\n responsibilityForm.assignors.list = []\n \">\n </app-cs-switch>\n </label>\n <div class=\"select\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length === 0 ||\n activeSelector === 'assignors'\n \">\n <input type=\"text\" (click)=\"activateSelector('assignors', true)\"\n placeholder=\"Who is responsible for managing this responsibility?\" readonly\n [disabled]=\"!responsibilityForm?.assignors?.enable\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.assignors?.list?.length > 0 &&\n activeSelector !== 'assignors'\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignors', b_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"b_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ b_user.member_name }}</span>\n </ng-container>\n <button *ngIf=\"responsibilityForm?.assignors?.list?.length > 1\"\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">\n +{{ responsibilityForm?.assignors?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\">\n <span class=\"chip\" *ngFor=\"let b_user of responsibilityForm?.assignors?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignors',b_user)\"></i>\n {{b_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignors?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"behalf.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignors?.list?.slice(2).length}}</button>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignors'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignors', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #behalf [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let b_user of responsibilityForm?.assignors?.list | slice : 2;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignors', b_user)\"></i>\n {{ b_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p *ngIf=\"invalidType === 'whom'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for managing this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- What -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'framework'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'responsibilityName' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <img [src]=\"ASSETS.what\" alt=\"im\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() === '' ||\n focus.responsibilityName\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() !== '' &&\n !focus.responsibilityName\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n What? <span class=\"required\">*</span>\n <button *ngIf=\"\n isFrameworkAvailable &&\n mode !== 'EDIT' &&\n openedFrom !== 'RISK_TREATMENT' &&\n assessmentDetails?.assessment_type !== 'compliance_audit'\n \" (click)=\"activateSelector('framework', true)\" class=\"button\">\n Select From A framework\n </button>\n </label>\n <span *ngIf=\"responsibilityForm?.responsibility?.keyResponsibility\" class=\"indicator\"\n [appTooltip]=\"'This responsibility is marked as key responsibility.'\" placement=\"bottom\" type=\"black\"\n delay=\"0\" [tooltipMandatory]=\"true\">\n <i class=\"icons\"></i>\n </span>\n <input *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() == '' || !isEditWhat\n \" type=\"text\" [ngModel]=\"responsibilityForm.responsibility.name\" placeholder=\"What is the responsibility?\"\n (change)=\"whatChanged($event)\" (focusin)=\"activateSelector('responsibilityName', true)\"\n (focusout)=\"activeDeselector()\" (clickOutside)=\"testFunction()\" #what />\n <div class=\"selected\" *ngIf=\"\n responsibilityForm?.responsibility?.name.trim() != '' && isEditWhat\n \">\n <div class=\"chip-container\">\n <span class=\"value\">{{\n responsibilityForm.responsibility?.name\n }}</span>\n </div>\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" class=\"edit\" type=\"button\"\n (click)=\"onEditWhat($event)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'what'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please enter a name for this responsibility.\n </p>\n <div class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.responsibility?.keyResponsibility\" (ngValueChange)=\"\n responsibilityForm.responsibility.keyResponsibility = $event\n \">Key Responsibility\n </app-cs-switch>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Who -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'assignees'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <img [src]=\"ASSETS.case_assignees\" alt=\"im\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 ||\n activeSelector === 'assignees'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n activeSelector !== 'assignees'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"edit-due-date\">\n <label class=\"vx-control-panel\">Who? <span class=\"required\">*</span></label>\n <div *ngIf=\"allowEditDueDateFeatureFlag && false\" class=\"switch-row align-right\">\n <app-cs-switch [ngValue]=\"responsibilityForm.allowEditDueDate\"\n (ngValueChange)=\"responsibilityForm.allowEditDueDate = $event\">ALLOW ASSIGNEE TO EDIT COMPLETED WORK<i\n class=\"icons\" [appTooltip]=\"\n 'If it\u2019s enabled, the assignee will have the option to modify a previously completed due date.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-switch>\n </div>\n </div>\n <div class=\"select vx-mt-0\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length == 0 &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list?.length == 0 &&\n featureFlag_groups))\n \">\n <input type=\"text\" (click)=\"activateSelector('assignees', true)\"\n placeholder=\"Who is responsible for completing the responsibility?\" readonly />\n </div>\n\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.assignees?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.assignees?.list?.length > 0 ||\n responsibilityForm?.assigneeGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list?.slice(0, 1)\n \">\n <i (click)=\"remove('assignees', e_user)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"e_user.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ e_user.member_name }}</span>\n </ng-container>\n <button\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\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.slice(1).length }}\n </button>\n </div>\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('assignees', responsibilityForm?.assignees?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assignees?.list[0]?.employee_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assignees?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"left\"\n *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\">\n +{{ responsibilityForm?.assignees?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.assignees?.list?.length > 0 &&\n responsibilityForm?.assigneeGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupassignees',\n responsibilityForm?.assigneeGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.assigneeGroups?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\">\n +{{ responsibilityForm?.assigneeGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.assignees?.length>1\" [class.plus]=\"responsibilityForm?.assignees?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let e_user of responsibilityForm?.assignees?.list?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('assignees',e_user)\"></i>\n {{e_user.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 2\" type=\"button\"\n appPopover (click)=\"assignees.popover()\" placement=\"right\">+\n {{responsibilityForm?.assignees?.list?.slice(2).length}}</button>\n </div> -->\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('assignees',responsibilityForm?.assignees?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assignees?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assignees?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assignees?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.assignees?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.assignees?.list?.length > 0 && responsibilityForm?.assigneeGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length\" >\n <i *ngIf=\"(!allGroupAssignee || mode !== 'EDIT')\" class=\"icons cross vx-mr-1\" (click)=\"remove('groupassignees',responsibilityForm?.assigneeGroups?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.assigneeGroups?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.assigneeGroups?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.assigneeGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.assigneeGroups?.list?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'assignees'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assignees', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.assigneeGroups?.list\n | slice : 1\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i *ngIf=\"\n !featureFlag_groups ||\n (featureFlag_groups &&\n (!allGroupAssignee || mode !== 'EDIT'))\n \" class=\"icons\" (click)=\"remove('groupassignees', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <p *ngIf=\"invalidType === 'who'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the person responsible for completing this\n responsibility.\n </p>\n <ng-container *ngIf=\"!isGroupAssigned\">\n\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"\n responsibilityForm.assignees.whoCanComplete = 'ANY_ONE'\n \" [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\" [name]=\"'what'\">ANY SELECTED PERSON\n CAN COMPLETE THIS\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, only one responsibility will be created.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n <app-cs-radio *ngIf=\"mode !== 'EDIT'\" (checkedEvent)=\"responsibilityForm.assignees.whoCanComplete = 'ALL'\"\n [checked]=\"responsibilityForm.assignees.whoCanComplete == 'ALL'\" [name]=\"'what'\">ALL SELECTED PERSONS NEED\n TO COMPLETE THIS<i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each person.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n <div class=\"switch-row align-right\" *ngIf=\"\n mode == 'EDIT' &&\n (!featureFlag_groups ||\n (responsibilityForm?.assigneeGroups?.list.length === 0 &&\n featureFlag_groups))\n \">\n <app-cs-switch (ngValueChange)=\"openAssigneeChangeConfirmation($event)\" [ngValue]=\"\n responsibilityForm.assignees.whoCanComplete == 'ANY_ONE'\n \">\n ANY SELECTED PERSON CAN COMPLETE THIS\n </app-cs-switch>\n </div>\n </ng-container>\n <app-popover #assignees [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let e_user of responsibilityForm?.assignees?.list | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', e_user)\"></i>\n {{ e_user.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- When? -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n !responsibilityForm?.frequency || activeSelector === 'frequency'\n \">\n <img [src]=\"ASSETS.when\" alt=\"im\" *ngIf=\"!responsibilityForm?.frequency || activeSelector === 'frequency'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.frequency &&\n activeSelector !== 'frequency' &&\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency != '5~0~0~0'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When? <span class=\"required\">*</span></label>\n <div *ngIf=\"\n responsibilityForm?.frequency == '' ||\n responsibilityForm?.frequency == '5~0~0~0'\n \" class=\"select button-sec\">\n <input type=\"text\" (click)=\"activateSelector('frequency', true)\" [placeholder]=\"frequencyPlaceholder\"\n readonly />\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <div *ngIf=\"\n responsibilityForm?.frequency != '' &&\n responsibilityForm?.frequency !== '5~0~0~0'\n \" class=\"selected button-sec\">\n <span class=\"chip\" [appTooltip]=\"frequencyPlaceholder\" placement=\"bottom-left\" delay=\"0\" type=\"black\"\n [tooltipMandatory]=\"false\">{{ frequencyPlaceholder }}</span>\n <button *ngIf=\"activeSelector !== 'frequency'\" type=\"button\" class=\"edit\"\n (click)=\"activateSelector('frequency', true)\">\n <i class=\"icons\"></i>Edit\n </button>\n </div>\n <p *ngIf=\"invalidType === 'when'\" [appScrollInView]=\"true\" class=\"error-message\">\n Please select the frequency of occurrence for this responsibility.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Notes -->\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'notes'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'notes' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \">\n <img [src]=\"ASSETS.notes\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() === '' ||\n focus.description\n \" />\n\n <svg class=\"checkIcon\" *ngIf=\"\n checkBlank(responsibilityForm?.description).trim() !== '' &&\n !focus.description\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Notes</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.description\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n link: true,\n id: 'notes',\n placeholder:\n 'Add more information about completing the responsibility'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Objective -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OBJECTIVE\" [attr.id]=\"'OBJECTIVE'\"\n [class.active]=\"activeSelector === 'objective'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'objective' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <img [src]=\"ASSETS.objectives\" alt=\"im\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() === '' ||\n focus.objective\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n checkBlank(responsibilityForm?.objective).trim() !== '' &&\n !focus.objective\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Objective</label>\n <vcomply-editor [(ngModel)]=\"responsibilityForm.objective\" [editorConfig]=\"{\n mode: 'prime',\n colorPalette: true,\n id: 'objective',\n link: true,\n placeholder:\n 'This option lets you specify an objective for the responsibility.'\n }\"></vcomply-editor>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RC\" [attr.id]=\"'RC'\"\n [class.active]=\"activeSelector === 'rc'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\n \">\n <img [src]=\"ASSETS.responsibility_center\" alt=\"\"\n *ngIf=\"responsibilityForm?.rc?.length == 0 || activeSelector === 'rc'\" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"responsibilityForm?.rc?.length > 0 && activeSelector !== 'rc'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center </label>\n\n <div class=\"select\" *ngIf=\"responsibilityForm?.rc?.length === 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('rc', true)\"\n aria-placeholder=\"Select the responsibility center or the responsibility centers for this responsibility.\">\n </div>\n <!-- <input type=\"text\" (click)=\"activateSelector('rc',true)\" placeholder=\"Select Responsibility Center(s)\" readonly> -->\n </div>\n\n <div class=\"selected\" *ngIf=\"responsibilityForm?.rc?.length > 0\"\n [class.readOnly]=\"openedFrom === 'RISK_TREATMENT'\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let rc of responsibilityForm?.rc?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('rc', rc)\"\n *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"rc?.item_name\" placement=\"bottom-left\" delay=\"0\"\n type=\"black\" [tooltipMandatory]=\"false\">{{ rc?.item_name }}</span>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n *ngIf=\"responsibilityForm?.rc?.length > 1\" appPopover (click)=\"rcPopover.popover()\" placement=\"left\">\n +{{ responsibilityForm?.rc?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.rc?.length>1\" [class.plus]=\"responsibilityForm?.rc?.length>2\">\n <span class=\"chip\" *ngFor=\"let rc of responsibilityForm?.rc?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('rc',rc)\" *ngIf=\"openedFrom !== 'RISK_TREATMENT'\"></i>{{rc?.item_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.rc?.length > 2\" type=\"button\" appPopover (click)=\"rc.popover()\" placement=\"right\" placement=\"right\">+{{responsibilityForm?.rc?.slice(2).length}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'rc' && openedFrom !== 'RISK_TREATMENT'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('rc', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #rcPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let rc of responsibilityForm?.rc | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\"></i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <ng-container *ngIf=\"\n isResponsibilityRcLinkEnabled &&\n (mode != 'EDIT' || responsibilityForm?.rc?.length <= 1)\n \">\n <!-- <app-cs-radio><div [appTooltip]=\"'Create separate responsibilities for each responsibility center'\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026</div><i class=\"icons\" [appTooltip]=\"'If selected, separate responsibilities will be created for each Responsibility Center.'\" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio> -->\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 1\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(1)\">DISPLAY THE SAME RESPONSIBILITY IN ALL RESPONSIBILITY CENTERS<i\n class=\"icons\" [appTooltip]=\"\n 'If selected, the same responsibility will be linked to each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i></app-cs-radio>\n <app-cs-radio [class.disabled]=\"\n mode == 'EDIT' &&\n responsibilityForm.responsibilityCenterType === 1 &&\n responsibilityForm?.rc?.length > 1\n \" [checked]=\"responsibilityCenterType === 0\" [name]=\"'ff_responsibility_rc_link'\"\n (checkedEvent)=\"onRcTypeChange(0)\">\n <div class=\"rc-radio-text\" [appTooltip]=\"\n 'Create separate responsibilities for each responsibility centers'\n \" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"true\">\n CREATE SEPARATE RESPONSIBILITIES FOR EACH RESPONSIBILITY CEN\u2026\n </div>\n <i class=\"icons\" [appTooltip]=\"\n 'If selected, separate responsibilities will be created for each Responsibility Center.'\n \" placement=\"bottom-right\" type=\"white\" delay=\"0\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Program -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.PROGRAM\" [attr.id]=\"'PROGRAM'\"\n [class.active]=\"activeSelector === 'program'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'program' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"\n responsibilityForm?.program?.length > 0 && activeSelector !== 'program'\n \">\n <img [src]=\"ASSETS.case_category\" alt=\"\" *ngIf=\"\n (responsibilityForm?.program?.length == 0 ||\n activeSelector === 'program') &&\n allProgamSelected?.length == 0\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n (responsibilityForm?.program?.length > 0 &&\n activeSelector !== 'program') ||\n allProgamSelected?.length > 0\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Program</label>\n <div class=\"select\" *ngIf=\"allProgamSelected?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('program', true)\"\n aria-placeholder=\"Select the Program or Program Categories that this responsibility relates to.\"></div>\n <!-- <input type=\"text\" (click)=\"activateSelector('program',true)\" placeholder=\"Select Responsibility program(s)\" readonly> -->\n </div>\n <div class=\"selected\" *ngIf=\"allProgamSelected?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container>\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" (click)=\"remove('program', allProgamSelected[0])\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"allProgamSelected[0]?.name ?? '--'\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ allProgamSelected[0]?.name\n ?? \"--\" }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"program.popover()\" placement=\"right\" *ngIf=\"allProgamSelected?.length > 1\">\n +{{ allProgamSelected?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.program?.length>1\" [class.plus]=\"responsibilityForm?.program?.length>2\">\n <span class=\"chip\" *ngFor=\"let program of responsibilityForm?.program\"><i class=\"icons\" *ngIf=\"feature.isFeatureEnabled('ff_deprecate_primary_program_flag')\" (click)=\"remove('program',program)\"></i> {{program?.name??'--'}}</span>\n <!- - <button *ngIf=\"responsibilityForm?.program?.length > 2\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.program?.slice(2).length}}</button> - ->\n <button *ngIf=\"responsibilityForm?.linkedProgram?.length > 1\" class=\"count\" type=\"button\" appPopover (click)=\"program.popover()\" placement=\"right\">+ {{responsibilityForm?.linkedProgram?.length - 1}}</button>\n </div> -->\n\n <button *ngIf=\"\n activeSelector !== 'program' && !hiddenList.includes('PROGRAM')\n \" class=\"edit\" type=\"button\" (click)=\"activateSelector('program', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <app-popover #program [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let program of allProgamSelected | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\" [appTooltip]=\"program?.name\" placement=\"bottom\" type=\"black\" delay=\"0\"\n [tooltipMandatory]=\"false\">\n <i *ngIf=\"\n !hiddenList?.includes('PROGRAM') &&\n !program?.isViewOnlyProgram\n \" class=\"icons\" (click)=\"remove('program', program)\"></i>\n {{ program?.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <div *ngIf=\"responsibilityForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of responsibilityForm?.customTags\">\n <ng-container *ngIf=\"tag?.name?.trim()\">\n <label class=\"vx-control-panel vx-mt-2\">{{\n tag?.name\n }}</label>\n <input type=\"text\" [(ngModel)]=\"tag.value\" placeholder=\"{{ tag?.name }}\" />\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Format & Evidence -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.FORMATE_EVIDENCE\"\n [attr.id]=\"'FORMATE_EVIDENCE'\" [class.active]=\"activeSelector === 'formate_evidence'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'formate_evidence' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired == false &&\n this.responsibilityForm.formatAndEvidence.formatFiles.length == 0 &&\n this.responsibilityForm.formatAndEvidence.formatLinks?.length == 0\n \" [src]=\"ASSETS.format_evidence\" alt=\"im\" />\n\n <svg *ngIf=\"\n this.responsibilityForm.formatAndEvidence.evidenceRequired ||\n this.responsibilityForm.formatAndEvidence.formatFiles.length ||\n this.responsibilityForm.formatAndEvidence.formatLinks?.length\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <app-format-and-evidence (updateFiles)=\"saveSelectedList('formate_evidence', $event)\" [mode]=\"'responsibility'\"\n [formatEvidanceData]=\"responsibilityForm?.formatAndEvidence\" [organization_id]=\"organizationId\">\n </app-format-and-evidence>\n </div>\n </div>\n\n <!-- Assessment -->\n <div *ngIf=\"moreOptions?.ASSESSMENT\" [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n [attr.id]=\"'ASSESSMENT'\" [class.active]=\"activeSelector === 'isAssessment'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm.assessment?.assessment_id\">\n <img *ngIf=\"!responsibilityForm.assessment?.assessment_id\" [src]=\"ASSETS.assessments\" alt=\"im\" />\n\n <svg *ngIf=\"responsibilityForm.assessment?.assessment_id\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">ASSESSMENTS</label>\n <div *ngIf=\"!responsibilityForm.assessment?.assessment_id\" class=\"select\">\n <input type=\"text\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" placeholder=\"Select an assessment for this responsibility\"\n [disabled]=\"responsibilityForm.checkpoints?.length\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.assessment?.assessment_id\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assessment', category)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm.assessment?.assessmentDetails\n ?.assessment_name\n }}</span>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-ml-1 vx-text-center\">\n {{ responsibilityForm.assessment?.assessmentDetails?.questions }}\n {{\n responsibilityForm.assessment?.assessmentDetails?.questions > 1\n ? \"Questions\"\n : \"Question\"\n }}\n </div>\n </div>\n\n <button *ngIf=\"assessmentDetails?.assessment_type !== 'compliance_audit'\" (click)=\"\n activateSelector('isAssessment', true); isAssessment = true\n \" class=\"edit\" type=\"button\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS\"\n [attr.id]=\"'CHECKPOINTS'\" [class.active]=\"activeSelector === 'checkpoints'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\" *ngIf=\"\n responsibilityForm?.checkpoints?.length > 0 &&\n activeSelector !== 'checkpoints'\n \">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <button *ngIf=\"responsibilityForm?.checkpoints?.length === 0\" class=\"button\"\n (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"responsibilityForm?.checkpoints?.length === 0\">\n <input [disabled]=\"!responsibilityForm.checkpoints?.length\" type=\"text\"\n (click)=\"activateSelector('checkpoints', true)\" placeholder=\"Add checkpoints for this responsibility\"\n readonly />\n <button [disabled]=\"!responsibilityForm.checkpoints?.length\" (click)=\"activateSelector('checkpoints', true)\"\n type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm.checkpoints?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints?.slice(0, 1)\n \">\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"checkpoint?.label\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ checkpoint?.label }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"checkpoint.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm.checkpoints?.length > 1\">\n +{{ responsibilityForm.checkpoints?.length - 1 }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"responsibilityForm.checkpoints?.length>1\" [class.plus]=\"responsibilityForm.checkpoints?.length>2\">\n <span class=\"chip\" *ngFor=\"let checkpoint of responsibilityForm.checkpoints?.slice(0,1)\">{{checkpoint?.label}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm.checkpoints?.length > 1\" type=\"button\" appPopover (click)=\"checkpoint.popover()\" placement=\"right\">+{{responsibilityForm.checkpoints?.length- 1}}</button>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <div *ngIf=\"this.responsibilityForm.checkpoints?.length\" class=\"assessment-text\">\n <i class=\"icons alert-icon\"></i>\n <span>You can now use the new <strong>Checkpoints </strong>or\n <strong>Assessments</strong> feature instead of the old checkpoints\n functionality to create analytical questions.\n <button class=\"remove-btn\" (click)=\"onRemoveCheckpoints('checkpoint')\">\n Remove Checkpoints\n </button>\n to continue.</span>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- New Checkpoints -->\n <!-- *ngIf=\"moreOptions.checkpoints\" -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.CHECKPOINTS_NEW\"\n [attr.id]=\"'CHECKPOINTS-NEW'\" [class.active]=\"activeSelector === 'checkpoints-new'\">\n <div class=\"left\">\n <img [src]=\"ASSETS.checkpoints\" alt=\"im\" *ngIf=\"\n responsibilityForm?.checkpoints?.length == 0 ||\n activeSelector === 'checkpoints'\n \" />\n\n <svg class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\"\n *ngIf=\"checkpointCount > 0 && activeSelector !== 'checkpoints'\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n <!-- {{responsibilityForm.checkpoints|json}}\n {{responsibilityForm.checkpointInstruction}} -->\n\n Checkpoints\n <!-- <span class=\"checkpoint-version\"> V2.0</span> -->\n <!-- <button class=\"button\"\n (click)=\"activateSelector('checkpoints-new',true)\">+ Add Checkpoints</button> -->\n </label>\n <div class=\"select button-sec\" *ngIf=\"checkpointCount === 0\">\n <input type=\"text\" (click)=\"activateSelector('checkpoints-new', true)\"\n placeholder=\"Add checkpoints for this responsibility\" readonly />\n <button (click)=\"activateSelector('checkpoints-new', true)\" type=\"button\">\n Add Checkpoints\n </button>\n </div>\n <div class=\"selected\" *ngIf=\"checkpointCount > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{ checkpointCount }}\n {{ checkpointCount > 1 ? \"Questions\" : \"Question\" }}</span>\n </div>\n\n <!-- <div class=\"chip-container checkpoints\" [class.more-one]=\"checkpointCount > 0\">\n <span class=\"chip\">\n <i class=\"icons\" (click)=\"onRemoveCheckpoints('new-checkpoints')\"></i>\n {{checkpointCount}} {{checkpointCount > 1 ? 'Questions': 'Question'}}</span>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'checkpoints-new'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('checkpoints-new', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n </div>\n <app-popover #checkpoint [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let checkpoint of responsibilityForm.checkpoints | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n {{ checkpoint?.label }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.RISK_CLASSIFICATION\"\n [attr.id]=\"'RISK_CLASSIFICATION'\" [class.active]=\"activeSelector === 'riskCalculator'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'riskCalculator' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"responsibilityForm?.riskClass\">\n <svg *ngIf=\"responsibilityForm?.riskClass\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Risk Classification\n <button (click)=\"activateSelector('riskCalculator', true)\" class=\"button\">\n + Risk Calculator\n </button>\n </label>\n\n <div class=\"classification\">\n <label class=\"low\" *ngFor=\"let risk of riskClassification\" [ngClass]=\"[risk.class]\">\n <input type=\"radio\" name=\"classification\" [(ngModel)]=\"responsibilityForm.riskClass\"\n [value]=\"risk?.value\" />\n <span>{{ risk?.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.REVIEWER\" [attr.id]=\"'REVIEWER'\"\n [class.active]=\"\n activeSelector === 'reviewerFrequency' || activeSelector === 'reviewer'\n \" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.reviewers?.list?.length == 0 ||\n activeSelector === 'reviewer'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.reviewers?.list?.length > 0 &&\n activeSelector !== 'reviewer'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.reviewers?.list?.length == 0 &&\n responsibilityForm?.groupReviewers?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('reviewer', true)\" placeholder=\"Select Reviewer\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.reviewers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.reviewers?.list?.length > 0 ||\n responsibilityForm?.groupReviewers?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"reviewer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ reviewer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"reviewer.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"!featureFlag_groups\" [class.more-one]=\"responsibilityForm?.reviewers?.list?.length>1\"\n [class.plus]=\"responsibilityForm?.reviewers?.list?.length>2\">\n <span class=\"chip\" *ngFor=\"let reviewer of responsibilityForm?.reviewers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('reviewer',reviewer)\"></i> {{reviewer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.reviewers?.list?.length > 2\" type=\"button\" appPopover (click)=\"reviewer.popover()\" placement=\"right\">+{{responsibilityForm?.reviewers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.reviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('reviewer', responsibilityForm?.reviewers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.reviewers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.reviewers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"user.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\">\n +{{ responsibilityForm?.reviewers?.list?.length - 1 }}\n </button>\n </div>\n <div class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.reviewers?.list.length > 0 &&\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n &\n </div>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'groupReviewer',\n responsibilityForm?.groupReviewers?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.groupReviewers?.list[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"group.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\">\n +{{ responsibilityForm?.groupReviewers?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 \">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('reviewer',responsibilityForm?.reviewers?.list[0])\" ></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.reviewers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.reviewers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.reviewers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"user.popover()\" placement=\"left\"> +{{responsibilityForm?.reviewers?.list?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.reviewers?.list.length > 0 && responsibilityForm?.groupReviewers?.list?.length > 0\">&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.groupReviewers?.list.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('groupReviewer',responsibilityForm?.groupReviewers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.groupReviewers?.list[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.groupReviewers?.list[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.groupReviewers?.list?.length > 1\" class=\"count\" appPopover (click)=\"group.popover()\" placement=\"right\">+{{responsibilityForm?.groupReviewers?.list?.length - 1}}</button>\n\n </div>\n </div> -->\n\n <button *ngIf=\"activeSelector !== 'reviewer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('reviewer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-cs-radio [checked]=\"responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('sequential')\" [class.disabled]=\"\n responsibilityForm?.groupReviewers?.list?.length > 0\n \">\n SEQUENTIAL<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review one at a time in the sequence defined by you.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-cs-radio [checked]=\"!responsibilityForm.reviewers.sequentialWorkflow\" [name]=\"'reviewer'\"\n (checkedEvent)=\"onReviewerWorkflowChange('anyReviewer')\">\n ANY REVIEWER CAN MARK THIS AS REVIEWED<i class=\"icons\" [appTooltip]=\"\n 'The responsibility will be sent for review to all reviewers at the same time. If anyone of the reviewer reviews the responsibility, it will be considered as reviewed.'\n \" placement=\"bottom-right\" delay=\"0\" type=\"white\" [tooltipMandatory]=\"true\"></i>\n </app-cs-radio>\n <app-popover #reviewer [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #user [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let reviewer of responsibilityForm?.reviewers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('reviewer', reviewer)\"></i>\n {{ reviewer.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #group [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.groupReviewers?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupReviewer', group)\"></i>\n {{ group.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.OVERSEER\" [attr.id]=\"'OVERSEER'\"\n [class.active]=\"\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n \" [class.disabled]=\"\n activeSelector &&\n !['overseerNotify', 'overseerNotify'].includes(activeSelector) &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.oversight\" alt=\"\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseers?.notifyList?.length == 0) ||\n activeSelector === 'overseerNotify' ||\n activeSelector === 'overseer'\n \" />\n <svg class=\"checkIcon\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseers?.notifyList?.length > 0) &&\n !(\n activeSelector === 'overseerNotify' || activeSelector === 'overseer'\n )\n \" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.list?.length == 0 &&\n responsibilityForm?.overseersGroups?.list?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseer', true)\"\n placeholder=\"Who should have oversight of the responsibility?\" readonly />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.list?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.list?.length > 0 ||\n responsibilityForm?.overseersGroups?.list?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseer', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseers.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.list?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.list?.length>2\" *ngIf=\"!featureFlag_groups\" >\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.list?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseer',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.list?.length > 2\" type=\"button\" appPopover (click)=\"overseers.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.list?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\" *ngIf=\"featureFlag_groups\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.list.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove('overseer', responsibilityForm?.overseers?.list[0])\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.list[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.list[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"overseerUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\">\n +{{ responsibilityForm?.overseers?.list?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.list.length > 0 &&\n responsibilityForm?.overseersGroups?.list?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroup',\n responsibilityForm?.overseersGroups?.list[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.list[0].group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.list[0].group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"overseerGroup.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\">\n +{{ responsibilityForm?.overseersGroups?.list?.length - 1 }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0\" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseer',responsibilityForm?.overseers?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.list[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.list[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.list?.length > 1\" class=\"count user\" appPopover (click)=\"overseerUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.list?.length -1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.list.length > 0 && responsibilityForm?.overseersGroups?.list?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroup',responsibilityForm?.overseersGroups?.list[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.list[0].group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.list[0].group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.list?.length > 1\" class=\"count\" appPopover (click)=\"overseerGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.list?.length -1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseer'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseer', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n\n <div class=\"select\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n !featureFlag_groups) ||\n (responsibilityForm?.overseers?.notifyList?.length == 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length == 0 &&\n featureFlag_groups)\n \">\n <input type=\"text\" (click)=\"activateSelector('overseerNotify', true)\"\n placeholder=\"Who should be notified if the responsibility is not complet...\" readonly [appTooltip]=\"\n 'Who should be notified if the responsibility is not completed?'\n \" placement=\"bottom\" delay=\"0\" [tooltipMandatory]=\"true\" />\n </div>\n <div class=\"selected\" *ngIf=\"\n (responsibilityForm?.overseers?.notifyList?.length > 0 &&\n !featureFlag_groups) ||\n ((responsibilityForm?.overseers?.notifyList?.length > 0 ||\n responsibilityForm?.overseersGroups?.notifyList?.length > 0) &&\n featureFlag_groups)\n \">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"!featureFlag_groups\">\n <ng-container *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList?.slice(\n 0,\n 1\n )\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('overseerNotifyList', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"overseer.member_name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ overseer.member_name }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notify.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"responsibilityForm?.overseers?.notifyList?.length>1\" [class.plus]=\"responsibilityForm?.overseers?.notifyList?.length>2\" *ngIf=\"!featureFlag_groups\">\n <span class=\"chip\" *ngFor=\"let overseer of responsibilityForm?.overseers?.notifyList?.slice(0,2)\"><i class=\"icons\" (click)=\"remove('overseerNotifyList',overseer)\"></i> {{overseer.member_name}}</span>\n <button class=\"count\" *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 2\" type=\"button\" appPopover (click)=\"notify.popover()\" placement=\"right\">+{{responsibilityForm?.overseers?.notifyList?.slice(2).length}}</button>\n </div> -->\n\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerNotifyList',\n responsibilityForm?.overseers?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseers?.notifyList[0]?.employee_name\n }}</span>\n <button\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\"\n appPopover (click)=\"notifyUser.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\">\n +{{ responsibilityForm?.overseers?.notifyList?.length - 1 }}\n </button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"\n responsibilityForm?.overseers?.notifyList.length > 0 &&\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">&</span>\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 0\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"\n remove(\n 'overseerGroupNotifyList',\n responsibilityForm?.overseersGroups?.notifyList[0]\n )\n \"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\n }}</span>\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"notifyGroup.popover()\" placement=\"right\" *ngIf=\"\n responsibilityForm?.overseersGroups?.notifyList?.length > 1\n \">\n +{{\n responsibilityForm?.overseersGroups?.notifyList?.length - 1\n }}\n </button>\n </div>\n </div>\n\n <!-- <div class=\"chip-container\" *ngIf=\"featureFlag_groups\">\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0\">\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerNotifyList',responsibilityForm?.overseers?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseers?.notifyList[0]?.employee_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\">{{responsibilityForm?.overseers?.notifyList[0]?.employee_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseers?.notifyList?.length > 1\" class=\"count user\" appPopover (click)=\"notifyUser.popover()\" placement=\"left\"> +{{responsibilityForm?.overseers?.notifyList?.length - 1}}</button>\n </div>\n <span class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\" *ngIf=\"responsibilityForm?.overseers?.notifyList.length > 0 && responsibilityForm?.overseersGroups?.notifyList?.length > 0\" >&</span>\n <div class=\"chip-inner\" *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 0 \" >\n <i class=\"icons cross vx-mr-1\" (click)=\"remove('overseerGroupNotifyList',responsibilityForm?.overseersGroups?.notifyList[0])\"></i>\n <span class=\"chip\" [appTooltip]=\"responsibilityForm?.overseersGroups?.notifyList[0]?.group_name\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory]=\"false\"><span class=\"vx-fs-11 vx-paragraph-txt vx-fw-500\" >{{responsibilityForm?.overseersGroups?.notifyList[0]?.group_name}}</span></span>\n <button *ngIf=\"responsibilityForm?.overseersGroups?.notifyList?.length > 1\" class=\"count\" appPopover (click)=\"notifyGroup.popover()\" placement=\"right\">+{{responsibilityForm?.overseersGroups?.notifyList?.length - 1}}</button>\n </div>\n </div> -->\n <button *ngIf=\"activeSelector !== 'overseerNotify'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('overseerNotify', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #overseers [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseers of responsibilityForm?.overseers?.list\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseer', overseers)\"></i>\n {{ overseers?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseersGroups?.list\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroup', overseer)\"></i>\n {{ overseer?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notify [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyUser [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let overseer of responsibilityForm?.overseers?.notifyList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerNotifyList', overseer)\"></i>\n {{ overseer?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #notifyGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let group of responsibilityForm?.overseersGroups?.notifyList\n | slice : 1;\n let i = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('overseerGroupNotifyList', group)\"></i>\n {{ group?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Assurance -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\" *ngIf=\"moreOptions?.ASSURANCE\" [attr.id]=\"'ASSURANCE'\"\n [class.active]=\"activeSelector === 'assurance'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assurance' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.reviewer\" alt=\"\" *ngIf=\"\n responsibilityForm?.assuranceList?.length == 0 ||\n activeSelector === 'assurance'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.assuranceList?.length > 0 &&\n activeSelector !== 'assurance'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Assurance</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.assuranceList?.length == 0\">\n <div class=\"custom-input\" (click)=\"activateSelector('assurance', true)\"\n aria-placeholder=\"Select the test plan categories that you would like to add this responsibility to.\"></div>\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.assuranceList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"\n let assurance of responsibilityForm?.assuranceList?.slice(0, 1)\n \">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assurance', assurance)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"assurance.category_name\"\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ assurance.category_name\n }}</span>\n </ng-container>\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"assurance.popover()\" placement=\"right\"\n *ngIf=\"responsibilityForm?.assuranceList?.length > 1\">\n +{{ responsibilityForm?.assuranceList?.slice(1).length }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'assurance'\" class=\"edit\" type=\"button\"\n (click)=\"activateSelector('assurance', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #assurance [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let assurance of responsibilityForm?.assuranceList\n | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assurance', assurance)\"></i>\n {{ assurance.category_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Requires Audit -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.REQUIRES_AUDIT && responsibilityForm.rc.length > 0\" [attr.id]=\"'REQUIRES_AUDIT'\"\n [class.active]=\"activeSelector === 'requires_audit'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'requires_audit' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.requiresAuditList?.length == 0 ||\n activeSelector === 'requires_audit'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.requiresAuditList?.length > 0 &&\n activeSelector !== 'requires_audit'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REQUIRES AUDIT?</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.requiresAuditList?.length == 0\">\n <input type=\"text\" placeholder=\"If yes, select an Audit Category.\" readonly\n (click)=\"activateSelector('requires_audit', true)\" />\n </div>\n <div class=\"selected\" *ngIf=\"responsibilityForm?.requiresAuditList?.length > 0\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('requires_audit', overseer)\"></i>\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"\n responsibilityForm?.requiresAuditList[0]?.category_name\n \" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{\n responsibilityForm?.requiresAuditList[0]?.category_name\n }}</span>\n </div>\n\n <button class=\"edit\" type=\"button\" (click)=\"activateSelector('requires_audit', true)\">\n <i class=\"icons\"></i> Edit\n </button>\n <!-- class=\"icons\"></i>\n Edit</button> -->\n </div>\n <ng-container *ngIf=\"responsibilityForm?.requiresAuditList?.length\">\n <label class=\"vx-control-panel vx-mt-8\">\n SAMPLE SIZE\n <app-cs-switch [(ngValue)]=\"isSample\" (ngValueChange)=\"switchEnable($event)\"></app-cs-switch>\n </label>\n <div class=\"sample-part\" [class.disabled]=\"!isSample\">\n <app-cs-radio value=\"0\" class=\"sample-radio\" (click)=\"selectedSampleData(0)\"\n [checked]=\"selectedSample === 0\">\n <div class=\"name\">COUNT</div>\n <input type=\"number\" placeholder=\"--\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"sampleValue\" />\n </app-cs-radio>\n <div class=\"or\">OR</div>\n <app-cs-radio value=\"1\" class=\"sample-radio\" (click)=\"selectedSampleData(1)\"\n [checked]=\"selectedSample === 1\">\n <div class=\"name\">PERCENTAGE</div>\n <input type=\"number\" (keypress)=\"checkInputValue($event)\" [(ngModel)]=\"samplePercentage\"\n placeholder=\"--\" />\n </app-cs-radio>\n </div>\n <label class=\"vx-control-panel vx-mt-8\">SET A REMINDER IF THE AUDIT PLAN IS NOT CREATED.</label>\n <div class=\"reminder-part\">\n Send reminder every\n <input type=\"number\" value=\"2\" [(ngModel)]=\"sendAuditRemindersValue\" />\n Day by\n <div class=\"picker-group\">\n <input class=\"time\" aria-label=\"12hr format\" [(ngModel)]=\"auditTime\" [ngxTimepicker]=\"dailyTime\"\n placeholder=\"auditTime.toUpperCase()\" type=\"text\" [min]=\"currentTime\" readonly />\n <i class=\"icons\"></i>\n <ngx-material-timepicker #dailyTime [defaultTime]=\"auditTime\">\n </ngx-material-timepicker>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Link of GRC objects -->\n <div [appScrollInView]=\"scrollToBottom\" class=\"form-group-row\"\n *ngIf=\"moreOptions?.GRC_OBJECTS && responsibilityForm.rc.length > 0\" [attr.id]=\"'GRC_OBJECTS'\"\n [class.active]=\"activeSelector === 'GRC_OBJECTS'\" [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'GRC_OBJECTS' &&\n sideSelectorElements.includes(activeSelector)\n \">\n <div class=\"left\" [class.checked]=\"false\">\n <img [src]=\"ASSETS.audit\" alt=\"\" *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length == 0 ||\n activeSelector === 'GRC_OBJECTS'\n \" />\n\n <svg *ngIf=\"\n responsibilityForm?.selectedGRCObjects?.length > 0 &&\n activeSelector !== 'GRC_OBJECTS'\n \" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK GRC OBJECT(S)</label>\n <div class=\"select\" *ngIf=\"responsibilityForm?.selectedGRCObjects?.length === 0\">\n <input type=\"text\" placeholder=\"Select GRC object(s) to link with this responsibility\" readonly\n (click)=\"activateSelector('GRC_OBJECTS', true)\" />\n </div>\n <ng-container *ngIf=\"responsibilityForm?.selectedGRCObjects?.length\">\n <ng-container *ngFor=\"let selectedGRC of GRC_TYPE_ARRAY; let i = index\">\n <div *ngIf=\"grcDataWithTypes[selectedGRC]?.length\" class=\"selected vx-mb-2\">\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\">\n <ng-container *ngFor=\"let grc of grcDataWithTypes[selectedGRC]?.slice(0, 1)\">\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('GRC_OBJECTS', grc, 0)\"></i>\n <div class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\">\n {{ selectedGRC | titlecase }}\n </div>\n\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"grc?.name\" placement=\"bottom-left\"\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{ grc?.name }}</span>\n </ng-container>\n\n <button\n class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\"\n appPopover (click)=\"popoverGRC.popover()\" placement=\"left\"\n *ngIf=\"grcDataWithTypes[selectedGRC]?.length > 1\">\n +{{ grcDataWithTypes[selectedGRC].length - 1 }}\n </button>\n </div>\n\n <button *ngIf=\"activeSelector !== 'GRC'\" class=\"edit\" type=\"button\" (click)=\"\n selectedGRCTab = grcDataWithTypes[selectedGRC][0]?.type;\n getOtherGRCObjects();\n activateSelector('GRC_OBJECTS', true)\n \">\n <i class=\"icons\"></i> Edit\n </button>\n </div>\n <app-popover #popoverGRC [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"\n let grc of grcDataWithTypes[selectedGRC] | slice : 1;\n let j = index\n \">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('GRC_OBJECTS', grc, j + 1)\"></i>\n {{ grc.name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<app-users-radio-list *ngIf=\"activeSelector === 'assignors'\" [usersList]=\"assignorsList\"\n [selectedUsers]=\"responsibilityForm.assignors.list\" [itemEmailKey]=\"'member_email'\" [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"saveSelectedList('assignors', $event)\"\n (closeUsersList)=\"activeDeselector()\" [loaded]=\"assignorsListLoaded\">\n</app-users-radio-list>\n\n<ng-container *ngIf=\"activeSelector === 'assignees'\">\n <app-group-users-list *ngIf=\"\n isEntrust || responsibilityForm?.assignees?.whoCanComplete === 'ANY_ONE'\n \" [openedFrom]=\"openedFrom\" [usersList]=\"assigneesList\" [fromResponsibility]=\"'Assignee'\" [groupsList]=\"groupsList\"\n [assigneeGroupsList]=\"groupAssigneeList\" [selectedUsers]=\"responsibilityForm?.assignees?.list\"\n [selectedGroups]=\"responsibilityForm?.assigneeGroups?.list\" [userIdKey]=\"'my_member_id'\" [groupIdKey]=\"'group_id'\"\n [loader]=\"userListLoader || assignorsListLoader\" (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"activeDeselector()\" [groupsEnabled]=\"featureFlag_groups\">\n </app-group-users-list>\n <app-users-radio-list *ngIf=\"\n !isEntrust && responsibilityForm.assignees.whoCanComplete !== 'ANY_ONE'\n \" [itemEmailKey]=\"'employee_email'\" [usersList]=\"assigneesList\" [selectedUsers]=\"responsibilityForm.assignees.list\"\n [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'employee_name'\" [fromResponsibility]=\"'Assignee'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\" (closeUsersList)=\"activeDeselector()\"\n [loaded]=\"assigneesListLoaded\">\n </app-users-radio-list>\n</ng-container>\n\n<app-checkpoints *ngIf=\"activeSelector === 'checkpoints'\"\n [checkpointInstruction]=\"responsibilityForm?.checkpointInstruction\" [checkpointData]=\"responsibilityForm?.checkpoints\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\" (closeCheckPoint)=\"activeDeselector()\"></app-checkpoints>\n<app-frequency-container *ngIf=\"activeSelector === 'frequency'\" [frequencyDetails]=\"frequencyDetails\"\n [feature]=\"feature\" [onCompletionResponsibility]=\"responsibilityDetails?.onCompletionResponsibility\"\n (selectedFrequency)=\"frequencyData($event)\" [mode]=\"'responsibility'\" (closeFrequency)=\"activeDeselector()\">\n</app-frequency-container>\n\n<app-responsibility-centers-list *ngIf=\"activeSelector === 'rc'\" [loaded]=\"rcListLoaded\"\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"\n mode == 'EDIT' && responsibilityCenterType === 0 ? true : false\n \" [selectedResponsibilityCenters]=\"responsibilityForm.rc\" [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\" (closeRcList)=\"activeDeselector()\">\n</app-responsibility-centers-list>\n\n<app-category-multi-select *ngIf=\"activeSelector === 'category'\" [categoryList]=\"categories\"\n [allCategories]=\"allCategories\" [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"responsibilityForm.category\"\n (saveSelectedCategory)=\"saveSelectedList('category', $event)\" (closeCategoriesList)=\"activeDeselector()\">\n</app-category-multi-select>\n\n<!-- Program List Popup -->\n<app-list-container *ngIf=\"activeSelector === 'program'\" (close)=\"activeDeselector()\">\n <app-program-list body (itemsSelectedChange)=\"onItemsSelectedChange($event)\" [selectedItems]=\"selectedPrograms\"\n [url]=\"programListUrl\"></app-program-list>\n <div class=\"vx-d-flex vx-align-center vx-justify-between vx-w-100\" footer>\n <div class=\"left-side vx-fs-12 vx-d-flex\">\n <ng-container *ngIf=\"allProgamSelected.length > 0\">\n <button\n class=\"selected-count-box vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\">\n {{ allProgamSelected.length }}\n </button>\n <span class=\"selected-text\">\n Program\n {{ allProgamSelected.length > 1 ? \"Categories\" : \"Category\" }}\n Selected</span>\n </ng-container>\n </div>\n <div class=\"right-side vx-d-flex\">\n <button class=\"cancelBtn\" (click)=\"activeDeselector()\">Cancel</button>\n <button class=\"nextBtn\" (click)=\"activeDeselector(); selectCategory()\">\n Next <i class=\"icons\"></i>\n </button>\n </div>\n </div>\n</app-list-container>\n\n<app-owner-list *ngIf=\"activeSelector === 'reviewer' && !featureFlag_groups\" [listHeading]=\"'Select a Reviewer'\"\n [singularText]=\"'User selected'\" [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [showWorkflow]=\"true\"\n [selectedUsers]=\"responsibilityForm.reviewers.list\" [userIdKey]=\"'employee_id'\" [itemEmailKey]=\"'employee_email'\"\n [itemNameKey]=\"'member_name'\" (saveSelectedList)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" (closeUsersList)=\"activeDeselector()\" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'reviewer' && featureFlag_groups\" [selectedReviewer]=\"true\"\n [userlist]=\"reviewerMemberIdsList\" [groupEnabled]=\"true\" [groupList]=\"groupReviewerList\"\n [selectedGroups]=\"responsibilityForm?.groupReviewers?.list\" [selectedUsers]=\"responsibilityForm?.reviewers?.list\"\n (cancel)=\"activeDeselector()\" (save)=\"\n saveSelectedList('reviewer', $event);\n activateSelector('reviewerFrequency', true)\n \" [mode]=\"mode\" [fromResponsibility]=\"'Reviewer'\" [loading]=\"userListLoader || assignorsListLoader\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\" [reviewerWorkflowType]=\"\n responsibilityForm?.reviewers?.sequentialWorkflow\n ? 'SEQUENTIAL'\n : 'ANY REVIEWER CAN MARK THIS AS REVIEWED'\n \" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n<app-owner-list *ngIf=\"activeSelector === 'overseer' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [selectedUsers]=\"responsibilityForm.overseers.list\"\n [userIdKey]=\"'employee_id'\" [fromResponsibility]=\"'Overseer'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseer', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\">\n</app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseer' && featureFlag_groups\" [groupEnabled]=\"true\"\n [groupList]=\"groupOverseerList\" [selectedGroups]=\"responsibilityForm?.overseersGroups?.list\"\n [userlist]=\"overseersList\" [selectedUsers]=\"responsibilityForm.overseers.list\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseer', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'overseerNotify' && !featureFlag_groups\" [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\" [usersList]=\"allUsersList\" [fromResponsibility]=\"'Overseer'\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [userIdKey]=\"'employee_id'\" [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('overseerNotify', $event)\" (closeUsersList)=\"activeDeselector()\"\n [itemEmailKey]=\"'employee_email'\"></app-owner-list>\n<user-group-list *ngIf=\"activeSelector === 'overseerNotify' && featureFlag_groups\" [userlist]=\"overseersList\"\n [groupEnabled]=\"true\" [groupList]=\"groupOverseerList\"\n [selectedGroups]=\"responsibilityForm?.overseersGroups?.notifyList\"\n [selectedUsers]=\"responsibilityForm.overseers.notifyList\" [fromResponsibility]=\"'Overseer'\"\n [loading]=\"userListLoader || assignorsListLoader\" (save)=\"saveSelectedList('overseerNotify', $event)\"\n (cancel)=\"activeDeselector()\" [featureflag]=\"featureFlag_groups\">\n</user-group-list>\n\n<app-owner-list *ngIf=\"activeSelector === 'assurance'\" [singularText]=\"'Test Category selected'\"\n [pluralText]=\"'Test Categories selected'\" [searchPlaceholder]=\"'Search Test Category...'\"\n [listHeading]=\"'Select Test Categories'\" [usersList]=\"assuranceCategoriesList\"\n [noDataText]=\"'No Test Categories Found'\" [selectedUsers]=\"responsibilityForm.assuranceList\"\n [userIdKey]=\"'category_id'\" [itemEmailKey]=\"'category_name'\" [itemNameKey]=\"'category_name'\"\n (saveSelectedList)=\"saveSelectedList('assurance', $event)\" (closeUsersList)=\"activeDeselector()\"\n [searchPlaceholder]=\"'Search Category'\">\n</app-owner-list>\n\n<app-audit-category-list *ngIf=\"activeSelector === 'requires_audit'\" (closeList)=\"activeDeselector()\"\n [auditCategory]=\"assuranceRequiresAuditList\" (saveSelectedList)=\"saveSelectedList('requires_audit', $event)\"\n [selectedData]=\"responsibilityForm?.requiresAuditList[0]\"></app-audit-category-list>\n\n<app-loader-inline *ngIf=\"(loader && this.mode === 'EDIT') || entrustLoader\"></app-loader-inline>\n<app-framework-list *ngIf=\"activeSelector === 'framework'\" (assignControl)=\"assignFromFramework($event)\"\n [previousSelectedValues]=\"selectedFrameworkValues\" (closeFramework)=\"activeDeselector()\"\n (entrustFramework)=\"entrustFramework($event)\"></app-framework-list>\n\n<!-- risk-calculator here -->\n<app-risk-classification *ngIf=\"activeSelector === 'riskCalculator'\" [currentRiskValue]=\"responsibilityForm.riskClass\"\n (saveList)=\"saveSelectedList('calculatedrisk', $event)\" (closeList)=\"activeDeselector()\">\n</app-risk-classification>\n\n<app-review-frequency *ngIf=\"activeSelector === 'reviewerFrequency'\" [reviewCompleteDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewCompleteDays\n \" [reviewNOtCompletedDays]=\"\n responsibilityForm.reviewers.reviewFrequency.reviewNOtCompletedDays\n \" (saveReviewFrequency)=\"saveSelectedList('reviewFrequency', $event)\" (closeReviewFrequency)=\"\n activeDeselector();\n activateSelector('reviewer', false);\n responsibilityForm.reviewers.list = [];\n responsibilityForm.groupReviewers.list = []\n \" (backToUserList)=\"activeDeselector(); activateSelector('reviewer', true)\">\n</app-review-frequency>\n\n<app-assessment-list *ngIf=\"isAssessment\" [program_ids]=\"responsibilityForm.program[0]?._id\" (cancelAssessment)=\"\n isAssessment = false; activateSelector('isAssessment', false)\n \" [isEdit]=\"responsibilityForm?.assessment?.assessment_id ? true : false\"\n [selectedAssessment]=\"responsibilityForm?.assessment\" (onAssessmentSelect)=\"\n onAssessmentSelect($event); activateSelector('isAssessment', false)\n \"></app-assessment-list>\n\n<app-smiley-dialog-inline *ngIf=\"showSmiley\" [message]=\"smileyMessage\" [actionButtons]=\"actionButtons\"\n (action)=\"action($event)\" (closeSmiley)=\"closeSmiley($event)\"></app-smiley-dialog-inline>\n\n<div class=\"import\" *ngIf=\"activeSelector === 'checkpoints-new'\">\n <app-create-assessment-container #editor [openPortal]=\"'RESPONSIBILITY_CHECKPOINT'\"\n (postAssessment)=\"postAssessment($event)\" (setIsUploaded)=\"setIsUploaded($event)\"\n [checkpointJSON]=\"responsibilityForm.new_checkpoints\">\n </app-create-assessment-container>\n</div>\n\n<app-grc-object-list *ngIf=\"activeSelector === 'GRC_OBJECTS'\" [grcObject]=\"grcList\"\n [selectedGRC]=\"responsibilityForm.selectedGRCObjects | refDisconnect\" [loader]=\"grcLoader\" [tableCard]=\"otherGRCCard\"\n [selectedTab]=\"selectedGRCTab\" [cardLoader]=\"grcTabLoader\" (getOtherGRCObjects)=\"getOtherGRCObjects($event)\"\n (saveOtherGRC)=\"saveSelectedList('GRC_OBJECTS', $event)\"\n (closeOtherGRC)=\"activateSelector('GRC_OBJECTS', false)\"></app-grc-object-list>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";::ng-deep .workflw-compliance{display:block;position:relative}::ng-deep .workflw-compliance vcomply-editor .editor-container{border-radius:4px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block{min-height:72px;padding:11px 15px;line-height:20px;font-size:14px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ul li{list-style:unset}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .workflw-compliance vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .workflw-compliance vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:22px}::ng-deep .workflw-compliance 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 .workflw-compliance 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 .workflw-compliance .sample-part{display:flex;align-items:center;margin-bottom:4px}::ng-deep .workflw-compliance .sample-part .sample-radio{width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item{position:relative;width:100%}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .radio{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:8px 8px 8px 36px;margin:0;max-width:100%;width:100%;display:flex;align-items:center;justify-content:space-between;pointer-events:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value .name{color:#747576;font-size:11px;font-weight:500;text-transform:uppercase}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input{border:1px solid #dcdcdc;background:#fff;border-radius:4px;height:24px;width:64px;text-align:center;padding:4px;color:#747576;font-size:13px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item .value input:focus{outline:none;box-shadow:none}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~svg{position:absolute;left:12px;top:12px}::ng-deep .workflw-compliance .sample-part .sample-radio .radio-item input:checked~.value{border:1px solid #34aa44;background:#eefcf0;pointer-events:auto}::ng-deep .workflw-compliance .sample-part .or{color:#161b2f;font-size:9px;font-weight:500;text-transform:uppercase;margin:0 10px}::ng-deep .workflw-compliance .sample-part.disabled{pointer-events:none}::ng-deep .workflw-compliance .sample-part.disabled .sample-radio .radio-item .value{background:#fbfbfb;border:1px solid #f1f1f1}::ng-deep .workflw-compliance .reminder-part{border:1px solid #dbdbdb;border-radius:4px;height:40px;padding:4px 12px;color:#747576;font-size:12px;display:flex;align-items:center}::ng-deep .workflw-compliance .reminder-part input{width:30px;border:none;border-radius:0;border-bottom:1px solid #dbdbdb;text-align:center;color:#747576;font-size:13px;font-weight:500;margin:0 4px}::ng-deep .workflw-compliance .reminder-part input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group{position:relative}::ng-deep .workflw-compliance .reminder-part .picker-group input{border:1px solid #f1f1f1!important;border-radius:4px!important;width:104px!important;height:28px!important;margin-left:8px!important;padding:6px 8px!important;cursor:pointer;color:#747576!important;font-size:12px!important;font-weight:500!important;text-align:left!important}::ng-deep .workflw-compliance .reminder-part .picker-group input:hover,::ng-deep .workflw-compliance .reminder-part .picker-group input:focus{outline:none!important;box-shadow:none!important}::ng-deep .workflw-compliance .reminder-part .picker-group i{color:#1e5dd3;position:absolute;top:6px;right:10px;font-size:16px}.assessment-text{color:#747576;font-size:11px;display:flex;align-items:center;padding:0 8px;margin:-16px 0 20px}.assessment-text i.alert-icon{color:#f2bf19;font-size:16px;margin-right:8px}.assessment-text strong{font-weight:600}.assessment-text button.remove-btn{background:transparent;border-radius:0;border:none;color:#1e5dd3;font-size:10px;font-weight:600;padding:0;margin:0}.import{position:fixed;inset:0 30px 0 0;z-index:-1;width:calc(100vw - 30px)}.wf-action-list ul.action-item li.multiple-program{background:#f8f8f8}.wf-action-list ul.action-item li.multiple-program .avatar-card{padding:2px 7.5px}.wf-action-list ul.action-item li.multiple-program .avatar-card span.value{color:#747576;font-size:11px;font-weight:600;width:unset}.primary-label{background:#7aa7f7;border-radius:2px;color:#fff;font-size:9px;font-weight:500;text-transform:uppercase;padding:0 4px;line-height:12px;margin:0 4px}.edit-due-date{display:flex;align-items:baseline;justify-content:space-between}.left-side{color:#707070}.right-side button{border-radius:2px;height:24px;background:#1e5dd3!important;display:flex;justify-content:center;align-items:center;cursor:pointer;color:#fff!important;text-transform:uppercase;font-size:11px;font-weight:500;border:none!important;padding:0 8px;margin:0 0 0 8px}.right-side button i{margin-left:8px;font-size:11px}.right-side button:disabled{background:#f1f1f1!important;color:#747576!important;opacity:1}.right-side button.cancelBtn{background:transparent!important;color:#eb2424!important}.selected-count-box{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem;position:relative}.selected-text{color:#707070;font-size:11px;font-weight:500;position:fixed;padding-left:2.5rem}\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 .chipContainer button.countBtn.blueBg{background:#1e5dd3}::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}.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"] }]
|
|
3961
3961
|
}], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.ResponsibilityService }, { type: i3.FrequencyService }, { type: i4.UiKitService }, { type: i5.SnackBarService }, { type: i1.AuthService }, { type: i6.ProgramsService }, { type: i7.GrcService }, { type: i8.OrganizationUserService }, { type: i9.ComplianceCommonService }, { type: i10.OrganizationCommonService }, { type: i11.IframeService }]; }, propDecorators: { mode: [{
|
|
3962
3962
|
type: Input
|
|
3963
3963
|
}], responsibilityId: [{
|
|
@@ -4017,4 +4017,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
4017
4017
|
type: ViewChild,
|
|
4018
4018
|
args: ['customItemTemplate', { static: true }]
|
|
4019
4019
|
}] } });
|
|
4020
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1jb21wbGlhbmNlL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctY29tcGxpYW5jZS93b3JrZmxvdy1jb21wbGlhbmNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFLbkMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBR25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWtCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsY0FBYyxHQUNmLE1BQU0saURBQWlELENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlELE1BQU0sT0FBTywyQkFBMkI7SUFnRHRDLElBQXlCLFVBQVUsQ0FBQyxlQUF3QjtRQUMxRCxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdC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Q0M3Q3hDLCs2NkdBKzhEaUY7OzRGRGw2RHBFLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSx5QkFBeUI7aWNBTzFCLElBQUk7c0JBQVosS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQXdDbUIsVUFBVTtzQkFBbEMsS0FBSzt1QkFBQyxZQUFZO2dCQUtWLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFLd0Isa0JBQWtCO3NCQUEvQyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFXZCxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBdVJZLFNBQVM7c0JBQTNCLFNBQVM7dUJBQUMsTUFBTTtnQkFHUixxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBeWpJNkMsa0JBQWtCO3NCQUFwRSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByb2dyYW1zU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgR1JDX1RZUEVfQVJSQVksXG4gIE9USEVSX0dSQ19DQVJELFxufSBmcm9tICcuLi93b3JrZmxvdy9zaGFyZWQvY29uc3RhbnRzL2dyY09iamVjdC5jb25zdGFudCc7XG5pbXBvcnQgeyBHcmNTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3cvc2hhcmVkL3NlcnZpY2VzL2dyYy5zZXJ2aWNlJztcbmltcG9ydCB7IERFRkFVTFRfMjRIUiwgREVGQVVMVF9USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3RpbWUuY29uc3RhbnRzJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wbGlhbmNlQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2NvbW1vbi13b3JrZmxvdy1zZXJ2aWNlcy9jb21wbGlhbmNlLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9jb21tb24td29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZyZXF1ZW5jeU9iamVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZnJlcXVlbmN5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVzcG9uc2liaWx0eS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL3Byb2dyYW0tbGlzdC9pbnRlcmZhY2VzL2xpc3QtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0L2ludGVyZmFjZXMvZGF0YS1zb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBBU1NFVFMgfSBmcm9tICcuLi9jb25zdGFudHMvYXNzZXRzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBQUk9HUkFNX0xJU1RfQVBJIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FwaS5jb25zdGFudHMnO1xuaW1wb3J0IHsgTU9OVEhfTkFNRVMgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd29ya2Zsb3ctY29tcGxpYW5jZScsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1jb21wbGlhbmNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0NvbXBsaWFuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiBEZWZpbmluZyB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xuICBASW5wdXQoKSByZXNwb25zaWJpbGl0eUlkOiBudW1iZXIgID0gMDtcbiAgQElucHV0KCkgZnJhbWV3b3JrRGV0YWlsczogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSBpc0VudHJ1c3Q6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmZWF0dXJlOiBhbnk7XG4gIEBJbnB1dCgpIGFzc2Vzc21lbnREZXRhaWxzOiBhbnk7XG4gIEBJbnB1dCgpIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEFTU0VUUyA9IEFTU0VUUztcbiAgYWxsR3JvdXBBc3NpZ25lZTogYm9vbGVhbiA9IHRydWU7XG4gIGFzc2lnbm9ySWQ6IGFueVtdID0gW107XG4gIGFzc2lnbmVlSWRzOiBhbnlbXSA9IFtdO1xuICByZXZpZXdlcklkczogYW55W10gPSBbXTtcbiAgb3ZlcnNlZXJJZHM6IGFueVtdID0gW107XG4gIGRpc2FibGVSYWRpb0Fzc2lnbmVlOiBhbnlbXSA9IFtdO1xuICBpc1Jlc3BvbnNpYmlsaXR5U2ltcGxpZmllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcbiAgcmVjZW50UmVzcG9uc2liaWxpdHlVcmw6IGFueSA9IHtcbiAgICBieVJlc3BvbnNpYmlsaXRpZXM6IHsgdHlwZTogWydyZWNlbnRfcmVzcG9uc2liaWxpdGllcyddLCBzdWJUeXBlOiBbJ0NDJ10gfSxcbiAgICBieVN0YXR1czogeyB0eXBlOiBbXSwgc3ViVHlwZTogW10gfSxcbiAgICBmaWx0ZXJPYmplY3Q6IHtcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiBbXSxcbiAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcbiAgICAgIGVudHJ1c3RlZFRvOiBbXSxcbiAgICAgIHJpc2tJZHM6IFtdLFxuICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXG4gICAgfSxcbiAgICB0aW1lUGVyaW9kRGV0YWlsczogeyB0eXBlOiAnJywgc2VsZWN0ZWRQZXJpb2Q6ICcnLCBzZWxlY3RlZFllYXI6ICcnIH0sXG4gICAgc3RhdHVzOiAnJyxcbiAgfTtcbiAgaXNSZXNwb25zaWJpbGl0eVJjTGlua0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JjTGlzdDogQXJyYXk8YW55PiA9IFtdO1xuICBncmNMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3RoZXJHUkNDYXJkOiBhbnkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KE9USEVSX0dSQ19DQVJEKSk7XG4gIHNlbGVjdGVkR1JDVGFiOiBudW1iZXIgPSAwO1xuICBncmNUYWJMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JjU2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgR1JDX1RZUEVfQVJSQVkgPSBHUkNfVFlQRV9BUlJBWTtcbiAgZ3JjRGF0YVdpdGhUeXBlczogYW55ID0ge1xuICAgIGFzc2V0czogW10sXG4gICAgcHJvY2Vzc2VzOiBbXSxcbiAgICB2ZW5kb3JzOiBbXSxcbiAgICBpbnZlbnRvcnk6IFtdLFxuICB9O1xuICBzZWxlY3RlZENhdGVnb3J5OiBhbnlbXSA9IFtdO1xuICBwcm9ncmFtTGlzdFVybCA9IFBST0dSQU1fTElTVF9BUEk7XG5cbiAgQElucHV0KCdjbG9zZU9uRXNjJykgc2V0IGNsb3NlT25Fc2MoZXNjYXBlQ29uZGl0aW9uOiBib29sZWFuKSB7XG4gICAgaWYgKGVzY2FwZUNvbmRpdGlvbikge1xuICAgICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIG9yZ0RldGFpbHM6IGFueTtcblxuICB1cmwgPVxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZXNldEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoZWNrcG9pbnRDb3VudFVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByY1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBvcGVuZWRGcm9tITogYW55OyAvL3doZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnQgaXQgd2lsbCBiZSAnUklTS19UUkVBVE1FTlQnXG4gIEBJbnB1dCgpIHNlbGVjdGVkUkM6IG51bWJlciA9IDA7IC8vIDQtNSBkaWdpdCBpZCBvZiBzZWxlY3RlZCByYyBieSBkZWZhdWx0IHdoZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnRcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWRQcm9ncmFtOiBhbnkgPSBudWxsO1xuICBmZWF0dXJlRmxhZ19ncm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRQcm9ncmFtOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZFJldmlld2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCdzZWxlY3RlZFByb2dyYW0nKSBzZXQgc2V0U2VsZWN0ZWRQcm9ncmFtKHByb2dyYW06IGFueSkge1xuICAgIGlmIChwcm9ncmFtICYmIE9iamVjdC5rZXlzKHByb2dyYW0pPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtID0gcHJvZ3JhbTtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0gPSBbXTtcbiAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ucHVzaChwcm9ncmFtKTtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0ucHVzaChwcm9ncmFtKTtcbiAgICB9XG4gIH1cblxuICAvKiBDcmVhdGluZyBhbiBldmVudCBlbWl0dGVyLiAqL1xuICBAT3V0cHV0KCkgb25SZW1vdmluZ0NoZWNrcG9pbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaXNBc3Nlc3NtZW50RGlzYWJsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhc3NpZ25lZVR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGl0IHdpbGwgZW1pdCB3aGVuIGFzc2lnbmVlIHR5cGUgY2hhbmdlXG4gIEBPdXRwdXQoKSBvblJldmlld2VyVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gaXQgd2lsbCBlbWl0IHdoZW4gcmV2aWV3ZXIgdHlwZSBjaGFuZ2VcblxuICBlbnRydXN0TG9hZGVyID0gZmFsc2U7XG4gIHNjcm9sbFRvQm90dG9tID0gZmFsc2U7XG4gIGRlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XG4gICAgbW9kZTogJ3ByaW1lJyxcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXG4gICAgbGluazogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5JyxcbiAgfTtcbiAgcHJvZ3JhbVBlb3BsZUxpc3Q6IGFueSA9IHtcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcbiAgICByZXZpZXdlcnNMaXN0OiBbXSxcbiAgICBvdmVyc2VlcnNMaXN0OiBbXSxcbiAgfTtcbiAgbG9hZGVyID0gZmFsc2U7XG4gIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBlZGl0RGV0YWlscyE6IGFueTtcbiAgc21pbGV5TWVzc2FnZSA9IGBEb25lIWA7XG4gIGFjdGlvbkJ1dHRvbnMgPSBbXG4gICAge1xuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcbiAgICAgIGlkOiAnYWRkTW9yZScsXG4gICAgfSxcbiAgICB7IGJ1dHRvblRleHQ6ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3JyB9LFxuICBdO1xuICBzaG93U21pbGV5ID0gZmFsc2U7XG4gIG1lbWJlcklkID0gMDtcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgYXNzaWdub3JzTGlzdExvYWRlZCA9IGZhbHNlO1xuICBhc3NpZ25lZXNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGdyb3Vwc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgc2VsZWN0ZWRGcmFtZXdvcmtWYWx1ZXMhOiBhbnk7XG4gIGhhc1Jldmlld2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gdXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3NpZ25vcnNMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3NpZ25lZXNMaXN0OiBhbnlbXSA9IFtdO1xuICByZXZpZXdlcnNMaXN0OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlQXNzaWduZWVJZHM6IGFueVtdID0gW107XG4gIGRpc2FibGVSZXZpZXdlcklkczogYW55W10gPSBbXTtcbiAgZGlzYWJsZU92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xuICByZXZpZXdlck1lbWJlcklkc0xpc3Q6IGFueVtdID0gW107XG4gIGdyb3VwT3ZlcnNlZXJMaXN0OiBhbnlbXSA9IFtdO1xuICBncm91cFJldmlld2VyTGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBBc3NpZ25lZUxpc3Q6IGFueVtdID0gW107XG4gIG92ZXJzZWVyc0xpc3Q6IGFueVtdID0gW107XG4gIGFsbFVzZXJzTGlzdDogYW55W10gPSBbXTtcbiAgYmVoYWxmT2ZVc2Vyc0xpc3Q6IGFueVtdID0gW107XG4gIGFzc2lnbmVlVXNlckxpc3Q6IGFueVtdID0gW107XG4gIHJldmlld2VyVXNlckxpc3Q6IGFueVtdID0gW107XG4gIG92ZXJzZWVyVXNlckxpc3Q6IGFueVtdID0gW107XG4gIG92ZXJzZWVyVXNlck5vdGlmeUxpc3Q6IGFueVtdID0gW107XG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XG4gIGFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcbiAgT3JnR3JvdXA6IGFueVtdID0gW107XG4gIGFkbWluc0xpc3Q6IGFueVtdID0gW107XG4gIHJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3Q6IGFueVtdID0gW107XG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcbiAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xuICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IE51bWJlciA9IDA7XG5cbiAgcmVzcG9uc2liaWxpdHlGb3JtOiBhbnkgPSB7XG4gICAgYXNzaWdub3JzOiB7XG4gICAgICBlbmFibGU6IGZhbHNlLFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICByZXNwb25zaWJpbGl0eToge1xuICAgICAgbmFtZTogJycsXG4gICAgICBrZXlSZXNwb25zaWJpbGl0eTogZmFsc2UsXG4gICAgfSxcbiAgICBhc3NpZ25lZUdyb3Vwczoge1xuICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTllPTkUnLFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICBhc3NpZ25lZXM6IHtcbiAgICAgIHdob0NhbkNvbXBsZXRlOiAnQUxMJyxcbiAgICAgIGxpc3Q6IFtdLFxuICAgIH0sXG4gICAgYWxsb3dFZGl0RHVlRGF0ZTogZmFsc2UsXG4gICAgZnJlcXVlbmN5OiAnJyxcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgb2JqZWN0aXZlOiAnJyxcbiAgICByYzogW10sXG4gICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiAwLFxuICAgIGNhdGVnb3J5OiBbXSxcbiAgICBwcm9ncmFtOiBbXSxcbiAgICBwcm9ncmFtX3NlbGVjdGVkX2lkczogW10sXG4gICAgY2hlY2twb2ludEluc3RydWN0aW9uOiAnJyxcbiAgICBjdXN0b21UYWdzOiBbXSxcbiAgICBjaGVja3BvaW50czogW10sXG4gICAgcmV2aWV3ZXJzOiB7XG4gICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IHRydWUsXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxuICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAyLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgIH0sXG4gICAgZ3JvdXBSZXZpZXdlcnM6IHtcbiAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcbiAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXG4gICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDIsXG4gICAgICB9LFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICBvdmVyc2VlcnM6IHtcbiAgICAgIG5vdGlmeUxpc3Q6IFtdLFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICBvdmVyc2VlcnNHcm91cHM6IHtcbiAgICAgIG5vdGlmeUxpc3Q6IFtdLFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICBmb3JtYXRBbmRFdmlkZW5jZToge1xuICAgICAgZm9ybWF0UmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZm9ybWF0RmlsZXM6IFtdLFxuICAgICAgZm9ybWF0TGlua3M6IFtdLFxuICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZmFsc2UsXG4gICAgfSxcbiAgICBhc3N1cmFuY2VMaXN0OiBbXSxcbiAgICByZXF1aXJlc0F1ZGl0TGlzdDogW10sXG4gICAgcmlza0NsYXNzOiAnbG93JyxcbiAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxuICAgIGF1ZGl0X2NhdGVnb3J5X2RldGFpbHM6IHtcbiAgICAgIGNhdGVnb3J5X2lkOiAwLFxuICAgICAgc2FtcGxlOiA1LFxuICAgICAgcGVyY2VudGFnZTogMzAsXG4gICAgICBmcmVxdWVuY3lfcGF0dGVybjogJzF+MH4zfjEnLFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IERFRkFVTFRfMjRIUixcbiAgICB9LFxuICAgIGFzc2Vzc21lbnQ6IHtcbiAgICAgIGNhdGVnb3J5X2lkOiAnJyxcbiAgICAgIGFzc2Vzc21lbnRfaWQ6ICcnLFxuICAgIH0sXG4gICAgbmV3X2NoZWNrcG9pbnRzOiB7fSxcbiAgICBsaW5rZWRQcm9ncmFtOiBbXSxcbiAgICBzZWxlY3RlZEdSQ09iamVjdHM6IFtdLFxuICB9O1xuICBtb3JlT3B0aW9uczogYW55ID0ge1xuICAgIE9CSkVDVElWRTogZmFsc2UsXG4gICAgUkM6IGZhbHNlLFxuICAgIENBVEVHT1JZOiBmYWxzZSxcbiAgICBQUk9HUkFNOiBmYWxzZSxcbiAgICBGT1JNQVRFX0VWSURFTkNFOiBmYWxzZSxcbiAgICBDSEVDS1BPSU5UUzogZmFsc2UsXG4gICAgQVNTRVNTTUVOVDogZmFsc2UsXG4gICAgUklTS19DTEFTU0lGSUNBVElPTjogZmFsc2UsXG4gICAgUkVWSUVXRVI6IGZhbHNlLFxuICAgIE9WRVJTRUVSOiBmYWxzZSxcbiAgICBBU1NVUkFOQ0U6IGZhbHNlLFxuICAgIEFQUFM6IGZhbHNlLFxuICAgIFJFUVVJUkVTX0FVRElUOiBmYWxzZSxcbiAgICBDSEVDS1BPSU5UU19ORVc6IGZhbHNlLFxuICAgIEdSQ19PQkpFQ1RTOiBmYWxzZSxcbiAgfTtcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcbiAgc2lkZVNlbGVjdG9yRWxlbWVudHM6IGFueSA9IFtcbiAgICAnYXNzdXJhbmNlJyxcbiAgICAnZnJhbWV3b3JrJyxcbiAgICAnYXNzaWdub3JzJyxcbiAgICAnYXNzaWduZWVzJyxcbiAgICAnY2F0ZWdvcnknLFxuICAgICdwcm9ncmFtJyxcbiAgICAncmMnLFxuICAgICdjaGVja3BvaW50cycsXG4gICAgJ2ZyZXF1ZW5jeScsXG4gICAgJ3Jldmlld2VyJyxcbiAgICAncmV2aWV3ZXJGcmVxdWVuY3knLFxuICAgICdvdmVyc2VlcicsXG4gICAgJ292ZXJzZWVyTm90aWZ5JyxcbiAgICAncmlza0NhbGN1bGF0b3InLFxuICAgICdpc0Fzc2Vzc21lbnQnLFxuICAgICdyZXF1aXJlc19hdWRpdCcsXG4gICAgJ2NoZWNrcG9pbnRzLW5ldycsXG4gICAgJ0dSQ19PQkpFQ1RTJyxcbiAgXTtcblxuICBmb2N1cyA9IHtcbiAgICByZXNwb25zaWJpbGl0eU5hbWU6IGZhbHNlLFxuICAgIGRlc2NyaXB0aW9uOiBmYWxzZSxcbiAgICBvYmplY3RpdmU6IGZhbHNlLFxuICB9O1xuXG4gIGNhdGVnb3JpZXM6IGFueSA9IHtcbiAgICByZWd1bGF0aW9uczoge1xuICAgICAgbGlzdDogW10sXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdLFxuICAgIH0sXG4gICAgc3RhbmRhcmRzOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgICBpbnRlcm5hbENvbnRyb2xzOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgICBvdGhlcnM6IHtcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIGFsbFByb2dyYW1zOiBhbnlbXSA9IFtdO1xuXG4gIHJpc2tDbGFzc2lmaWNhdGlvbiA9IFtcbiAgICB7IG5hbWU6ICdMb3cnLCB2YWx1ZTogJ2xvdycsIGNsYXNzOiAnbG93JyB9LFxuICAgIHsgbmFtZTogJ0xvdy1NZWRpdW0nLCB2YWx1ZTogJ2xvd19tZWRpdW0nLCBjbGFzczogJ2xvdy1tZWQnIH0sXG4gICAgeyBuYW1lOiAnTWVkaXVtLUhpZ2gnLCB2YWx1ZTogJ21lZGl1bV9oaWdoJywgY2xhc3M6ICdtZWQtaGlnaCcgfSxcbiAgICB7IG5hbWU6ICdIaWdoJywgdmFsdWU6ICdoaWdoJywgY2xhc3M6ICdoaWdoJyB9LFxuICBdO1xuXG4gIGFzc2lnbm9yTW9kZSA9ICdjaGVja2JveCc7XG4gIHJjTW9kZSA9ICdjaGVja2JveCc7XG4gIGludmFsaWRUeXBlID0gJyc7XG4gIHJlc3BvbnNpYmlsaXR5UGF5bG9hZCE6IGFueTtcbiAgYXNzaWduZWVSYWRpb1NlbGVjdCA9IGZhbHNlO1xuICBwcm9ncmFtc0xpc3Q6IGFueVtdID0gW107XG5cbiAgLy8gZnJlcXVlbmN5IHZhcmlhYmxlIGRlY2xhcmF0aW9uXG4gIGZyZXF1ZW5jeURldGFpbHMgPSB7XG4gICAgcGF0dGVybjogJycsXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICBkYXRlT2ZNb2RpZmllZDogMCxcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgd2luZG93OiAwLFxuICAgIGZhaWxlZDogMCxcbiAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgZmFpbGVkVGltZTogJycsXG4gICAgY29udGludW91c19mYWlsZWRfZGF5czogMCxcbiAgICBvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzOiB7fSxcbiAgfTtcblxuICBmcmVxdWVuY3lPYmplY3Q6IEZyZXF1ZW5jeU9iamVjdCB8IG51bGwgPSBudWxsO1xuICBmcmVxdWVuY3lQbGFjZWhvbGRlciA9ICdIb3cgb2Z0ZW4gZG9lcyB0aGUgcmVzcG9uc2liaWxpdHkgb2NjdXI/JztcbiAgc2hvcnRNb250aDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBpc0VkaXRXaGF0OiBCb29sZWFuID0gdHJ1ZTtcbiAgaXNGcmFtZXdvcmtBdmFpbGFibGUgPSAxO1xuICBpc05vdGlmaWNhdGlvblBlbmRpbmcgPSAwO1xuXG4gIGFzc3VyYW5jZUZsYWchOiBhbnk7XG4gIHJpc2tDbGFzc2lmaWNhdGlvbkZsYWchOiBhbnk7XG4gIGhpZGRlbkxpc3Q6IGFueVtdID0gW107XG4gIHN1YnNjcmlwdGlvbkRldGFpbHMhOiBhbnk7XG4gIGlzUmlza0VuYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzRHVwbGljYXRlRW50cnVzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBhdWRpdFRpbWU6IHN0cmluZyA9IERFRkFVTFRfVElNRTtcbiAgc2VuZEF1ZGl0UmVtaW5kZXJzVmFsdWU6IG51bWJlciA9IDI7XG4gIHNhbXBsZVZhbHVlOiBhbnk7XG4gIHNhbXBsZVBlcmNlbnRhZ2U6IGFueTtcbiAgc2VsZWN0ZWRTYW1wbGUhOiBudW1iZXI7XG4gIGlzU2FtcGxlOiBib29sZWFuID0gZmFsc2U7XG4gIHRlbXBDaGVja1ZhbHVlOiBudW1iZXIgPSAtMTtcbiAgaXNBc3Nlc3NtZW50OiBib29sZWFuID0gZmFsc2U7XG4gIG1hbmFnZVBlcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgY2hlY2twb2ludENvdW50OiBudW1iZXIgPSAwO1xuICByb2xlQmFzZWRQZXJtaXNzaW9ucyE6IGFueTtcbiAgaXNHcm91cEFzc2lnbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIHJlc3BvbnNpYmlsaXR5RGF0YSE6IGFueTtcbiAgb3JpZ2luYWxBc3NpZ25lZSE6IGFueTtcbiAgdXNlckxpc3RMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXNzaWdub3JzTGlzdExvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICByYXdSZXNwb25zaWJpbGl0eTogYW55O1xuICBvdGhlckdSQ1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgYWxsb3dFZGl0RHVlRGF0ZUZlYXR1cmVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIGFsbFByb2dhbVNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBvbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eTogYW55O1xuXG5cbiAgQFZpZXdDaGlsZCgnd2hhdCcpIHdoYXRJbnB1dCE6IEVsZW1lbnRSZWY7XG4gIHVuU3Vic2NyaWJlUHJvZ3JhbSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgcmVzcG9uc2liaWxpdHlEZXRhaWxzOiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzcG9uc2liaWxpdHlTZXJ2aWNlOiBSZXNwb25zaWJpbGl0eVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lTZXJ2aWNlLFxuICAgIHByaXZhdGUgdWlLaXRTZXJ2aWNlOiBVaUtpdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbjogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9ncmFtU2VydmljZTogUHJvZ3JhbXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3JjU2VydmljZTogR3JjU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlOiBPcmdhbml6YXRpb25Vc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbXBsaWFuY2VDb21tb25TZXJ2aWNlOiBDb21wbGlhbmNlQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U6IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlLFxuXG4gICkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnVXNlckluZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wbGlhbmNlU3VibW9kdWxlID1cbiAgICAgICAgICByZXM/LnJvbGVBY3Rpb25zW1xuICAgICAgICAgICAgcmVzPy5yb2xlQWN0aW9ucz8uZmluZEluZGV4KFxuICAgICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZT8ubW9kdWxlTmFtZSA9PT0gJ2NvbXBsaWFuY2UnXG4gICAgICAgICAgICApXG4gICAgICAgICAgXT8uc3ViTW9kdWxlO1xuICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9XG4gICAgICAgICAgY29tcGxpYW5jZVN1Ym1vZHVsZVtcbiAgICAgICAgICAgIGNvbXBsaWFuY2VTdWJtb2R1bGU/LmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/LnN1Yk1vZHVsZU5hbWUgPT09ICdQcm9ncmFtcydcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdPy5wZXJtaXNzaW9ucztcbiAgICAgICAgdGhpcy5tYW5hZ2VQZXJtaXNzaW9uID0gcGVybWlzc2lvbnNbXG4gICAgICAgICAgcGVybWlzc2lvbnM/LmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZT8ubmFtZSA9PT0gJ21hbmFnZSBwcm9ncmFtcycpXG4gICAgICAgIF0/LmVuYWJsZVxuICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLm1hbmFnZVBlcm1pc3Npb24pIHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQ0FURUdPUlknKTtcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUFJPR1JBTScpO1xuICAgICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEZlYXR1cmVGbGFncygpO1xuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmdldEluaXRpYWxEYXRhKCk7XG4gICAgdGhpcy5wb3B1bGF0ZVJDTGlzdCgpO1xuICB9XG5cbiAgcG9wdWxhdGVSQ0xpc3QoKSB7XG4gICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJyAmJiB0aGlzLm1vZGUgPT09ICdDUkVBVEUnKSB7XG4gICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHNldEZlYXR1cmVGbGFncygpIHtcbiAgICB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcyA9IHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFxuICAgICAgJ2ZmX3Jlc3BvbnNpYmlsaXR5X2dyb3VwcydcbiAgICApO1xuICAgIHRoaXMuaXNSZXNwb25zaWJpbGl0eVNpbXBsaWZpZWQgPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcbiAgICAgICdmZl9yZXNwb25zaWJpbGl0eV9zaW1wbGlmaWNhdGlvbidcbiAgICApO1xuICAgIHRoaXMuaXNSZXNwb25zaWJpbGl0eVJjTGlua0VuYWJsZWQgPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcbiAgICAgICdmZl9yZXNwb25zaWJpbGl0eV9yY19saW5rJ1xuICAgICk7XG4gICAgdGhpcy5hbGxvd0VkaXREdWVEYXRlRmVhdHVyZUZsYWcgPVxuICAgICAgdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2VkaXRfZHVlX2RhdGUnKTtcbiAgfVxuXG4gIGdldEluaXRpYWxEYXRhKCkge1xuICAgIHRoaXMuaXNEdXBsaWNhdGUgPSB0aGlzLnJlc3BvbnNpYmlsaXR5RGV0YWlscz8uZHVwbGljYXRlID8/IGZhbHNlO1xuICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdBU1NFU1NNRU5UJyk7XG4gICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0FTU1VSQU5DRScpO1xuICAgIHRoaXMuZ2V0QXNzaWduZWVzTGlzdCgpO1xuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKTtcbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XG4gICAgdGhpcy5zaG9ydE1vbnRoID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLm1vbnRoQXJyYXkubWFwKChtb250aCkgPT5cbiAgICAgIG1vbnRoLnN1YnN0cmluZygwLCAzKVxuICAgICk7XG4gICAgaWYodGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnKXtcbiAgICAgIHRoaXMuZ2V0UkNEZXRhaWxzaW5SaXNrVHJlYXRtZW50KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdDUkVBVEUnKSB7XG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xuICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyLnVpZDtcbiAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdDSEVDS1BPSU5UUycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcbiAgICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0UkNMaXN0KCk7XG4gICAgICB0aGlzLmdldEdyb3Vwc0xpc3QoKTtcbiAgICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdCgpO1xuICAgIH1cbiAgICB0aGlzLmdldE9yZ0RldGFpbHMoKTtcbiAgICB0aGlzLmdldFN1YnNjcmlwdGlvbkRldGFpbCgpO1xuICAgIHRoaXMuc2V0UmVzcG9uc2liaWxpdHlOYW1lKCk7XG4gICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xuICB9XG5cbiAgZ2V0UkNEZXRhaWxzaW5SaXNrVHJlYXRtZW50KCl7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsXG4gICAgICBbdGhpcy5zZWxlY3RlZFJDXSxcbiAgICAgICdpdGVtX2lkJ1xuICAgICk7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5SQyA9IHRydWU7XG4gIH1cblxuICBnZXRPcmdEZXRhaWxzKCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnRGV0YWlsc0luZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzUmlza0VuYWJsZSA9IHJlcz8uZW5hYmxlX3Jpc2tjbGFzcyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgaWYgKCFyZXM/LmVuYWJsZV9yaXNrY2xhc3MpIHtcbiAgICAgICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnUklTS19DTEFTU0lGSUNBVElPTicpO1xuICAgICAgICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3Vic2NyaXB0aW9uRGV0YWlsKCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0U3Vic2NyaXB0aW9uRGV0YWlsc0luZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHMgPSByZXM7XG4gICAgICAgIHRoaXMuaGlkZU9wdGlvbkZyb21Nb3JlT3B0aW9ucygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaGlkZU9wdGlvbkZyb21Nb3JlT3B0aW9ucygpIHtcbiAgICBjb25zdCB2aXNpYmxlT3B0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzWzBdPy5hc3Nlc3NtZW50X2ZsYWcpIHtcbiAgICAgIHZpc2libGVPcHRpb25zLnB1c2goJ0FTU0VTU01FTlQnKTtcbiAgICB9XG5cbiAgICBpZih0aGlzLnN1YnNjcmlwdGlvbkRldGFpbHNbMF0/LmFzc3VyYW5jZV9mbGFnKXtcbiAgICAgIHZpc2libGVPcHRpb25zLnB1c2goJ0FTU1VSQU5DRScpO1xuICAgIH1cblxuICAgIHRoaXMuaGlkZGVuTGlzdCA9IHRoaXMuaGlkZGVuTGlzdD8uZmlsdGVyKFxuICAgICAgKGVsZSkgPT4gIXZpc2libGVPcHRpb25zLmluY2x1ZGVzKGVsZSlcbiAgICApO1xuICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcbiAgfVxuXG4gIGFjdGl2YXRlU2VsZWN0b3IodHlwZTogYW55LCBldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMuYWN0aXZlU2VsZWN0b3IgPSBldmVudCA/IHR5cGUgOiAnJztcbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cz8uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdjaGVja3BvaW50cy1uZXcnOlxuICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnByZXZpZXdQYW5lbC5uZXh0KGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIHRoaXMuZ2V0UkNMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcbiAgICAgICAgdGhpcy5nZXRBc3NpZ25vcnNMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWduZWVzJzpcbiAgICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNldFJlc3BvbnNpYmlsaXR5TmFtZSgpIHtcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF90eXBlID09PSAnY29tcGxpYW5jZV9hdWRpdCcpIHtcbiAgICAgIGNvbnN0IGFzc2Vzc21lbnREYXRhID0ge1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICB2YWx1ZTogJ0F1ZGl0OiAnICsgdGhpcy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGFzc2Vzc21lbnRfaWQ6IHRoaXMuYXNzZXNzbWVudERldGFpbHMuYWlkLFxuICAgICAgICBjYXRlZ29yeV9pZDogdGhpcy5hc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeVswXT8uX2lkLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXRBc3Nlc3NtZW50RGF0YShbdGhpcy5hc3Nlc3NtZW50RGV0YWlsc10sIHBheWxvYWQsICdhc3Nlc3NtZW50Jyk7XG5cbiAgICAgIHRoaXMud2hhdENoYW5nZWQoYXNzZXNzbWVudERhdGEpO1xuICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTJyk7XG4gICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQ0hFQ0tQT0lOVFNfTkVXJyk7XG4gICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XG4gICAgfVxuICB9XG5cbiAgd2hhdENoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZTtcbiAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IHRydWU7XG4gICAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3doYXQnKSB7XG4gICAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlRGVzZWxlY3RvcigpIHtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSB0cnVlO1xuICAgIHRoaXMubW9yZU9wdGlvbnNbZXZlbnQuY29kZV0gPSBldmVudC5jaGVja2VkO1xuICB9XG5cbiAgb25SY1R5cGVDaGFuZ2Uoc2VsZWN0ZWRUeXBlOiBOdW1iZXIpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9IHNlbGVjdGVkVHlwZSA/PyAwO1xuICB9XG5cbiAgZ2V0UkNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcbiAgICB9XG4gICAgdGhpcy5jb21wbGlhbmNlQ29tbW9uU2VydmljZT8uZ2V0UmNMaXN0SW5mbyhwYXJhbXMpPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IHJlcztcbiAgICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYywgJ3JjaWQnKTtcbiAgICAgICAgY29uc3QgUkMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgaWRzPy5pbmNsdWRlcyhlbGVtZW50LnJjaWQpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChSQz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSBSQztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJykge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LFxuICAgICAgICAgICAgW3RoaXMuc2VsZWN0ZWRSQ10sXG4gICAgICAgICAgICAncmNpZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYnV0dG9uVGV4dDogJ0dvIHRvIHJpc2sgdHJlYXRtZW50JyxcbiAgICAgICAgICAgICAgY2xhc3M6ICdibHVlLWJ0bicsXG4gICAgICAgICAgICAgIGlkOiAndmlldycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgICAgLy8gUHJldmlvdXNseSB0aGVyZSB3YXMgb25seSBSQyB3YXMgZW1pdHRpbmcgd2hpY2ggbWFkZSB0aGUgY2hlY2tlZCBvcHRpb25zIHRvIGRlIGNoZWNrIG5vdyBjaGVja2luZyB0aGUgY29uZGl0aW9uIGFuZCBzZW5kaW5nIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuICAgICAgICAgIGxldCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLm1vcmVPcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb3JlT3B0aW9uc1trZXldKSB7XG4gICAgICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVzZXJEZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmFjdGlvbkJ1dHRvbnM/Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnVXNlckluZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXM/Lm5vdGlmaWNhdGlvbl9wZW5kaW5nX2ZsYWc7XG4gICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zWzFdLmJ1dHRvblRleHQgPSB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZ1xuICAgICAgICAgICAgPyAnVmlldyBSZXNwb25zaWJpbGl0aWVzIGluIFF1ZXVlJ1xuICAgICAgICAgICAgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJztcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldE9yZ2FuaXphdGlvbkRldGFpbHMoKSB7XG4gICAgdGhpcy5vcmdhbml6YXRpb25Db21tb25TZXJ2aWNlPy5nZXRPcmdEZXRhaWxzSW5mbygpPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNGcmFtZXdvcmtBdmFpbGFibGUgPSByZXM/LmVuYWJsZV9yZXNwb25zaWJpbGl0eV9mcmFtZXdvcms7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRDYXRlZ29yeUxpc3QoKSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRDYXRlZ29yaWVzTGlzdCgpLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHJlcztcbiAgICAgICAgdGhpcy5hbGxDYXRlZ29yaWVzID0gY2xvbmVEZWVwKHJlcyk7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLm90aGVycy5saXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5yZWd1bGF0aW9ucy5saXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDIpIHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5zdGFuZGFyZHMubGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAzKSB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMuaW50ZXJuYWxDb250cm9scy5saXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBmaWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbShwcm9ncmFtX2lkPzogc3RyaW5nKSB7XG4gICAgdGhpcy51blN1YnNjcmliZVByb2dyYW0ubmV4dCgpO1xuICAgIHRoaXMudW5TdWJzY3JpYmVQcm9ncmFtLmNvbXBsZXRlKCk7XG4gICAgaWYgKHByb2dyYW1faWQgJiYgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcbiAgICAgIHRoaXMuZ2V0UGVvcGxlTGlzdEFnYWluc3RQSUQocHJvZ3JhbV9pZCk7XG4gICAgICB0aGlzLmdldFJDTGlzdChwcm9ncmFtX2lkKTtcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkKTtcbiAgICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXRBc3NpZ25lZXNMaXN0KCk7XG4gICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcbiAgICB9XG4gIH1cblxuICBnZXRQcm9ncmFtRGV0YWlscyhwcm9ncmFtSWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5wcm9ncmFtU2VydmljZS5nZXRQcm9ncmFtKHByb2dyYW1JZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICByZXM/LmFzc2Vzc21lbnQgJiZcbiAgICAgICAgcmVzPy5hc3Nlc3NtZW50Py5sZW5ndGggJiZcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpPy5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjYXRlZ29yeUFzc2Vzc21lbnQgPSByZXM/LmFzc2Vzc21lbnQuZmlsdGVyKFxuICAgICAgICAgIChhc3Nlc3NtZW50OiBhbnkpID0+XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWQgPT09XG4gICAgICAgICAgICBhc3Nlc3NtZW50Py5jYXRlZ29yeV9pZFxuICAgICAgICApO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2F0ZWdvcnlBc3Nlc3NtZW50Py5sZW5ndGggJiZcbiAgICAgICAgICBjYXRlZ29yeUFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnRJZHM/Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBpc0V4aXN0ID0gY2F0ZWdvcnlBc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50SWRzPy5pbmNsdWRlcyhcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWlzRXhpc3QpIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSB7XG4gICAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6ICcnLFxuICAgICAgICAgICAgICBjYXRlZ29yeV9pZDogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0ge1xuICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogJycsXG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogJycsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldExpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHByb2dyYW1faWQ6IHN0cmluZykge1xuICAgIHRoaXMuZ2V0UGVvcGxlTGlzdEFnYWluc3RQSUQocHJvZ3JhbV9pZCk7XG4gICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZCk7XG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KHByb2dyYW1faWQpO1xuICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdChwcm9ncmFtX2lkKTtcbiAgfVxuXG4gIGdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGlmIChwcm9ncmFtX2lkKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xuICAgIH1cbiAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldEFzc2lnbm9yc0xpc3QocGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5iZWhhbGZPZlVzZXJzTGlzdCA9IHJlcztcbiAgICAgICAgaWYgKHByb2dyYW1faWQpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuYXNzaWdub3JzTGlzdExvYWRlciA9IGZhbHNlO1xuICAgICAgICBpZiAocHJvZ3JhbV9pZCkge1xuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGdldEFzc2lnbmVlc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGlmIChwcm9ncmFtX2lkKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xuICAgIH1cbiAgICB0aGlzLnVzZXJMaXN0TG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmZldGNoQXNzaWduZWUocHJvZ3JhbV9pZCk7XG4gIH1cblxuICBmZXRjaEFzc2lnbmVlKHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWxsVXNlcnNMaXN0ID0gcmVzLm1hcCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcbiAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcm9ncmFtX2lkKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuYXNzaWduZWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudXNlckxpc3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMudXNlckxpc3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKHByb2dyYW1faWQpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRQZW9wbGVMaXN0QWdhaW5zdFBJRChwcm9ncmFtX2lkOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcbiAgICAgIHRoaXMudXNlckxpc3RMb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblVzZXJzKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0T3JnYW5pemF0aW9uVXNlckxpc3QocmVzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcyB8fFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCxcbiAgICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBhbGxJZHMgPSBbXG4gICAgICAgICAgICAgIC4uLm5ldyBTZXQoaWRzKSxcbiAgICAgICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9pZHNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgICAgIGFsbElkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhc3NpZ25vcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFzc2lnbm9ycyA9IHRoaXMuYXNzaWduZWVzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfaWRzPy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBlbGVtZW50Py5teV9tZW1iZXJfaWRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChhc3NpZ25vcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUHJvZ3JhbUFzc2lnbmVlR3JvdXAoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfcmV2aWV3ZXJzIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCxcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBhbGxJZHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KGlkcyksXG4gICAgICAgICAgICAuLi5uZXcgU2V0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9yZXZpZXdlcnMpLFxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3QgcmV2aWV3ZXJzID0gdGhpcy5yZXZpZXdlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgYWxsSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBjb25zdCByZXZpZXdlcnMgPSB0aGlzLnJldmlld2Vyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9yZXZpZXdlcnM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZCkpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJldmlld2Vycz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgJiZcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSByZXZpZXdlcnM7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHJldmlld2VycztcbiAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKFxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVQcm9ncmFtUmV2aWV3ZXJHcm91cCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfb3ZlcnNlZXJzIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdCxcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBhbGxEZWZhdWx0Q0NJZHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KGlkcyksXG4gICAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX21lbWJlcl9lbWFpbFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDID0gdGhpcy5vdmVyc2VlcnNMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgIGFsbERlZmF1bHRDQ0lkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gY29uc3Qgb3ZlcnNlZXJzID0gdGhpcy5vdmVyc2VlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfb3ZlcnNlZXJzLmNjX2VtYWlsLmluY2x1ZGVzKGVsZW1lbnQubXlfbWVtYmVyX2lkKSk7XG4gICAgICAgICAgY29uc3Qgbm90aWZ5TGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QsXG4gICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYWxsRGVmYXVsdENDRmFpbHVyZUlkcyA9IFtcbiAgICAgICAgICAgIC4uLm5ldyBTZXQobm90aWZ5TGlzdElkcyksXG4gICAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfbWVtYmVyX2VtYWlsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF07XG4gICAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0NGYWlsdXJlID0gdGhpcy5vdmVyc2VlcnNMaXN0Py5maWx0ZXIoXG4gICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgICBhbGxEZWZhdWx0Q0NGYWlsdXJlSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSB0aGlzLm92ZXJzZWVyc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0uZGVmYXVsdF9vdmVyc2VlcnMuZmFpbHVyZV9jY19lbWFpbC5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xuICAgICAgICAgIC8vIGlmIChvdmVyc2VlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBvdmVyc2VlcnM7XG4gICAgICAgICAgLy8gICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gaWYgKG5vdGlmeU92ZXJzZWVycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IG5vdGlmeU92ZXJzZWVycztcbiAgICAgICAgICAvLyAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIGlmIChvdmVyc2VlcnNDQz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IG92ZXJzZWVyc0NDO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQoXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3RcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3ZlcnNlZXJzQ0NGYWlsdXJlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gb3ZlcnNlZXJzQ0NGYWlsdXJlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID1cbiAgICAgICAgICAgICAgICB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZChcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVByb2dyYW1PdmVyc2Vlckdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb3JlT3B0aW9ucykge1xuICAgICAgICAgIGlmICh0aGlzLm1vcmVPcHRpb25zW2tleV0pIHtcbiAgICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy51c2VyTGlzdExvYWRlciA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICB0aGlzLnVzZXJMaXN0TG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldE9yZ2FuaXphdGlvblVzZXJMaXN0KHJlczogYW55KSB7XG4gICAgdGhpcy5hc3NpZ25lZXNMaXN0ID0gcmVzLmFzc2lnbmVlLm1hcCgodXNlcjogYW55KSA9PiB7XG4gICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfSk7XG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gcmVzLm92ZXJzZWVyLm1hcCgodXNlcjogYW55KSA9PiB7XG4gICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfSk7XG4gICAgdGhpcy5yZXZpZXdlcnNMaXN0ID0gcmVzLnJldmlld2VyLm1hcCgodXNlcjogYW55KSA9PiB7XG4gICAgICB1c2VyLm1lbWJlcl9uYW1lID0gdXNlci5lbXBsb3llZV9uYW1lO1xuICAgICAgcmV0dXJuIHVzZXI7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9ncmFtUGVvcGxlTGlzdCA9IHtcbiAgICAgIGFzc2lnbmVlc0xpc3Q6IFsuLi5uZXcgU2V0KHRoaXMuYXNzaWduZWVzTGlzdCldLFxuICAgICAgcmV2aWV3ZXJzTGlzdDogWy4uLm5ldyBTZXQodGhpcy5yZXZpZXdlcnNMaXN0KV0sXG4gICAgICBvdmVyc2VlcnNMaXN0OiBbLi4ubmV3IFNldCh0aGlzLm92ZXJzZWVyc0xpc3QpXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkPzogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYgKHByb2dyYW1faWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XG4gICAgfVxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXG4gICAgICAuZ2V0T3JnYW5pemF0aW9uR3JvdXBzKHBhcmFtcylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8/IFtdO1xuICAgICAgICAgIGlmICghcHJvZ3JhbV9pZCkge1xuICAgICAgICAgICAgdGhpcy5PcmdHcm91cCA9IGRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGdyb3VwczogYW55ID0gW107XG4gICAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZGF0YT8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBncm91cE5hbWU6IGVsZW1lbnQuZ3JvdXBfbmFtZSxcbiAgICAgICAgICAgICAgICB1c2VySWRzOiBlbGVtZW50Lm1lbWJlcl9pZHMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGdyb3Vwcy5wdXNoKG9iaik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZ3JvdXBzO1xuICAgICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgJiZcbiAgICAgICAgICAgIHRoaXMuT3JnR3JvdXA/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbT8ubGVuZ3RoICYmXG4gICAgICAgICAgICBwcm9ncmFtX2lkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyAmJlxuICAgICAgICAgICAgcHJvZ3JhbV9pZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRHcm91cHMgPSBkYXRhLmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzPy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBlbGVtZW50Lmdyb3VwX2lkXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZ3JvdXBzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbGV0IG1lbWJlcklkczogYW55W10gPSBbXTtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRHcm91cHMuZm9yRWFjaCgoZWFjaEdyb3VwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEdyb3VwPy5tZW1iZXJfaWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIG1lbWJlcklkcyA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4ubmV3IFNldChtZW1iZXJJZHMuY29uY2F0KGVhY2hHcm91cD8ubWVtYmVyX2lkcykpLFxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QsXG4gICAgICAgICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsSWRzID0gWy4uLm5ldyBTZXQoaWRzKSwgLi4ubmV3IFNldChtZW1iZXJJZHMpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBhbGxJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhc3NpZ25vcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzc2lnbm9ycyA9IHRoaXMuYXNzaWduZWVzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgICAgIG1lbWJlcklkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGFzc2lnbm9ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IGFzc2lnbm9ycztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIGdldEVkaXRSZXNwb25zaWJpbGl0eURldGFpbHMoaWQ6IGFueSkge1xuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgdGhpcy5wb3B1bGF0ZVJlc3BvbnNpYmlsaXR5RGV0YWlscygpO1xuICB9XG5cbiAgc2V0TGlzdChsaXN0OiBhbnlbXSwgaWRzOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSBbXTtcbiAgICBpZHM/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSBsaXN0LmZpbmRJbmRleChcbiAgICAgICAgKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbGlzdFxuICAgICAgPy5tYXAoKGVsZSkgPT4ge1xuICAgICAgICBpZiAoZWxlW2tleV0pIHtcbiAgICAgICAgICByZXR1cm4gZWxlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChlbGUpID0+IGVsZSk7XG4gIH1cblxuICBwb3B1bGF0ZVByb2dyYW1Bc3NpZ25lZUdyb3VwKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcyB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGhcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsXG4gICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBhbGxJZHMgPSBbXG4gICAgICAgICAgLi4ubmV3IFNldChpZHMpLFxuICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHNcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBhc3NpZ25lZUdyb3VwcyA9IHRoaXMuZ3JvdXBBc3NpZ25lZUxpc3Q/LmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgIGFsbElkcz8uaW5jbHVkZXMoZWxlbWVudD8uZ3JvdXBfaWQpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhc3NpZ25lZUdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCA9IGFzc2lnbmVlR3JvdXBzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXNzaWduZWVHcm91cHMgPSB0aGlzLmdyb3VwQXNzaWduZWVMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHM/LmluY2x1ZGVzKFxuICAgICAgICAgICAgZWxlbWVudD8uZ3JvdXBfaWRcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGlmIChhc3NpZ25lZUdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCA9IGFzc2lnbmVlR3JvdXBzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwb3B1bGF0ZVByb2dyYW1PdmVyc2Vlckdyb3VwKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzXG4gICAgICAgID8uZmFpbHVyZV9jY19lbWFpbF9ncm91cHNcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCxcbiAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0dyb3VwSWRzID0gW1xuICAgICAgICAgIC4uLm5ldyBTZXQoaWRzKSxcbiAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHNcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQ0dyb3VwID0gdGhpcy5ncm91cE92ZXJzZWVyTGlzdD8uZmlsdGVyKFxuICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+IGFsbERlZmF1bHRDQ0dyb3VwSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm90aWZ5TGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0LFxuICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWxsRGVmYXVsdENDRmFpbHVyZUdyb3VwSWRzID0gW1xuICAgICAgICAgIC4uLm5ldyBTZXQobm90aWZ5TGlzdElkcyksXG4gICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbF9ncm91cHNcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cCA9IHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3Q/LmZpbHRlcihcbiAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgYWxsRGVmYXVsdENDRmFpbHVyZUdyb3VwSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZClcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDR3JvdXA/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5saXN0ID0gb3ZlcnNlZXJzQ0NHcm91cDtcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubGlzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cD8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLm5vdGlmeUxpc3QgPVxuICAgICAgICAgICAgb3ZlcnNlZXJzQ0NGYWlsdXJlR3JvdXA7XG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLm5vdGlmeUxpc3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0NHcm91cCA9IHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3Q/LmZpbHRlcihcbiAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHM/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICBlbGVtZW50Py5ncm91cF9pZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cCA9IHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3Q/LmZpbHRlcihcbiAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX2VtYWlsX2dyb3Vwcz8uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIGVsZW1lbnQ/Lmdyb3VwX2lkXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvdmVyc2VlcnNDQ0dyb3VwPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubGlzdCA9IG92ZXJzZWVyc0NDR3JvdXA7XG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG92ZXJzZWVyc0NDRmFpbHVyZUdyb3VwLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0ID1cbiAgICAgICAgICAgIG92ZXJzZWVyc0NDRmFpbHVyZUdyb3VwO1xuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5saXN0ID0gW107XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubm90aWZ5TGlzdCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHBvcHVsYXRlUHJvZ3JhbVJldmlld2VyR3JvdXAoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfcmV2aWV3ZXJfZ3JvdXBfaWRzIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aFxuICAgICkge1xuICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdCxcbiAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgKTtcbiAgICAgIGNvbnN0IGFsbElkcyA9IFtcbiAgICAgICAgLi4ubmV3IFNldChpZHMpLFxuICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1bMF0/LmRlZmF1bHRfcmV2aWV3ZXJfZ3JvdXBfaWRzXG4gICAgICAgICksXG4gICAgICBdO1xuICAgICAgY29uc3QgcmV2aWV3ZXJzR3JvdXAgPSB0aGlzLmdyb3VwUmV2aWV3ZXJMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICBhbGxJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKVxuICAgICAgKTtcbiAgICAgIGlmIChcbiAgICAgICAgcmV2aWV3ZXJzR3JvdXA/Lmxlbmd0aCB8fFxuICAgICAgICAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgJiZcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZ3JvdXBSZXZpZXdlcnMubGlzdCA9IHJldmlld2Vyc0dyb3VwO1xuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlJFVklFV0VSID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZ3JvdXBSZXZpZXdlcnMubGlzdCA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHBvcHVsYXRlT3ZlcnNlZXJEYXRhKHJlczogYW55KSB7XG4gICAgbGV0IG92ZXJzZWVyVXNlckxpc3Q6IG51bWJlcltdID0gW107XG4gICAgbGV0IG92ZXJzZWVyVXNlck5vdGlmeUxpc3Q6IG51bWJlcltdID0gW107XG4gICAgbGV0IG92ZXJzZWVyRW1wbG95ZWVzTGlzdCA9IHJlcz8uY2NfbWVtYmVyX2VtYWlsXG4gICAgICA/IE9iamVjdC5rZXlzKHJlcz8uY2NfbWVtYmVyX2VtYWlsKS5tYXAoTnVtYmVyKVxuICAgICAgOiBbXTtcbiAgICBvdmVyc2VlclVzZXJMaXN0ID1cbiAgICAgIG92ZXJzZWVyRW1wbG95ZWVzTGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICByZXM/LnVzZXJHcm91cElkcz8uY2NFbWFpbEdyb3VwSWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gb3ZlcnNlZXJFbXBsb3llZXNMaXN0LmZpbHRlcigoZW1wbG95ZWVJZHM6IG51bWJlcikgPT5cbiAgICAgICAgICByZXM/LmV4aXN0aW5nVXNlcklkcz8uY2NFbWFpbE1lbWJlcklkcz8uaW5jbHVkZXMoZW1wbG95ZWVJZHMpXG4gICAgICAgIClcbiAgICAgICAgOiBbLi4ub3ZlcnNlZXJFbXBsb3llZXNMaXN0XTtcbiAgICBsZXQgb3ZlcnNlZXJFbXBsb3llZU5vdGlmeUxpc3QgPSByZXM/LmZhaWx1cmVfY2NfbWVtYmVyX2VtYWlsXG4gICAgICA/IE9iamVjdC5rZXlzKHJlcz8uZmFpbHVyZV9jY19tZW1iZXJfZW1haWwpLm1hcChOdW1iZXIpXG4gICAgICA6IFtdO1xuICAgIG92ZXJzZWVyVXNlck5vdGlmeUxpc3QgPVxuICAgICAgb3ZlcnNlZXJFbXBsb3llZU5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmZhaWx1cmVDQ0VtYWlsR3JvdXBJZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyBvdmVyc2VlckVtcGxveWVlTm90aWZ5TGlzdC5maWx0ZXIoKGVtcGxveWVlSWRzOiBudW1iZXIpID0+XG4gICAgICAgICAgcmVzPy5leGlzdGluZ1VzZXJJZHM/LmZhaWx1cmVDQ0VtYWlsTWVtYmVySWRzPy5pbmNsdWRlcyhlbXBsb3llZUlkcylcbiAgICAgICAgKVxuICAgICAgICA6IFsuLi5vdmVyc2VlckVtcGxveWVlTm90aWZ5TGlzdF07XG5cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnb3ZlcnNlZXJzJ10gPSB7XG4gICAgICBsaXN0OiByZXM/LmNjX21lbWJlcl9lbWFpbFxuICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIG92ZXJzZWVyVXNlckxpc3QsICdlbXBsb3llZV9pZCcpXG4gICAgICAgIDogW10sXG4gICAgICBub3RpZnlMaXN0OiByZXM/LmZhaWx1cmVfY2NfbWVtYmVyX2VtYWlsXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgICBvdmVyc2VlclVzZXJOb3RpZnlMaXN0LFxuICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgIH07XG5cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnb3ZlcnNlZXJzR3JvdXBzJ10gPSB7XG4gICAgICBsaXN0OiByZXM/LnVzZXJHcm91cElkcz8uY2NFbWFpbEdyb3VwSWRzXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuT3JnR3JvdXAsXG4gICAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkcyxcbiAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgIClcbiAgICAgICAgOiBbXSxcbiAgICAgIG5vdGlmeUxpc3Q6IHJlcz8udXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuT3JnR3JvdXAsXG4gICAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmZhaWx1cmVDQ0VtYWlsR3JvdXBJZHMsXG4gICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICApXG4gICAgICAgIDogW10sXG4gICAgfTtcbiAgfVxuXG4gIHBvcHVsYXRlUmV2aWV3ZXJEYXRhKHJlczogYW55KSB7XG4gICAgY29uc3QgcmV2aWV3ZXJEZXRhaWxzID0gT2JqZWN0LmtleXMocmVzPy5yZXZpZXdlcl9hcnIpO1xuICAgIHRoaXMuaGFzUmV2aWV3ZXIgPSByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDA7XG4gICAgY29uc3QgZ3JvdXBSZXZpZXdlckRldGFpbHMgPSByZXM/LnVzZXJHcm91cElkcz8ucmV2aWV3ZXJHcm91cElkcz8ubGVuZ3RoXG4gICAgICA/IE9iamVjdC5hc3NpZ24ocmVzPy51c2VyR3JvdXBJZHM/LnJldmlld2VyR3JvdXBJZHMpXG4gICAgICA6IFtdO1xuICAgIGxldCByZXZpZXdlcl91c2VyczogYW55W10gPSBbXTtcbiAgICByZXZpZXdlcl91c2VycyA9XG4gICAgICByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LnJldmlld2VyR3JvdXBJZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnMuZmlsdGVyKChtZW1iZXJJZDogYW55KSA9PlxuICAgICAgICAgIHJlcz8uZXhpc3RpbmdVc2VySWRzPy5yZXZpZXdlcklkcz8uaW5jbHVkZXMobWVtYmVySWQ/Lm1lbWJlcl9pZClcbiAgICAgICAgKVxuICAgICAgICA6IHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnJldmlld2VycztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsncmV2aWV3ZXJzJ10gPSB7XG4gICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6XG4gICAgICAgIHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUgPT0gJ1NFUVVFTlRJQUwnID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgIHJldmlld0NvbXBsZXRlRGF5czpcbiAgICAgICAgICByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyByZXM/LnJldmlld19hZnRlcl9kYXlzIDogMixcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czpcbiAgICAgICAgICByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyByZXM/LnJldmlld19mYWlsZWRfYWZ0ZXJfZGF5cyA6IDIsXG4gICAgICB9LFxuICAgICAgYWNjZXB0ZWREYXRhOiByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyByZXZpZXdlcl91c2VycyA6IFtdLFxuICAgICAgbGlzdDpcbiAgICAgICAgcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0aGlzLnNldFJldmlld2VyUGF5bG9hZChcbiAgICAgICAgICAgIHJldmlld2VyX3VzZXJzLFxuICAgICAgICAgICAgJ29iamVjdCcsXG4gICAgICAgICAgICByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlXG4gICAgICAgICAgKVxuICAgICAgICAgIDogW10sXG4gICAgfTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnZ3JvdXBSZXZpZXdlcnMnXSA9IHtcbiAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzpcbiAgICAgICAgcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8udHlwZSA9PSAnU0VRVUVOVElBTCcgPyB0cnVlIDogZmFsc2UsXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOlxuICAgICAgICAgIHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHJlcz8ucmV2aWV3X2FmdGVyX2RheXMgOiAyLFxuICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOlxuICAgICAgICAgIHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMCA/IHJlcz8ucmV2aWV3X2ZhaWxlZF9hZnRlcl9kYXlzIDogMixcbiAgICAgIH0sXG4gICAgICBsaXN0OlxuICAgICAgICBncm91cFJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMuT3JnR3JvdXAsIGdyb3VwUmV2aWV3ZXJEZXRhaWxzLCAnZ3JvdXBfaWQnKVxuICAgICAgICAgIDogW10sXG4gICAgfTtcbiAgfVxuXG4gIHBvcHVsYXRlQXNzaWduZWVEYXRhKHJlczogYW55KSB7XG4gICAgbGV0IEFzc2lnbmVlQW55VXNlckxpc3Q6IG51bWJlcltdID0gW107XG4gICAgbGV0IEFzc2lnbmVlQWxsVXNlckxpc3Q6IG51bWJlcltdID0gW107XG4gICAgbGV0IGFzc2lnbmVlQW55T25lTGlzdCA9XG4gICAgICByZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZCAmJiB0aGlzLmlzRW50cnVzdFxuICAgICAgICA/IHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkXG4gICAgICAgIDogW107XG4gICAgQXNzaWduZWVBbnlVc2VyTGlzdCA9XG4gICAgICByZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICByZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbnlvbmVHcm91cElkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IGFzc2lnbmVlQW55T25lTGlzdC5maWx0ZXIoKGVtcGxveWVlSWRzOiBudW1iZXIpID0+XG4gICAgICAgICAgcmVzPy5leGlzdGluZ1VzZXJJZHM/LmFzc2lnbmVlQW55b25lSWRzPy5pbmNsdWRlcyhlbXBsb3llZUlkcylcbiAgICAgICAgKVxuICAgICAgICA6IFsuLi5hc3NpZ25lZUFueU9uZUxpc3RdO1xuXG4gICAgQXNzaWduZWVBbGxVc2VyTGlzdCA9XG4gICAgICByZXM/LmFzc2lnbmVlX21lbWJlcl9pZCAmJiAhdGhpcy5pc0VudHJ1c3QgPyByZXM/LmFzc2lnbmVlX21lbWJlcl9pZCA6IFtdO1xuICAgIGNvbnN0IGFzc2lnbmVkVG9Vc2VyRGV0YWlscyA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCxcbiAgICAgIFtOdW1iZXIocmVzPy5hc3NpZ25lZV9tZW1iZXJfaWQpXSxcbiAgICAgICdlbXBsb3llZV9pZCdcbiAgICApO1xuICAgIGlmIChhc3NpZ25lZFRvVXNlckRldGFpbHM/Lmxlbmd0aCkge1xuICAgICAgY29uc3QgbWVtYmVyX2lkID0gYXNzaWduZWRUb1VzZXJEZXRhaWxzWzBdPy5teV9tZW1iZXJfaWQ7XG4gICAgICBpZiAocmVzPy5leGlzdGluZ1VzZXJJZHM/LmFzc2lnbmVlQWxsSWRzPy5pbmNsdWRlcyhtZW1iZXJfaWQpKSB7XG4gICAgICAgIEFzc2lnbmVlQWxsVXNlckxpc3QgPSByZXM/LmFzc2lnbmVlX21lbWJlcl9pZDtcbiAgICAgICAgcmVzLnVzZXJHcm91cElkc1snYXNzaWduZWVBbGxHcm91cElkcyddID0gW107XG4gICAgICB9IGVsc2UgaWYgKHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIEFzc2lnbmVlQWxsVXNlckxpc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2Fzc2lnbmVlcyddID0ge1xuICAgICAgd2hvQ2FuQ29tcGxldGU6IHJlcy5pc0dyb3VwQXNzaWduVG8gPyAnQU5ZX09ORScgOiAnQUxMJyxcbiAgICAgIGxpc3Q6XG4gICAgICAgIHJlcz8uYXNzaWduZWRfdG9fbWVtYmVyX2lkPy5sZW5ndGggPT0gMFxuICAgICAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0LFxuICAgICAgICAgICAgW051bWJlcihBc3NpZ25lZUFsbFVzZXJMaXN0KV0sXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0LFxuICAgICAgICAgICAgQXNzaWduZWVBbnlVc2VyTGlzdCxcbiAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICAgKSxcbiAgICB9O1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhc3NpZ25lZUdyb3VwcyddID0ge1xuICAgICAgd2hvQ2FuQ29tcGxldGU6IHJlcz8uaXNHcm91cEFzc2lnblRvID8gJ0FOWV9PTkUnIDogJ0FMTCcsXG4gICAgICBsaXN0OlxuICAgICAgICByZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbnlvbmVHcm91cElkcz8ubGVuZ3RoID09IDBcbiAgICAgICAgICA/IHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5PcmdHcm91cCxcbiAgICAgICAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQWxsR3JvdXBJZHMsXG4gICAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogW11cbiAgICAgICAgICA6IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMuT3JnR3JvdXAsXG4gICAgICAgICAgICByZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbnlvbmVHcm91cElkcyxcbiAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICApLFxuICAgIH07XG4gICAgdGhpcy5hbGxHcm91cEFzc2lnbmVlID1cbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgIXRoaXMuaXNFbnRydXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIHRoaXMgZnVuY3Rpb24gaXMgZm9yIGdldHRpbmcgdGhlIHVzZXJzIGRhdGEgYmFzZWQgb24gbWVtYmVyX2lkIG9mIHVzZXJzIG9mIHNlbGVjdGVkIFVzZXIgR3JvdXBcbiAgICogQHBhcmFtIHVzZXJsaXN0IGNvbnRhaW5zIHVzZXJzIGRhdGFcbiAgICogQHBhcmFtIHNlbGVjdGVkZ3JvdXBzIGNvbnRhaW5zIHNlbGVjdGVkIFVzZXIgR3JvdXAgZGF0YVxuICAgKiBAcmV0dXJucyB1c2VyIGRhdGEgb2YgU2VsZWN0ZWQgdXNlciBncm91cC5cbiAgICovXG4gIGdldEdyb3Vwc1VzZXJFbXBsb3llZXNJZCh1c2VyTGlzdDogYW55LCBzZWxlY3RlZEdyb3VwczogYW55KSB7XG4gICAgbGV0IGdyb3VwTWVtYmVySWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZ3JvdXBVc2VyRW1wbG95ZWU6IGFueSA9IFtdO1xuICAgIHNlbGVjdGVkR3JvdXBzPy5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBncm91cE1lbWJlcklkcyA9IFsuLi5uZXcgU2V0KFsuLi5ncm91cE1lbWJlcklkcywgLi4uZ3JvdXA/Lm1lbWJlcl9pZHNdKV07XG4gICAgfSk7XG4gICAgdXNlckxpc3Q/LmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICBpZiAoZ3JvdXBNZW1iZXJJZHM/LmluY2x1ZGVzKGVsZT8ubXlfbWVtYmVyX2lkKSkge1xuICAgICAgICBncm91cFVzZXJFbXBsb3llZS5wdXNoKGVsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdyb3VwVXNlckVtcGxveWVlO1xuICB9XG5cbiAgc2V0UmV2aWV3ZXJQYXlsb2FkKFxuICAgIGlkczogYW55W10sXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFjY2VwdGVkRGF0YT86IEFycmF5PGFueT4sXG4gICAgcmV2aWV3ZXJUeXBlPzogc3RyaW5nXG4gICkge1xuICAgIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3QgaWRPYmpBcnJheSA9IHRoaXMucmV0dXJuSWRzKGlkcywgJ3VpZCcpO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0TGlzdCh0aGlzLmFsbFVzZXJzTGlzdCwgaWRPYmpBcnJheSwgJ3VpZCcpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xpc3QnKSB7XG4gICAgICBjb25zdCBwYXlMb2FkOiBhbnkgPSBbXTtcbiAgICAgIGNvbnN0IGlkc0xpc3QgPSB0aGlzLnJldHVybklkcyhpZHMsICd1aWQnKTtcbiAgICAgIGlkc0xpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgIGxldCBpbmRleCA9IC0xO1xuICAgICAgICBpZiAoKGFjY2VwdGVkRGF0YSA/PyBbXSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpbmRleCA9XG4gICAgICAgICAgICBhY2NlcHRlZERhdGE/LmZpbmRJbmRleCgoZWxlKSA9PiBlbGUubWVtYmVyX2lkID09PSBlbGVtZW50KSA/PyAtMTtcbiAgICAgICAgfVxuICAgICAgXG4gICAgICAgIHBheUxvYWQucHVzaCh7IG1lbWJlcl9pZDogZWxlbWVudCB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBheUxvYWQ7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKSB7XG4gICAgY29uc3QgZWRpdExvYWRlciA9XG4gICAgICB0aGlzLm1vZGUgPT09ICdFRElUJ1xuICAgICAgICA/IHRoaXMucmNMaXN0TG9hZGVkICYmXG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCAmJlxuICAgICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZWQgXG4gICAgICAgIDogdHJ1ZTtcbiAgICBpZiAodGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCAmJiB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgJiYgZWRpdExvYWRlcikge1xuICAgICAgaWYgKHRoaXMuZnJhbWV3b3JrRGV0YWlscz8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmFzc2lnbkZyb21GcmFtZXdvcmsodGhpcy5mcmFtZXdvcmtEZXRhaWxzWzBdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ2V0RWRpdFJlc3BvbnNpYmlsaXR5RGV0YWlscyh0aGlzLnJlc3BvbnNpYmlsaXR5SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFByb2dyYW0pIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtLnB1c2godGhpcy5zZWxlY3RlZFByb2dyYW0pO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzLnB1c2goXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbS5jYXRlZ29yeV9pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmNhdGVnb3J5X2lkPy50b1N0cmluZygpO1xuICAgICAgICAgIGlmICh0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID1cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmRlZmF1bHRfYXNzaWduZWVfdHlwZSA9PSAnQU5ZT05FJ1xuICAgICAgICAgICAgICAgID8gJ0FOWV9PTkUnXG4gICAgICAgICAgICAgICAgOiAnQUxMJztcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPVxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uZGVmYXVsdF9yZXZpZXdlcnNfdHlwZSA9PSAnU0VRVUVOVElBTCdcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCA9IHRoaXNcbiAgICAgICAgICAgICAgLnNlbGVjdGVkUHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWdcbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gdGhpcy5zZWxlY3RlZFByb2dyYW0/LmN1c3RvbV90YWdzXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UodGhpcy5zZWxlY3RlZFByb2dyYW0uY3VzdG9tX3RhZ3MpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIHByb2dyYW1DdXN0b21UYWdzLmZvckVhY2goKHRhZzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWdEYXRhID0gSlNPTi5wYXJzZSh0YWcpO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlBST0dSQU0gPSB0cnVlO1xuICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdQUk9HUkFNJyk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnICYmXG4gICAgICAgICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0ZPUk1BVEVfRVZJREVOQ0UnKTtcbiAgICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuRk9STUFURV9FVklERU5DRSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0odGhpcy5zZWxlY3RlZFByb2dyYW0/Ll9pZCk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgc2F2ZVNlbGVjdGVkTGlzdCh0eXBlOiBzdHJpbmcsIHNlbGVjdGVkSXRlbXM6IGFueSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXNzaWdub3JzJzpcbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aG9tJykge1xuICAgICAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbm9yc0xpc3QsXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICAvLyB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hvJykge1xuICAgICAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuaXNFbnRydXN0ICYmXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlICE9PSAnQU5ZX09ORSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgICBbc2VsZWN0ZWRJdGVtcy5lbXBsb3llZV9pZF0sXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICAvLyB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgICAgdGhpcy5zYXZlR3JvdXBBc3NpZ25lZURhdGEoc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmMnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnaXRlbV9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2F1ZGl0X2NhdGVnb3J5X2RldGFpbHMnXVsnY2F0ZWdvcnlfaWQnXSA9IDA7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc2VsZWN0ZWRHUkNPYmplY3RzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRPdGhlckdSQ1RhYkNvdW50KHsgcmNfaWRzOiAnJyB9KTtcbiAgICAgICAgdGhpcy5nZXRPdGhlckdSQ09iamVjdHMoeyByY19pZHM6ICcnLCB0eXBlOiB0aGlzLnNlbGVjdGVkR1JDVGFiIH0pO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHNlbGVjdGVkSXRlbXM7XG4gICAgICAgIHNlbGVjdGVkSXRlbXMuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFnID1cbiAgICAgICAgICAgIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09ICcnICYmXG4gICAgICAgICAgICAgIGVsZW1lbnQuY3VzdG9tX3RhZ3MgIT09ICdudWxsJyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmN1c3RvbV90YWdzICE9ICdbXSdcbiAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKGVsZW1lbnQuY3VzdG9tX3RhZ3MpXG4gICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgaWYgKHRhZz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGFnLmZvckVhY2goKHRhZ0RhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJvZ3JhbSc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0gPSBzZWxlY3RlZEl0ZW1zPy5saW5rZWRQcm9ncmFtO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0gJiZcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5wcm9ncmFtVHlwZSA9PT0gMCAmJlxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3VuY2F0ZWdvcml6ZWQnKSB8fFxuICAgICAgICAgICAgIXRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uXG4gICAgICAgICAgKSAmJlxuICAgICAgICAgICF0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXNcbiAgICAgICAgICAgID8gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIGxldCBjYXRlZ29yeUlkID0gc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8udG9TdHJpbmcoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkICsgJywnICsgY2F0ZWdvcnlJZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbV9zZWxlY3RlZF9pZHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXMpLFxuICAgICAgICAgICAgLi4ubmV3IFNldChbc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRdKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3NcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jdXN0b21fdGFncylcbiAgICAgICAgICAgIDogW107XG4gICAgICAgICAgcHJvZ3JhbUN1c3RvbVRhZ3M/LmZvckVhY2goKHRhZzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWdEYXRhID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHRhZykgOiB0YWc7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpPy5sZW5ndGhcbiAgICAgICAgICAgICAgPyB0aGlzLmdldFByb2dyYW1EZXRhaWxzKHNlbGVjdGVkSXRlbXM/LnByb2dyYW0uX2lkKVxuICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzXG4gICAgICAgICAgICA/IHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllc1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gW107XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPSAnJztcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcyA9IFtdO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtID0gc2VsZWN0ZWRJdGVtcy5wcm9ncmFtXG4gICAgICAgICAgICA/IFtzZWxlY3RlZEl0ZW1zLnByb2dyYW1dXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIGxldCBjYXRlZ29yeUlkID0gc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8udG9TdHJpbmcoKTtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8uY2F0ZWdvcmllcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeV9pZCA9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkICsgJywnICsgY2F0ZWdvcnlJZDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbV9zZWxlY3RlZF9pZHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXMpLFxuICAgICAgICAgICAgLi4ubmV3IFNldChbc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRdKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IHByb2dyYW1DdXN0b21UYWdzID0gc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3NcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jdXN0b21fdGFncylcbiAgICAgICAgICAgIDogW107XG4gICAgICAgICAgcHJvZ3JhbUN1c3RvbVRhZ3M/LmZvckVhY2goKHRhZzogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWdEYXRhID0gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHRhZykgOiB0YWc7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZGVmYXVsdF9hc3NpZ25lZV90eXBlID09ICdBTllPTkUnXG4gICAgICAgICAgICAgICAgPyAnQU5ZX09ORSdcbiAgICAgICAgICAgICAgICA6ICdBTEwnO1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmRlZmF1bHRfcmV2aWV3ZXJzX3R5cGUgPT0gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZykge1xuICAgICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5wcm9ncmFtVHlwZSA9PT0gMCAmJlxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ubmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3VuY2F0ZWdvcml6ZWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/Ll9pZCAmJlxuICAgICAgICAgICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oc2VsZWN0ZWRJdGVtcy5wcm9ncmFtLl9pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXZpZXdlcic6XG4gICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgIHRoaXMuc2F2ZUdyb3VwUmV2aWV3ZXJEYXRhKHNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5yZXZpZXdlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvdmVyc2Vlcic6XG4gICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgIHRoaXMuc2F2ZU92ZXJzZWVyRGF0YShzZWxlY3RlZEl0ZW1zLCAnb3ZlcnNlZXJMaXN0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLmFsbFVzZXJzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnknOlxuICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICB0aGlzLnNhdmVPdmVyc2VlckRhdGEoc2VsZWN0ZWRJdGVtcywgJ292ZXJzZWVyTm90aWZ5TGlzdCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc3VyYW5jZSc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hc3N1cmFuY2VDYXRlZ29yaWVzTGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdjYXRlZ29yeV9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXF1aXJlc19hdWRpdCc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYXNzdXJhbmNlUmVxdWlyZXNBdWRpdExpc3QsXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXM/LmNhdGVnb3J5X2lkXSxcbiAgICAgICAgICAnY2F0ZWdvcnlfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhdWRpdF9jYXRlZ29yeV9kZXRhaWxzJ11bJ2NhdGVnb3J5X2lkJ10gPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmNhdGVnb3J5X2lkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnRzJzpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgPSBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscztcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludEluc3RydWN0aW9uID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50SW5zdHJ1Y3Rpb247XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2FsY3VsYXRlZHJpc2snOlxuICAgICAgICBjb25zdCByaXNrQ2xhc3MgPSBbJ2xvdycsICdsb3dfbWVkaXVtJywgJ21lZGl1bV9oaWdoJywgJ2hpZ2gnXTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmlza0NsYXNzID0gcmlza0NsYXNzW3NlbGVjdGVkSXRlbXM/LnJpc2tDbGFzc107XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJpc2tNYXRyaXggPSBzZWxlY3RlZEl0ZW1zPy5yaXNrTWF0cml4O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Zvcm1hdGVfZXZpZGVuY2UnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZCA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uaXNGb3JtYXRlVXBsb2FkZWQgPz8gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdEZpbGVzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5maWxlcy5tYXAoKGZpbGVzOiBhbnkpID0+ICB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBmaWxlUGF0aDogZmlsZXMuZmlsZXBhdGgsXG4gICAgICAgICAgICAgIG5hbWU6IGZpbGVzLmZpbGVfbmFtZSxcbiAgICAgICAgICAgICAgdHlwZTogZmlsZXMudHlwZSxcbiAgICAgICAgICAgICAgZmlkOiBmaWxlcz8uZmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgPz8gW107XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5saW5rcyA/PyBbXTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uaXNFdmlkZW5jZVJlcXVpcmVkID8/IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld0ZyZXF1ZW5jeSc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kgPSB7XG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiBzZWxlY3RlZEl0ZW1zLmNvbXBsZXRlRGF5cyxcbiAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiBzZWxlY3RlZEl0ZW1zLm5vdENvbXBsZXRlZCxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdHUkNfT0JKRUNUUyc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cyA9IHNlbGVjdGVkSXRlbXM7XG4gICAgICAgIHRoaXMuc2V0T3RoZXJHUkNUeXBlc0Zvcm1hdGUoKTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHByb2dyYW0gaXMgc2VsZWN0ZWQgYW5kIHRoZSB1c2VyIGhhcyBmdWxsIHBlcm1pc3Npb24sIHJlZnJlc2ggdGhlIGxpc3RzIHdoaWxlIHRoZSBwcm9ncmFtXG4gICAqIGlzIHNlbGVjdGVkLiBPdGhlcndpc2UsIHJlZnJlc2ggYWxsIGxpc3RzLlxuICAgKiA8L2NvZGU+XG4gICAqL1xuICBjYWxsUmVmcmVzaExpc3QoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbT8ubGVuZ3RoICYmXG4gICAgICB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxuICAgICkge1xuICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5maW5kSW5kZXgoXG4gICAgICAgICAgKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjLnNwbGljZShyY0luZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yY1NlbGVjdGVkLmVtaXQodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2F1ZGl0X2NhdGVnb3J5X2RldGFpbHMnXVsnY2F0ZWdvcnlfaWQnXSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRPdGhlckdSQ1RhYkNvdW50KHsgcmNfaWRzOiAnJyB9KTtcbiAgICAgICAgdGhpcy5nZXRPdGhlckdSQ09iamVjdHMoeyByY19pZHM6ICcnLCB0eXBlOiB0aGlzLnNlbGVjdGVkR1JDVGFiIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbm9ycyc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0ID0gW107XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzaWduZWVzJzpcbiAgICAgICAgY29uc3QgZW50cnVzdEluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgKG93bmVyOiBhbnkpID0+IG93bmVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LnNwbGljZShlbnRydXN0SW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JvdXBhc3NpZ25lZXMnOlxuICAgICAgICBjb25zdCBncm91cEluZGV4ID1cbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QuZmluZEluZGV4KFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdC5zcGxpY2UoZ3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0LmZpbmRJbmRleChcbiAgICAgICAgICAocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3Quc3BsaWNlKHJldmlld2VySW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ3JvdXBSZXZpZXdlcic6XG4gICAgICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJJbmRleCA9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChyZXZpZXdlcjogYW55KSA9PiByZXZpZXdlci5ncm91cF9pZCA9PSBldmVudC5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3Quc3BsaWNlKFxuICAgICAgICAgIGdyb3VwUmV2aWV3ZXJJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxuICAgICAgICBjb25zdCBvdmVyc2VlckluZGV4ID1cbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChvdmVyc2VlcjogYW55KSA9PiBvdmVyc2Vlci5lbXBsb3llZV9pZCA9PSBldmVudC5lbXBsb3llZV9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0LnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJzZWVyR3JvdXAnOlxuICAgICAgICBjb25zdCBvdmVyc2Vlckdyb3VwSW5kZXggPVxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QuZmluZEluZGV4KFxuICAgICAgICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLmxpc3Quc3BsaWNlKFxuICAgICAgICAgIG92ZXJzZWVyR3JvdXBJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnlMaXN0JzpcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJOb3RpZnlJbmRleCA9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICAob3ZlcnNlZXJOOiBhbnkpID0+IG92ZXJzZWVyTi5lbXBsb3llZV9pZCA9PSBldmVudC5lbXBsb3llZV9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0LnNwbGljZShcbiAgICAgICAgICBvdmVyc2Vlck5vdGlmeUluZGV4LFxuICAgICAgICAgIDFcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJzZWVyR3JvdXBOb3RpZnlMaXN0JzpcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJHcm91cE5vdGlmeUluZGV4ID1cbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLm5vdGlmeUxpc3Quc3BsaWNlKFxuICAgICAgICAgIG92ZXJzZWVyR3JvdXBOb3RpZnlJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2F0ZWdvcnknOlxuICAgICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuZmluZEluZGV4KFxuICAgICAgICAgIChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5jYXRlZ29yeV9pZCA9PSBldmVudC5jYXRlZ29yeV9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpO1xuICAgICAgICBpZiAodGFnPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGFnLmZvckVhY2goKHRhZ0RhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhDVCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoaW5kZXhDVCAhPSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnNwbGljZShpbmRleENULCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhZyA9IEpTT04ucGFyc2UoZWxlbWVudC5jdXN0b21fdGFncyk7XG4gICAgICAgICAgICBpZiAodGFnPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncHJvZ3JhbSc6XG4gICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0UHJvZ3JhbU9uUmVtb3ZlKGV2ZW50KTtcbiAgICAgICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBbXTtcbiAgICAgICAgLy8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xuXG4gICAgICAgIC8vIHRoaXMuZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXF1aXJlc19hdWRpdCc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0ID0gW107XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB7XG4gICAgICAgICAgY2F0ZWdvcnlfaWQ6IDAsXG4gICAgICAgICAgc2FtcGxlOiAwLFxuICAgICAgICAgIHBlcmNlbnRhZ2U6IDAsXG4gICAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcnLFxuICAgICAgICAgIGZyZXF1ZW5jeV90aW1lOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxuICAgICAgICBjb25zdCBhc3N1cmFuY2VJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZUxpc3QuZmluZEluZGV4KFxuICAgICAgICAgIChhc3N1cmFuY2U6IGFueSkgPT4gYXNzdXJhbmNlLmNhdGVnb3J5X2lkID09IGFzc3VyYW5jZS5jYXRlZ29yeV9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0LnNwbGljZShhc3N1cmFuY2VJbmRleCwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2hlY2twb2ludCc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzLnNwbGljZShldmVudCwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzZXNzbWVudCc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSB7XG4gICAgICAgICAgY2F0ZWdvcnlfaWQ6ICcnLFxuICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6ICcnLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ25ldy1jaGVja3BvaW50cyc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm5ld19jaGVja3BvaW50cyA9IHt9O1xuICAgICAgICB0aGlzLmNoZWNrcG9pbnRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuY2hlY2twb2ludENvdW50VXBkYXRlZC5lbWl0KHRoaXMuY2hlY2twb2ludENvdW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdHUkNfT0JKRUNUUyc6XG4gICAgICAgIHRoaXMucmVtb3ZlT3RoZXJHUkNPYmplY3RzKGV2ZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUdyb3VwQXNzaWduZWVEYXRhKHNlbGVjdGVkSXRlbXM6IGFueSkge1xuICAgIGxldCB1c2VyT2JqOiBhbnk7XG4gICAgdXNlck9iaiA9IHNlbGVjdGVkSXRlbXM/Lmxlbmd0aCA/IHNlbGVjdGVkSXRlbXMgOiBzZWxlY3RlZEl0ZW1zPy51c2VycztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCxcbiAgICAgIHVzZXJPYmosXG4gICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuT3JnR3JvdXAsXG4gICAgICBzZWxlY3RlZEl0ZW1zPy5ncm91cHMsXG4gICAgICAnZ3JvdXBfaWQnXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVHcm91cFJldmlld2VyRGF0YShzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcbiAgICBsZXQgdXNlck9iajogYW55ID0gW107XG4gICAgc2VsZWN0ZWRJdGVtcy51c2Vycy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgdXNlck9iai5wdXNoKGVsZS5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLnJldmlld2Vyc0xpc3QsXG4gICAgICB1c2VyT2JqLFxuICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZ3JvdXBSZXZpZXdlcnMgPSB7XG4gICAgICBsaXN0OiBzZWxlY3RlZEl0ZW1zPy5ncm91cHM/Lmxlbmd0aCA+IDAgPyBzZWxlY3RlZEl0ZW1zPy5ncm91cHMgOiBbXSxcbiAgICB9O1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPVxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93O1xuICB9XG5cbiAgc2F2ZU92ZXJzZWVyRGF0YShzZWxlY3RlZEl0ZW1zOiBhbnksIHR5cGU6IGFueSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnb3ZlcnNlZXJMaXN0JzpcbiAgICAgICAgbGV0IG92ZXJzZWVyc2VsZWN0ZWRsaXN0ID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcy51c2VycyxcbiAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgICBvdmVyc2VlcnNlbGVjdGVkbGlzdCxcbiAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwc1snbGlzdCddID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5ncm91cHM/Lmxlbmd0aCA+IDAgPyBzZWxlY3RlZEl0ZW1zPy5ncm91cHMgOiBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvdmVyc2Vlck5vdGlmeUxpc3QnOlxuICAgICAgICBsZXQgb3ZlcnNlZXJzZWxlY3RlZE5vdGlmeWxpc3QgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnVzZXJzLFxuICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0LFxuICAgICAgICAgIG92ZXJzZWVyc2VsZWN0ZWROb3RpZnlsaXN0LFxuICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzWydub3RpZnlMaXN0J10gPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/Lmdyb3Vwcz8ubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXM/Lmdyb3VwcyA6IFtdO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBlbnRydXN0RnJhbWV3b3JrKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XG5cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eSA9IHtcbiAgICAgIG5hbWU6IGV2ZW50LnJlcG9ydF9uYW1lLFxuICAgICAga2V5UmVzcG9uc2liaWxpdHk6IGV2ZW50LmtleV9jb21wbGlhbmNlID8gdHJ1ZSA6IGZhbHNlLFxuICAgIH07XG4gICAgY29uc3QgbmV3U3RhcnREYXRlID1cbiAgICAgIGV2ZW50LnN0YXJ0X2RhdGUgfHwgZXZlbnQuc3RhcnRfZGF0ZSAhPSBudWxsIHx8IGV2ZW50LnN0YXJ0X2RhdGUgIT09ICcnXG4gICAgICAgID8gbmV3IERhdGUoZXZlbnQuc3RhcnRfZGF0ZSAqIDEwMDApXG4gICAgICAgIDogbmV3IERhdGUoKTtcbiAgICBjb25zdCBwdnRUZW1wbGF0ZSA9XG4gICAgICBldmVudC5mcmVxdWVuY3lfdGVtcGxhdGUgJiYgZXZlbnQuZnJlcXVlbmN5X3RlbXBsYXRlICE9PSAnJ1xuICAgICAgICA/IGV2ZW50LmZyZXF1ZW5jeV90ZW1wbGF0ZVxuICAgICAgICA6IGV2ZW50LmZyZXF1ZW5jeTtcbiAgICBjb25zdCBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0OiBhbnkgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwoXG4gICAgICBwdnRUZW1wbGF0ZSxcbiAgICAgIG5ld1N0YXJ0RGF0ZS5nZXREYXRlKCksXG4gICAgICBuZXdTdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgIG5ld1N0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgKTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q/LnBhdHRlcm47XG4gICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscztcbiAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9IERFRkFVTFRfMjRIUjtcbiAgICBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZVxuICAgICAgPyBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGVcbiAgICAgIDogMjtcbiAgICBldmVudC5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICA/IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICA6IDI7XG4gICAgZXZlbnQubGlmZWN5Y2xlX2RldGFpbHMgPSAnMDAwMC0wMC0wMH5+MCc7XG4gICAgZXZlbnQuc3RhcnRfb2ZfZGF5X3V0YyA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5mcmFtZXdvcmtTdGFydERhdGUoZXZlbnQpO1xuICAgIGV2ZW50Lm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcbiAgICBldmVudC5kb21fdXRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyA9XG4gICAgICBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XG5cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPVxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHM7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X3RpbWUgPSBERUZBVUxUXzI0SFI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPVxuICAgICAgZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlID8gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlIDogMjtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICA/IGV2ZW50Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICA6IDI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubGlmZWN5Y2xlRGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydF9vZl9kYXlfdXRjID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlXG4gICAgICAuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KVxuICAgICAgLnRvRml4ZWQoKVxuICAgICAgLnRvU3RyaW5nKCk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub25fY29tcGxldGlvbl9vZiA9IFtdO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9XG4gICAgICBldmVudC5yZW1hcmtzLnRyaW0oKSAhPSAnJyA/IGV2ZW50LnJlbWFya3MgOiAnJztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID1cbiAgICAgIGV2ZW50LmN1c3RvbV90YWdzICYmXG4gICAgICAgIGV2ZW50LmN1c3RvbV90YWdzICE9PSBudWxsICYmXG4gICAgICAgIGV2ZW50LmN1c3RvbV90YWdzICE9PSAnbnVsbCcgJiZcbiAgICAgICAgZXZlbnQuY3VzdG9tX3RhZ3MgIT09ICcnXG4gICAgICAgID8gSlNPTi5wYXJzZShldmVudC5jdXN0b21fdGFncylcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBldmVudC5jb250cm9sX29iamVjdGl2ZVxuICAgICAgPyBldmVudC5jb250cm9sX29iamVjdGl2ZVxuICAgICAgOiAnJztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuYWxsQ2F0ZWdvcmllcyxcbiAgICAgIFtldmVudC5jYXRlZ29yeV9pZF0sXG4gICAgICAnY2F0ZWdvcnlfaWQnXG4gICAgKTsgLy9cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld0NvbXBsZXRlRGF5cyA9IDI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzID0gMjtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5maW5kKFxuICAgICAgKHJjOiBhbnkpID0+IHJjLnJjX2lkID09PSBldmVudC5lbnRpdHlfaWRcbiAgICApXG4gICAgICA/IFtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LmZpbmQoXG4gICAgICAgICAgKHJjOiBhbnkpID0+IHJjLnJjX2lkID09PSBldmVudC5lbnRpdHlfaWRcbiAgICAgICAgKSxcbiAgICAgIF1cbiAgICAgIDogW107XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmlza0NsYXNzID0gdGhpcy5pc1Jpc2tFbmFibGUgPyAnbG93JyA6ICdsb3dfbWVkaXVtJztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcml2YXRlX2xpYnJhcnlfaWQgPSBldmVudC5yZXBvcnRfaWQ7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID1cbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNsYXNzaWZpY2F0aW9uID0gdGhpcy5pc1Jpc2tFbmFibGUgPyAxIDogMjtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jb250aW51b3VzX2ZhaWxlZF9kYXlzID1cbiAgICAgIGZyZXF1ZW5jeURldGFpbHNPYmplY3QuY29udGludW91c19mYWlsZWRfZGF5cztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPVxuICAgICAgdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmZyYW1ld29ya1N0YXJ0RGF0ZShldmVudCk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UgPSB7XG4gICAgICBldmlkZW5jZVJlcXVpcmVkOiBldmVudC5yZXBvcnRfdXBsb2FkX2ZsYWcgPyB0cnVlIDogZmFsc2UsXG4gICAgICBmb3JtYXRGaWxlczogZXZlbnQucmVwb3J0X2Zvcm1hdCxcbiAgICAgIGZvcm1hdExpbmtzOlxuICAgICAgICAhZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rIHx8IGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayA9PSAnJ1xuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IFtldmVudC5yZXBvcnRfZm9ybWF0X2xpbmtdLFxuICAgICAgZm9ybWF0UmVxdWlyZWQ6XG4gICAgICAgIGV2ZW50LnJlcG9ydF9mb3JtYXQ/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAoZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rICYmIGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayAhPSAnJylcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyA9IHtcbiAgICAgIGNhdGVnb3J5X2lkOiAwLFxuICAgICAgc2FtcGxlOiA1LFxuICAgICAgcGVyY2VudGFnZTogMzAsXG4gICAgICBmcmVxdWVuY3lfcGF0dGVybjogJzF+MH4zfjEnLFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IERFRkFVTFRfMjRIUixcbiAgICB9O1xuXG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSBERUZBVUxUX1RJTUU7XG4gICAgaWYgKFxuICAgICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgIT09ICcnICYmXG4gICAgICBldmVudC5mcmVxdWVuY3lfZGV0YWlscyAhPT0gJzV+MH4wfjAnXG4gICAgKSB7XG4gICAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSAnJztcbiAgICB9XG5cbiAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9IERFRkFVTFRfMjRIUjtcbiAgICBldmVudC5wbGFjZWhvbGRlciA9IHRoaXMuZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIoZXZlbnQpO1xuICAgIGNvbnN0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSAhPT0gJycpIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdPQkpFQ1RJVkUnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcbiAgICB9XG4gICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JJU0tfQ0xBU1NJRklDQVRJT04nKTtcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeT8ubGVuZ3RoID4gMCkge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NBVEVHT1JZJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkNBVEVHT1JZID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZm9ybWF0QW5kRXZpZGVuY2U/LmV2aWRlbmNlUmVxdWlyZWQgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5mb3JtYXRBbmRFdmlkZW5jZT8uZm9ybWF0UmVxdWlyZWRcbiAgICApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdGT1JNQVRFX0VWSURFTkNFJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZW50aXR5X2lkID4gMCkge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JDJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcbiAgICAvLyAgZXZlbnQucGxhY2Vob2xkZXJcbiAgfVxuXG4gIGFzc2lnbkZyb21GcmFtZXdvcmsoZnJlcU9iajogYW55KSB7XG4gICAgaWYgKGZyZXFPYmouZGF0YSkge1xuICAgICAgLy8gdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XG4gICAgICBjb25zdCBuZXdTdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgICBjb25zdCBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0OiBhbnkgPVxuICAgICAgICB0aGlzLmZyZXF1ZW5jeVNlcnZpY2Uuc2hvcnRIYW5kX2ZyZXFDYWwoXG4gICAgICAgICAgZnJlcU9iai5kYXRhLmZyZXF1ZW5jeSxcbiAgICAgICAgICBuZXdTdGFydERhdGUuZ2V0RGF0ZSgpLFxuICAgICAgICAgIG5ld1N0YXJ0RGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgIG5ld1N0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBldmVudDogYW55ID0ge307XG4gICAgICBldmVudC5mcmVxdWVuY3lfZGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q/LnBhdHRlcm47XG4gICAgICBldmVudC5mcmVxdWVuY3lfdGltZSA9IERFRkFVTFRfMjRIUjtcbiAgICAgIGV2ZW50LnJlbWluZGVyX2JlZm9yZV9kYXlzID0gMjtcbiAgICAgIGV2ZW50LmZhaWxlZF9hZnRlcl9kYXlzID0gMjtcbiAgICAgIGV2ZW50LmxpZmVjeWNsZV9kZXRhaWxzID0gJzAwMDAtMDAtMDB+fjAnO1xuICAgICAgZXZlbnQuc3RhcnRfb2ZfZGF5X3V0YyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgZXZlbnQub25fY29tcGxldGlvbl9vZiA9IFtdO1xuICAgICAgZXZlbnQuZG9tX3V0YyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyA9XG4gICAgICAgIGZyZXF1ZW5jeURldGFpbHNPYmplY3QuY29udGludW91c19mYWlsZWRfZGF5cztcbiAgICAgIHRoaXMuZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIoZXZlbnQpO1xuICAgICAgZXZlbnQucGxhY2Vob2xkZXIgPSB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyO1xuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSBERUZBVUxUX1RJTUU7XG4gICAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQpO1xuXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lID0gZnJlcU9iai5kYXRhLm5hbWUgPz8gJyc7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBmcmVxT2JqLmRhdGEub2JqZWN0aXZlcyA/PyAnJztcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9IGZyZXF1ZW5jeURldGFpbHNPYmplY3Q/LnBhdHRlcm4gPz8gJyc7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydF9vZl9kYXlfdXRjO1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cztcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPVxuICAgICAgICBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX2FmdGVyX2RheXMgPSBldmVudC5mYWlsZWRfYWZ0ZXJfZGF5cztcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcmFtZXdvcmtWYWx1ZXMgPSBmcmVxT2JqLnNlbGVjdGVkRnJhbWV3b3JrRGF0YSA/PyB1bmRlZmluZWQ7XG4gICAgICBpZiAoZnJlcU9iaj8uZGF0YT8uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSBmcmVxT2JqPy5kYXRhPy5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChmcmVxT2JqPy5kYXRhPy5vYmplY3RpdmVzKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9IGZyZXFPYmouZGF0YS5vYmplY3RpdmVzID8/ICcnO1xuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9CSkVDVElWRSA9IHRydWU7XG4gICAgICAgIGxldCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb3JlT3B0aW9ucykge1xuICAgICAgICAgIGlmICh0aGlzLm1vcmVPcHRpb25zW2tleV0pIHtcbiAgICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGxpc3QgdXNlcmxpc3QgZm9yIGxpc3RpbmcgdXNlcnNcbiAgICogQHJldHVybnMgYXNzaWduIHVzZXIncyBteV9tZW1iZXJfaWQgIHRvIG1lbWJlcl9pZCBkYXRhXG4gICAqL1xuICBhc3NpZ25Vc2VyTWVtYmVySWQobGlzdDogYW55KSB7XG4gICAgY29uc3QgdXNlck9iaiA9IFsuLi5saXN0XTtcbiAgICB1c2VyT2JqPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIHVzZXIubWVtYmVyX2lkID0gdXNlcj8ubXlfbWVtYmVyX2lkO1xuICAgIH0pO1xuICAgIGxpc3QgPSBbLi4udXNlck9ial07XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICByZWZyZXNoQWxsTGlzdHMoKSB7XG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgYWxsVXNlcnNJZHM6IGFueSA9IFtdO1xuICAgIGxldCBhc3NpZ25lZUdyb3VwSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgcmV2aWV3ZXJzSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XG4gICAgbGV0IGdyb3VwUmV2aWV3ZXJJZHM6IGFueSA9IFtdO1xuICAgIGxldCBncm91cE92ZXJzZWVySWRzOiBhbnkgPSBbXTtcbiAgICB0aGlzLnJldmlld2VySWRzID0gW107XG4gICAgdGhpcy5hc3NpZ25vcklkID0gW107XG4gICAgdGhpcy5vdmVyc2VlcklkcyA9IFtdO1xuICAgIHRoaXMuYXNzaWduZWVJZHMgPSBbXTtcblxuICAgIGNvbnN0IGFsbFVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYWxsVXNlcnNMaXN0KTtcbiAgICBjb25zdCBhbGxHcm91cHMgPSBjbG9uZURlZXAodGhpcy5PcmdHcm91cCk7XG4gICAgY29uc3QgYmVoYWxmVXNlcnMgPSBjbG9uZURlZXAodGhpcy5iZWhhbGZPZlVzZXJzTGlzdCk7XG5cbiAgICBjb25zdCBhc3NpZ25vcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdCk7XG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3QpO1xuXG4gICAgY29uc3QgYXNzaWduZWVHcm91cExpc3QgPSBjbG9uZURlZXAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3RcbiAgICApO1xuICAgIGNvbnN0IHJldmlld2VycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCk7XG4gICAgY29uc3QgZ3JvdXBSZXZpZXdlcnNMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdClcbiAgICAgIDogW107XG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QpO1xuICAgIGNvbnN0IGdyb3VwT3ZlcnNlZXJMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QpXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RcbiAgICApO1xuICAgIGNvbnN0IGdyb3VwTm90aWZ5T3ZlcnNlZXJzID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QpXG4gICAgICA6IFtdO1xuICAgIGFzc2lnbm9ycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHVzZXIubWVtYmVyX2lkKTtcbiAgICAgIHRoaXMuYXNzaWdub3JJZC5wdXNoKHVzZXIubWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5hc3NpZ25lZUlkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0Py5sZW5ndGggPT0gMCkge1xuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh0aGlzLm1lbWJlcklkKTtcbiAgICAgIHRoaXMuYXNzaWdub3JJZC5wdXNoKHRoaXMubWVtYmVySWQpO1xuICAgIH1cbiAgICBhbGxVc2Vycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBhbGxVc2Vyc0lkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgYXNzaWduZWVHcm91cExpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGFzc2lnbmVlR3JvdXBJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xuICAgIH0pO1xuXG4gICAgcmV2aWV3ZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIHJldmlld2Vyc0lkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICB0aGlzLnJldmlld2VySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBncm91cFJldmlld2Vyc0xpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGdyb3VwUmV2aWV3ZXJJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xuICAgIH0pO1xuICAgIGdyb3VwT3ZlcnNlZXJMaXN0Py5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcbiAgICB9KTtcbiAgICBncm91cE5vdGlmeU92ZXJzZWVycz8uZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xuICAgICAgZ3JvdXBPdmVyc2Vlcklkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XG4gICAgfSk7XG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgIH0pO1xuICAgIG5vdGlmeU92ZXJzZWVycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICB0aGlzLm92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICB9KTtcblxuICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzID0gWy4uLm5ldyBTZXQoYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMpXTtcbiAgICBhbGxVc2Vyc0lkcyA9IFsuLi5uZXcgU2V0KGFsbFVzZXJzSWRzKV07XG4gICAgYXNzaWduZWVJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZUlkcyldO1xuICAgIHJldmlld2Vyc0lkcyA9IFsuLi5uZXcgU2V0KHJldmlld2Vyc0lkcyldO1xuICAgIG92ZXJzZWVySWRzID0gWy4uLm5ldyBTZXQob3ZlcnNlZXJJZHMpXTtcbiAgICB0aGlzLmFzc2lnbm9ySWQgPSBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbm9ySWQpXTtcbiAgICB0aGlzLmFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25lZUlkcyldO1xuICAgIHRoaXMucmV2aWV3ZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLnJldmlld2VySWRzKV07XG4gICAgdGhpcy5vdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMub3ZlcnNlZXJJZHMpXTtcblxuICAgIGFzc2lnbmVlR3JvdXBJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZUdyb3VwSWRzKV07XG4gICAgZ3JvdXBSZXZpZXdlcklkcyA9IFsuLi5uZXcgU2V0KGdyb3VwUmV2aWV3ZXJJZHMpXTtcbiAgICBncm91cE92ZXJzZWVySWRzID0gWy4uLm5ldyBTZXQoZ3JvdXBPdmVyc2VlcklkcyldO1xuICAgIHRoaXMuYXNzaWdub3JzTGlzdCA9IGJlaGFsZlVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+ICFvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlci5tZW1iZXJfaWQpXG4gICAgKTtcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSBhbGxVc2VycztcbiAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSBhbGxVc2VycztcbiAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSBhbGxVc2VycztcblxuICAgIHRoaXMuZGlzYWJsZUxpc3QoXG4gICAgICBhbGxVc2VycyxcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLFxuICAgICAgYXNzaWduZWVJZHMsXG4gICAgICByZXZpZXdlcnNJZHMsXG4gICAgICBvdmVyc2Vlcklkc1xuICAgICk7XG4gICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICB0aGlzLmdyb3VwQXNzaWduZWVMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcihcbiAgICAgICAgKGdyb3VwOiBhbnkpID0+XG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGdyb3VwUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHxcbiAgICAgICAgICAgIGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5yZXZpZXdlck1lbWJlcklkc0xpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLmFsbFVzZXJzTGlzdCk7XG4gICAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZCh0aGlzLmFsbFVzZXJzTGlzdCk7XG4gICAgICB0aGlzLmdyb3VwUmV2aWV3ZXJMaXN0ID0gYWxsR3JvdXBzLmZpbHRlcihcbiAgICAgICAgKGdyb3VwOiBhbnkpID0+XG4gICAgICAgICAgIShcbiAgICAgICAgICAgIGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHxcbiAgICAgICAgICAgIGFzc2lnbmVlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICApXG4gICAgICApO1xuICAgICAgdGhpcy5ncm91cE92ZXJzZWVyTGlzdCA9IGFsbEdyb3Vwcy5maWx0ZXIoXG4gICAgICAgIChncm91cDogYW55KSA9PlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8XG4gICAgICAgICAgICBncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTGlzdChcbiAgICBhbGxVc2VyczogYW55LFxuICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnksXG4gICAgYXNzaWduZWVJZHM6IGFueSxcbiAgICByZXZpZXdlcnNJZHM6IGFueSxcbiAgICBvdmVyc2VlcklkczogYW55XG4gICkge1xuICAgIGxldCBkaXNhYmxlQXNzaWduZWVMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8XG4gICAgICAgIG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVBc3NpZ25lZUlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgZGlzYWJsZUFzc2lnbmVlTGlzdCxcbiAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVSYWRpb0Fzc2lnbmVlID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICBkaXNhYmxlQXNzaWduZWVMaXN0LFxuICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICk7XG4gICAgbGV0IGRpc2FibGVSZXZpZXdlckxpc3QgPSBhbGxVc2Vycy5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlUmV2aWV3ZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgIGRpc2FibGVSZXZpZXdlckxpc3QsXG4gICAgICAnZW1wbG95ZWVfaWQnXG4gICAgKTtcbiAgICBsZXQgZGlzYWJsZU92ZXJzZWVyTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8XG4gICAgICAgIHJldmlld2Vyc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlT3ZlcnNlZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgIGRpc2FibGVPdmVyc2Vlckxpc3QsXG4gICAgICAnZW1wbG95ZWVfaWQnXG4gICAgKTtcbiAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgIGxldCBkaXNhYmxlUmV2aWV3ZXJMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxuICAgICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAgIG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8XG4gICAgICAgICAgYXNzaWduZWVJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLmRpc2FibGVSZXZpZXdlcklkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICBkaXNhYmxlUmV2aWV3ZXJMaXN0LFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICAgIGxldCBkaXNhYmxlT3ZlcnNlZXJzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICAgIHJldmlld2Vyc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZGlzYWJsZU92ZXJzZWVySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIGRpc2FibGVPdmVyc2VlcnNMaXN0LFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpIHtcbiAgICBsZXQgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM6IGFueSA9IFtdO1xuICAgIGxldCByZXZpZXdlcnNJZHM6IGFueSA9IFtdO1xuICAgIGxldCBvdmVyc2VlcklkczogYW55ID0gW107XG4gICAgbGV0IGFzc2lnbmVlSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgYXNzaWduZWVHcm91cElkczogYW55ID0gW107XG4gICAgbGV0IGdyb3VwUmV2aWV3ZXJJZHM6IGFueSA9IFtdO1xuICAgIGxldCBncm91cE92ZXJzZWVySWRzOiBhbnkgPSBbXTtcbiAgICB0aGlzLnJldmlld2VySWRzID0gW107XG4gICAgdGhpcy5hc3NpZ25vcklkID0gW107XG4gICAgdGhpcy5vdmVyc2VlcklkcyA9IFtdO1xuICAgIHRoaXMuYXNzaWduZWVJZHMgPSBbXTtcbiAgICBjb25zdCBiZWhhbGZVc2VycyA9IGNsb25lRGVlcCh0aGlzLmJlaGFsZk9mVXNlcnNMaXN0KTtcbiAgICBjb25zdCBhbGxHcm91cHMgPSBjbG9uZURlZXAodGhpcy5PcmdHcm91cCk7XG4gICAgY29uc3QgYXNzaWdub3JzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0KTtcbiAgICBjb25zdCBhc3NpZ25lZXMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdCk7XG4gICAgY29uc3QgYXNzaWduZWVHcm91cExpc3QgPSB0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwc1xuICAgICAgPyBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0KVxuICAgICAgOiBbXTtcbiAgICBjb25zdCByZXZpZXdlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdCk7XG4gICAgY29uc3QgZ3JvdXBSZXZpZXdlcnNMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdClcbiAgICAgIDogW107XG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QpO1xuICAgIGNvbnN0IGdyb3VwT3ZlcnNlZXJMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QpXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IG5vdGlmeU92ZXJzZWVycyA9IGNsb25lRGVlcChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RcbiAgICApO1xuICAgIGNvbnN0IGdyb3VwTm90aWZ5T3ZlcnNlZXJzID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QpXG4gICAgICA6IFtdO1xuICAgIGFzc2lnbm9ycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh1c2VyPy5tZW1iZXJfaWQpO1xuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyPy5tZW1iZXJfaWQpO1xuICAgIH0pO1xuICAgIGFzc2lnbmVlcz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICBhc3NpZ25lZUlkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICB0aGlzLmFzc2lnbmVlSWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8ubGVuZ3RoID09IDApIHtcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godGhpcy5tZW1iZXJJZCk7XG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh0aGlzLm1lbWJlcklkKTtcbiAgICB9XG5cbiAgICBhc3NpZ25lZUdyb3VwTGlzdD8uZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xuICAgICAgYXNzaWduZWVHcm91cElkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XG4gICAgfSk7XG4gICAgcmV2aWV3ZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIHJldmlld2Vyc0lkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICB0aGlzLnJldmlld2VySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBncm91cFJldmlld2Vyc0xpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGdyb3VwUmV2aWV3ZXJJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xuICAgIH0pO1xuICAgIG92ZXJzZWVyTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICB0aGlzLm92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5vdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgZ3JvdXBPdmVyc2Vlckxpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGdyb3VwT3ZlcnNlZXJJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xuICAgIH0pO1xuICAgIGdyb3VwTm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcbiAgICB9KTtcbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzKV07XG4gICAgYXNzaWduZWVJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZUlkcyldO1xuICAgIHJldmlld2Vyc0lkcyA9IFsuLi5uZXcgU2V0KHJldmlld2Vyc0lkcyldO1xuICAgIG92ZXJzZWVySWRzID0gWy4uLm5ldyBTZXQob3ZlcnNlZXJJZHMpXTtcbiAgICBhc3NpZ25lZUdyb3VwSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVHcm91cElkcyldO1xuICAgIGdyb3VwUmV2aWV3ZXJJZHMgPSBbLi4ubmV3IFNldChncm91cFJldmlld2VySWRzKV07XG4gICAgZ3JvdXBPdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KGdyb3VwT3ZlcnNlZXJJZHMpXTtcbiAgICB0aGlzLmFzc2lnbm9ySWQgPSBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbm9ySWQpXTtcbiAgICB0aGlzLmFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25lZUlkcyldO1xuICAgIHRoaXMucmV2aWV3ZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLnJldmlld2VySWRzKV07XG4gICAgdGhpcy5vdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KHRoaXMub3ZlcnNlZXJJZHMpXTtcblxuICAgIHRoaXMuYXNzaWdub3JzTGlzdCA9IGJlaGFsZlVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+ICFvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlci5tZW1iZXJfaWQpXG4gICAgKTtcbiAgICB0aGlzLmFzc2lnbmVlc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5hc3NpZ25lZXNMaXN0O1xuICAgIHRoaXMucmV2aWV3ZXJzTGlzdCA9IHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Q/LnJldmlld2Vyc0xpc3Q7XG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdD8ub3ZlcnNlZXJzTGlzdDtcblxuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgdGhpcy5ncm91cEFzc2lnbmVlTGlzdCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmFzc2lnbmVlX2dyb3VwX2lkcz8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5wcm9ncmFtR3JvdXBMaXN0KFxuICAgICAgICAgICAgYWxsR3JvdXBzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmFzc2lnbmVlX2dyb3VwX2lkc1xuICAgICAgICAgIClcbiAgICAgICAgICA6IGFsbEdyb3Vwcy5maWx0ZXIoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8XG4gICAgICAgICAgICAgICAgZ3JvdXBPdmVyc2Vlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgIHRoaXMucmV2aWV3ZXJNZW1iZXJJZHNMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQoXG4gICAgICAgIHRoaXMucHJvZ3JhbVBlb3BsZUxpc3QucmV2aWV3ZXJzTGlzdFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JvdXBSZXZpZXdlckxpc3QgPVxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5yZXZpZXdlcl9ncm91cF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRoaXMucHJvZ3JhbUdyb3VwTGlzdChcbiAgICAgICAgICAgIGFsbEdyb3VwcyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5yZXZpZXdlcl9ncm91cF9pZHNcbiAgICAgICAgICApXG4gICAgICAgICAgOiBhbGxHcm91cHMuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgZ3JvdXBPdmVyc2Vlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fFxuICAgICAgICAgICAgICAgIGFzc2lnbmVlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB0aGlzLm92ZXJzZWVyc0xpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZChcbiAgICAgICAgdGhpcy5wcm9ncmFtUGVvcGxlTGlzdC5vdmVyc2VlcnNMaXN0XG4gICAgICApO1xuICAgICAgdGhpcy5ncm91cE92ZXJzZWVyTGlzdCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm92ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0aGlzLnByb2dyYW1Hcm91cExpc3QoXG4gICAgICAgICAgICBhbGxHcm91cHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ub3ZlcnNlZXJzPy5jY19lbWFpbF9ncm91cHNcbiAgICAgICAgICApXG4gICAgICAgICAgOiBhbGxHcm91cHMuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgYXNzaWduZWVHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fFxuICAgICAgICAgICAgICAgIGdyb3VwUmV2aWV3ZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVByb2dyYW1MaXN0KFxuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMsXG4gICAgICBhc3NpZ25lZUlkcyxcbiAgICAgIHJldmlld2Vyc0lkcyxcbiAgICAgIG92ZXJzZWVySWRzXG4gICAgKTtcbiAgfVxuXG4gIHByb2dyYW1Hcm91cExpc3QoYWxsR3JvdXBzOiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgLy8gYXJnc1swXVxuICAgIGxldCBhc3NpZ25lZVByb2dyYW06IGFueSA9IFtdO1xuICAgIGxldCBncm91cElkcyA9IGFyZ3NbMF07XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5hc3NpZ25lZV9ncm91cF9pZHMpIHtcbiAgICAgIGFzc2lnbmVlUHJvZ3JhbSA9IGFsbEdyb3Vwcy5maWx0ZXIoKGdyb3VwOiBhbnkpID0+XG4gICAgICAgIGdyb3VwSWRzLmluY2x1ZGVzKGdyb3VwLmdyb3VwX2lkKVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGFzc2lnbmVlUHJvZ3JhbTtcbiAgfVxuXG4gIGRpc2FibGVQcm9ncmFtTGlzdChcbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkczogYW55LFxuICAgIGFzc2lnbmVlSWRzOiBhbnksXG4gICAgcmV2aWV3ZXJzSWRzOiBhbnksXG4gICAgb3ZlcnNlZXJJZHM6IGFueVxuICApIHtcbiAgICBsZXQgZGlzYWJsZUFzc2lnbmVlTGlzdCA9IHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Q/LmFzc2lnbmVlc0xpc3QuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8XG4gICAgICAgIG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVBc3NpZ25lZUlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgZGlzYWJsZUFzc2lnbmVlTGlzdCxcbiAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVSYWRpb0Fzc2lnbmVlID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICBkaXNhYmxlQXNzaWduZWVMaXN0LFxuICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICk7XG4gICAgbGV0IGRpc2FibGVSZXZpZXdlckxpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5yZXZpZXdlcnNMaXN0LmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgIG92ZXJzZWVySWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8XG4gICAgICAgIGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVSZXZpZXdlcklkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgZGlzYWJsZVJldmlld2VyTGlzdCxcbiAgICAgICdlbXBsb3llZV9pZCdcbiAgICApO1xuICAgIGxldCBkaXNhYmxlT3ZlcnNlZXJMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdD8ub3ZlcnNlZXJzTGlzdC5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZClcbiAgICApO1xuICAgIHRoaXMuZGlzYWJsZU92ZXJzZWVySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICBkaXNhYmxlT3ZlcnNlZXJMaXN0LFxuICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICk7XG4gICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9IHRoaXMucmV2aWV3ZXJNZW1iZXJJZHNMaXN0LmZpbHRlcihcbiAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICAgIGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5kaXNhYmxlUmV2aWV3ZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgZGlzYWJsZVJldmlld2VyTGlzdCxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgICBsZXQgZGlzYWJsZU92ZXJzZWVyTGlzdCA9IHRoaXMub3ZlcnNlZXJzTGlzdC5maWx0ZXIoXG4gICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHxcbiAgICAgICAgICByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICBkaXNhYmxlT3ZlcnNlZXJMaXN0LFxuICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGZvcm0gaXMgdmFsaWQsIHRoZW4gaWYgdGhlIG1vZGUgaXMgRURJVCwgdGhlbiBzZXQgdGhlIG9yZ2FuaXphdGlvbklkIGFuZCBtZW1iZXJJZCB0byB0aGVcbiAgICogYXV0aFNlcnZpY2UgdmFsdWVzLCBhbmQgdGhlbiBjYWxsIHRoZSBlbnRydXN0UmVzcG9uc2liaWxpdHkgZnVuY3Rpb24gd2l0aCB0aGUgcmVzcG9uc2liaWxpdHlGb3JtIGFzXG4gICAqIGEgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBJZiB0aGUgbW9kZSBpcyBub3QgRURJVCwgdGhlbiBjYWxsIHRoZSBlbnRydXN0UmVzcG9uc2liaWxpdHkgZnVuY3Rpb24gd2l0aCB0aGUgcmVzcG9uc2liaWxpdHlGb3JtXG4gICAqIGFzIGEgcGFyYW1ldGVyLlxuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXG4gICAqL1xuICBzdWJtaXRSZXNwb25zaWJpbGl0eSgpIHtcbiAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGVSZXNwb25zaWJpbGl0eSgpO1xuICAgIGlmICghdmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcgJiYgIXRoaXMuaXNEdXBsaWNhdGUpIHtcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XG4gICAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRNZW1iZXJJZCgpO1xuICAgICAgdGhpcy5lbnRydXN0UmVzcG9uc2liaWxpdHkodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0pO1xuICAgICAgLy8gZWRpdCBjb25kaXRpb25zXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50cnVzdFJlc3BvbnNpYmlsaXR5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIHJlc3BvbnNpYmlsaXR5IG5hbWUgaXMgZW1wdHksIG9yIHRoZSBmcmVxdWVuY3kgaXMgZW1wdHksIG9yIHRoZSBhc3NpZ25lZXMgbGlzdCBpcyBlbXB0eSxcbiAgICogdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSwgcmV0dXJuIHRydWUuXG4gICAqL1xuICB2YWxpZGF0ZVJlc3BvbnNpYmlsaXR5KCkge1xuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlICYmXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3dob20nO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgPT0gJydcbiAgICApIHtcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnd2hhdCc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0IHx8XG4gICAgICAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgKCF0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcyB8fFxuICAgICAgICAgICgoIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdCB8fFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPT0gMCkgJiZcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSkpXG4gICAgKSB7XG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3dobyc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PSAnJyB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09PSAnJyB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID09PSAnNX4wfjB+MCdcbiAgICApIHtcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnd2hlbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW52YWxpZFR5cGUgPSAnJztcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgPT0gJycgfHxcbiAgICAgICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJycgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJzV+MH4wfjAnIHx8XG4gICAgICAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHxcbiAgICAgICAgICAoKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0IHx8XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0Py5sZW5ndGggPT0gMCkgJiZcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGVudHJ1c3RSZXNwb25zaWJpbGl0eShlbnRydXN0Rm9ybTogYW55KSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmVudHJ1c3RMb2FkZXIgPSB0cnVlO1xuICAgIGxldCBzdGFydERhdGUgPSBtb21lbnQocGFyc2VJbnQoZW50cnVzdEZvcm0uc3RhcnREYXRlKSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdZWVlZLU1NLUREIEhIOm1tOnNzJ1xuICAgICk7XG4gICAgc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZS5zcGxpdCgnICcpWzBdICsgJyAwMDowMDowMCcpLmZvcm1hdChcbiAgICAgICdZWVlZLU1NLUREIEhIOm1tOnNzJ1xuICAgICk7XG4gICAgY29uc3QgcmNEZXRhaWxzID1cbiAgICAgIGVudHJ1c3RGb3JtLnJjPy5sZW5ndGggPiAwXG4gICAgICAgID8gZW50cnVzdEZvcm0ucmMubWFwKChyYzogYW55KTogYW55ID0+IHtcbiAgICAgICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgICBjb25zdCByY0RldGFpbHNBcnIgPSB7XG4gICAgICAgICAgICAgICAgcGFyZW50X3JjX2lkczogcmMucGFyZW50X3JjX2lkcyxcbiAgICAgICAgICAgICAgICByY19pZDogcmMucmNpZCxcbiAgICAgICAgICAgICAgICBjaGlsZF9yY19pZHM6IHJjPy5pdGVtX2NoaWxkX2lkcyxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJjRGV0YWlsc0FycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IHJjRGV0YWlsc0lkQXJyID1cbiAgICAgIGVudHJ1c3RGb3JtLnJjPy5sZW5ndGggPiAwXG4gICAgICAgID8gZW50cnVzdEZvcm0ucmMubWFwKChyYzogYW55KTogYW55ID0+IHtcbiAgICAgICAgICAgIGlmIChyYykge1xuICAgICAgICAgICAgICByZXR1cm4gcmMucmNpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICA6IFtdO1xuXG4gICAgY29uc3QgbW9yZU9wdGlvbnMgPSB0aGlzLm1vcmVPcHRpb25zO1xuXG4gICAgY29uc3QgY2hlY2tDb250aW51b3VzRmFpbGVkVmFsdWUgPSAoZGV0YWlsczogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBmcmVxdWVuY3lUeXBlID0gcGFyc2VJbnQoZGV0YWlscy5zcGxpdCgnficpWzBdKTtcbiAgICAgIGlmIChmcmVxdWVuY3lUeXBlID09PSAxIHx8IGZyZXF1ZW5jeVR5cGUgPT09IDIgfHwgZnJlcXVlbmN5VHlwZSA9PT0gMykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IGxpbmtlZFByb2dyYW1JZHM6IGFueVtdID0gW107XG4gICAgbGV0IGxpbmtlZENhdGVnb3J5SWRzOiBhbnlbXSA9IFtdO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgIT09IGVsZT8uY2F0ZWdvcnlfaWRcbiAgICAgICkge1xuICAgICAgICBjb25zdCBwcm9ncmFtID0ge1xuICAgICAgICAgIHByb2dyYW1JZDogZWxlPy5jYXRlZ29yeV9pZCxcbiAgICAgICAgICBwcm9ncmFtT2JqZWN0SWQ6IGVsZT8uX2lkLFxuICAgICAgICAgIHN1YlByb2dyYW1JZHM6IGVsZT8uY2hpbGRfaWQ/LmZpbHRlcigoZWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5pbmNsdWRlcyhlbCk7XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIGxpbmtlZFByb2dyYW1JZHM/LnB1c2gocHJvZ3JhbSk7XG4gICAgICAgIGxpbmtlZENhdGVnb3J5SWRzPy5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IGNhdGVnb3J5SWRzRXhjZXB0RGVmYXVsdDogYW55ID0gW107XG4gICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5KSB7XG4gICAgICBjYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2F0ZWdvcnk/LmZpbHRlcihcbiAgICAgICAgKGVsOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZWwgIT09IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5jYXRlZ29yeV9pZCAmJlxuICAgICAgICAgICAgIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5jaGlsZF9pZD8uaW5jbHVkZXMoZWwpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKSBcbiAgICB9XG4gICAgdGhpcy5jb21iaW5lVXNlckFuZFVzZXJHcm91cE1lbWJlcnMoXG4gICAgICB0aGlzLm1vZGUgPT09ICdFRElUJyAmJlxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQUxMJyAmJlxuICAgICAgdGhpcy5yYXdSZXNwb25zaWJpbGl0eT8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzPy5sZW5ndGhcbiAgICApO1xuXG4gICAgY29uc3QgcmVtYXJrcyA9XG4gICAgICBlbnRydXN0Rm9ybS5kZXNjcmlwdGlvbi5yZXBsYWNlKC9cXCZuYnNwOy9nLCAnJykudHJpbSgpICE9PSAnJ1xuICAgICAgICA/IGVudHJ1c3RGb3JtLmRlc2NyaXB0aW9uXG4gICAgICAgIDogJyc7XG4gICAgY29uc3Qgb2JqZWN0aXZlID1cbiAgICAgIGVudHJ1c3RGb3JtLm9iamVjdGl2ZS5yZXBsYWNlKC9cXCZuYnNwOy9nLCAnJykudHJpbSgpICE9PSAnJ1xuICAgICAgICA/IGVudHJ1c3RGb3JtLm9iamVjdGl2ZVxuICAgICAgICA6ICcnO1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBhcHBfYXNzb2NpYXRpb246IFtdLFxuICAgICAgYXNzaWduZWVfbWVtYmVyX2lkOiB0aGlzLnJldHVybklkcyhcbiAgICAgICAgdGhpcy5hc3NpZ25lZVVzZXJMaXN0LFxuICAgICAgICAndWlkJ1xuICAgICAgKS50b1N0cmluZygpLFxuICAgICAgcHJvZ3JhbV9jYXRfaWRzOiBtb3JlT3B0aW9ucz8uUFJPR1JBTVxuICAgICAgICA/IGVudHJ1c3RGb3JtPy5wcm9ncmFtPy5sZW5ndGhcbiAgICAgICAgICA/IFtlbnRydXN0Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWRdXG4gICAgICAgICAgOiBbXVxuICAgICAgICA6IFtdLFxuICAgICAgbGlua2VkX3Byb2dyYW1faWRzOiBsaW5rZWRQcm9ncmFtSWRzLFxuICAgICAgbGlua2VkX2NhdGVnb3J5X2lkczogdGhpcy5nZXRVbmlxdWVJZHMoW1xuICAgICAgICAuLi5jYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQsXG4gICAgICAgIC4uLmxpbmtlZENhdGVnb3J5SWRzLFxuICAgICAgXSksXG4gICAgICAvLyBjYXRlZ29yeV9pZDogKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtX3NlbGVjdGVkX2lkcz8ubGVuZ3RoID4gMCkgPyB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2F0ZWdvcnlfaWQgOiAnJyxcbiAgICAgIGNhdGVnb3J5X2lkOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbV9zZWxlY3RlZF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRoaXMuZ2V0VW5pcXVlSWRzKFtcbiAgICAgICAgICAgIC4uLnRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeSxcbiAgICAgICAgICAgIC4uLmxpbmtlZENhdGVnb3J5SWRzLFxuICAgICAgICAgICAgLi4uW2VudHJ1c3RGb3JtPy5wcm9ncmFtWzBdPy5jYXRlZ29yeV9pZF0sXG4gICAgICAgICAgXSk/LnJldmVyc2UoKS50b1N0cmluZygpXG4gICAgICAgICAgOiAnJyxcbiAgICAgIGNjX21lbWJlcl9lbWFpbDogbW9yZU9wdGlvbnM/Lk9WRVJTRUVSXG4gICAgICAgID8gdGhpcy5yZXR1cm5JZHModGhpcy5vdmVyc2VlclVzZXJMaXN0LCAndWlkJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuICAgICAgY2hlY2twb2ludF9kZXNjcmlwdGlvbjogbW9yZU9wdGlvbnM/LkNIRUNLUE9JTlRTXG4gICAgICAgID8gZW50cnVzdEZvcm0uY2hlY2twb2ludEluc3RydWN0aW9uXG4gICAgICAgIDogJycsXG4gICAgICBjaGVja3BvaW50X2RldGFpbHM6IG1vcmVPcHRpb25zPy5DSEVDS1BPSU5UU1xuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzKVxuICAgICAgICA6ICcnLFxuICAgICAgY2hlY2twb2ludF9mbGFnOiAwLFxuICAgICAgY29sbGFib3JhdG9yX21hcmtfZG9uZTogMCxcbiAgICAgIGNvbW1lbnQ6ICcnLFxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogY2hlY2tDb250aW51b3VzRmFpbGVkVmFsdWUoZW50cnVzdEZvcm0uZnJlcXVlbmN5KVxuICAgICAgICA/IGVudHJ1c3RGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXNcbiAgICAgICAgOiAwLFxuICAgICAgY29zdF9vZl9jb21wbGlhbmNlOiAnJyxcbiAgICAgIGNyZWF0ZWRfYnk6IGVudHJ1c3RGb3JtLmFzc2lnbm9ycy5saXN0Py5sZW5ndGggPCAxID8gMCA6IHRoaXMubWVtYmVySWQsXG4gICAgICBjcmVhdGlvbl93aW5kb3c6IDAsXG4gICAgICBjdXN0b21fdGFnczogZW50cnVzdEZvcm0uY3VzdG9tVGFncyxcbiAgICAgIGVudGl0eV90cmVlOiBtb3JlT3B0aW9ucz8uUkNcbiAgICAgICAgPyB0aGlzLmlzUmVzcG9uc2liaWxpdHlSY0xpbmtFbmFibGVkICYmXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPT0gMVxuICAgICAgICAgID8gW11cbiAgICAgICAgICA6IHJjRGV0YWlsc1xuICAgICAgICA6IFtdLFxuICAgICAgZW50cnVzdF9mcm9tX3Jpc2s6IHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBlbnRydXN0Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyxcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZW50cnVzdEZvcm0uZmFpbGVkX3RpbWVfdXRjLFxuICAgICAgZmFpbHVyZV9jY19tZW1iZXJfZW1haWw6IG1vcmVPcHRpb25zPy5PVkVSU0VFUlxuICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHRoaXMub3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCwgJ3VpZCcpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJyxcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBlbnRydXN0Rm9ybS5mcmVxdWVuY3ksXG4gICAgICBmcmVxdWVuY3lfdGltZTogZW50cnVzdEZvcm0udGltZUluMjRIciA/PyBERUZBVUxUXzI0SFIsXG4gICAgICBncmNfb2JqZWN0X2lkOiAwLFxuICAgICAgZ3JjX3JlbGF0aW9uc2hpcDogJycsXG4gICAgICBpZl90ZXN0cGxhbl9mYWlsZWQ6IDAsXG4gICAgICBpbXBhY3Q6ICcnLFxuICAgICAgaXNHcm91cEFzc2lnblRvOlxuICAgICAgICBlbnRydXN0Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPT0gJ0FOWV9PTkUnID8gMSA6IDAsXG4gICAgICBpc19rZXlfY29tcGxpYW5jZTogZW50cnVzdEZvcm0ucmVzcG9uc2liaWxpdHkua2V5UmVzcG9uc2liaWxpdHkgPyAxIDogMCxcbiAgICAgIGFsbG93RWRpdER1ZURhdGU6IGVudHJ1c3RGb3JtPy5hbGxvd0VkaXREdWVEYXRlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgbGlicmFyeV9yZXBvcnRfaWQ6IDAsXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZW50cnVzdEZvcm0ubGlmZWN5Y2xlRGV0YWlscyA/PyAnMDAwMC0wMC0wMH5+MCcsXG4gICAgICBsaW5rX2Zvcl9kZXRhaWxzOiBtb3JlT3B0aW9ucz8uRk9STUFURV9FVklERU5DRVxuICAgICAgICA/IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzXG4gICAgICAgIDogW10sXG4gICAgICBsaW5rYWdlczogeyBjb21wbGlhbmNlOiBbXSB9LFxuICAgICAgbWVtYmVyX2lkOlxuICAgICAgICB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdCwgJ3VpZCcpPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdCwgJ3VpZCcpWzBdXG4gICAgICAgICAgOiB0aGlzLm1lbWJlcklkLFxuICAgICAgb2JqZWN0aXZlOiBtb3JlT3B0aW9ucz8uT0JKRUNUSVZFID8gb2JqZWN0aXZlIDogJycsXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBlbnRydXN0Rm9ybS5yZXBvcnRJZCA/IFtlbnRydXN0Rm9ybS5yZXBvcnRJZF0gOiBbXSxcbiAgICAgIG9uX2NvbXBsZXRpb25fb2ZfdHlwZTogMSxcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogdGhpcy5vcmdhbml6YXRpb25JZCxcbiAgICAgIG92ZXJyaWRlX3dlZWtseTogMCxcbiAgICAgIHBhcmVudF9pZDogMCxcbiAgICAgIHBlbmFsdHk6ICcnLFxuICAgICAgcHJpdmF0ZV9saWJyYXJ5X2lkOiAwLFxuICAgICAgcmVtYXJrczogcmVtYXJrcyxcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBlbnRydXN0Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyxcbiAgICAgIHJlcG9ydF9mb3JtYXQ6IG1vcmVPcHRpb25zPy5GT1JNQVRFX0VWSURFTkNFXG4gICAgICAgID8gZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXNcbiAgICAgICAgOiBbXSxcbiAgICAgIGlzRm9ybWF0VXBsb2FkOlxuICAgICAgICBtb3JlT3B0aW9ucz8uRk9STUFURV9FVklERU5DRSAmJlxuICAgICAgICAgIGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdFJlcXVpcmVkXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuICAgICAgcmVwb3J0X2Zvcm1hdF9saW5rOiAnJyxcbiAgICAgIHJlcG9ydF9uYW1lOiBlbnRydXN0Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lLFxuICAgICAgcmVwb3J0X3VwbG9hZF9mbGFnOiBlbnRydXN0Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkXG4gICAgICAgID8gMVxuICAgICAgICA6IDAsXG4gICAgICByZXZpZXdfYWZ0ZXJfZGF5czogbW9yZU9wdGlvbnM/LlJFVklFV0VSXG4gICAgICAgID8gZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMgPT09ICcnXG4gICAgICAgICAgPyAwXG4gICAgICAgICAgOiBOdW1iZXIoZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMpXG4gICAgICAgIDogMCxcbiAgICAgIHJldmlld19mYWlsZWRfYWZ0ZXJfZGF5czogbW9yZU9wdGlvbnM/LlJFVklFV0VSXG4gICAgICAgID8gZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdOT3RDb21wbGV0ZWREYXlzID09PSAnJ1xuICAgICAgICAgID8gMFxuICAgICAgICAgIDogTnVtYmVyKGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cylcbiAgICAgICAgOiAwLFxuICAgICAgcmV2aWV3ZXJfYXJyOiBtb3JlT3B0aW9ucz8uUkVWSUVXRVJcbiAgICAgICAgPyB7XG4gICAgICAgICAgbGV2ZWwxOiB7XG4gICAgICAgICAgICByZXZpZXdlcnM6IHRoaXMuc2V0UmV2aWV3ZXJQYXlsb2FkKFxuICAgICAgICAgICAgICB0aGlzLnJldmlld2VyVXNlckxpc3QsXG4gICAgICAgICAgICAgICdsaXN0JyxcbiAgICAgICAgICAgICAgZW50cnVzdEZvcm0ucmV2aWV3ZXJzLmFjY2VwdGVkRGF0YSxcbiAgICAgICAgICAgICAgZW50cnVzdEZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvd1xuICAgICAgICAgICAgICAgID8gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgICAgOiAnQU5ZT05FJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHR5cGU6IGVudHJ1c3RGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3dcbiAgICAgICAgICAgICAgPyAnU0VRVUVOVElBTCdcbiAgICAgICAgICAgICAgOiAnQU5ZT05FJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICAgIDoge30sXG4gICAgICB1c2VyR3JvdXBJZHM6IHtcbiAgICAgICAgYXNzaWduZWVBbGxHcm91cElkczpcbiAgICAgICAgICBlbnRydXN0Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgIT09ICdBTllfT05FJ1xuICAgICAgICAgICAgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsICd1Z2lkJylcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIGFzc2lnbmVlQW55b25lR3JvdXBJZHM6XG4gICAgICAgICAgZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQU5ZX09ORSdcbiAgICAgICAgICAgID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LCAndWdpZCcpXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBjY0VtYWlsR3JvdXBJZHM6XG4gICAgICAgICAgdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0LFxuICAgICAgICAgICAgJ3VnaWQnXG4gICAgICAgICAgKSA/PyBbXSxcbiAgICAgICAgZmFpbHVyZUNDRW1haWxHcm91cElkczpcbiAgICAgICAgICB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QsXG4gICAgICAgICAgICAndWdpZCdcbiAgICAgICAgICApID8/IFtdLFxuICAgICAgICByZXZpZXdlckdyb3VwSWRzOlxuICAgICAgICAgIHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0LFxuICAgICAgICAgICAgJ3VnaWQnXG4gICAgICAgICAgKSA/PyBbXSxcbiAgICAgIH0sXG4gICAgICBleGlzdGluZ1VzZXJJZHM6IHtcbiAgICAgICAgYXNzaWduZWVBbGxJZHM6XG4gICAgICAgICAgZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlICE9PSAnQU5ZX09ORSdcbiAgICAgICAgICAgID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/LmFzc2lnbmVlcz8ubGlzdCwgJ3VpZCcpXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBhc3NpZ25lZUFueW9uZUlkczpcbiAgICAgICAgICBlbnRydXN0Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPT09ICdBTllfT05FJ1xuICAgICAgICAgICAgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8uYXNzaWduZWVzPy5saXN0LCAndWlkJylcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIGNjRW1haWxNZW1iZXJJZHM6XG4gICAgICAgICAgdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/Lm92ZXJzZWVycz8ubGlzdCwgJ3VpZCcpID8/IFtdLFxuICAgICAgICBmYWlsdXJlQ0NFbWFpbE1lbWJlcklkczpcbiAgICAgICAgICB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0LCAndWlkJykgPz9cbiAgICAgICAgICBbXSxcbiAgICAgICAgcmV2aWV3ZXJJZHM6XG4gICAgICAgICAgdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0LFxuICAgICAgICAgICAgJ3VpZCdcbiAgICAgICAgICApID8/IFtdLFxuICAgICAgfSxcbiAgICAgIHJldmlld2VyX2NoZWNrcG9pbnRzOiBbeyBjaGVja3BvaW50czogW10sIGluc3RydWN0aW9uOiAnJyB9XSxcbiAgICAgIHJldmlld2VyX2lkOiAwLFxuICAgICAgcmlza19jbGFzczogdGhpcy5pc1Jpc2tFbmFibGUgPyBlbnRydXN0Rm9ybS5yaXNrQ2xhc3MgOiAnbG93X21lZGl1bScsXG4gICAgICByaXNrX2lkczogJycsXG4gICAgICByaXNrX21hdHJpeF9kYXRhOiBtb3JlT3B0aW9ucz8uUklTS19DTEFTU0lGSUNBVElPTlxuICAgICAgICA/IGVudHJ1c3RGb3JtLnJpc2tNYXRyaXhcbiAgICAgICAgOiAnMCwwLDAsMCwwLDAnLFxuICAgICAgc2FtcGxlX3NpemU6IDAsXG4gICAgICBzdGFydF9kYXRlX3V0Yzogc3RhcnREYXRlLFxuICAgICAgc3RhdHV0b3J5X2RheTogMCxcbiAgICAgIHRlc3RfcmVxdWlyZWRfZmxhZzogbW9yZU9wdGlvbnM/LkFTU1VSQU5DRVxuICAgICAgICA/IGVudHJ1c3RGb3JtLmFzc3VyYW5jZUxpc3Q/Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDBcbiAgICAgICAgOiAwLFxuICAgICAgdGVzdHBsYW5fY2F0ZWdvcnlfaWQ6IG1vcmVPcHRpb25zPy5BU1NVUkFOQ0VcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhlbnRydXN0Rm9ybS5hc3N1cmFuY2VMaXN0LCAnY2F0ZWdvcnlfaWQnKVxuICAgICAgICA6IFtdLFxuICAgICAgdGVzdHBsYW5fY2F0ZWdvcnlfbWFuYWdlcjogJycsXG4gICAgICBhdWRpdF9jYXRlZ29yeV9kZXRhaWxzOlxuICAgICAgICBtb3JlT3B0aW9ucz8uUkVRVUlSRVNfQVVESVQgJiZcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscz8uY2F0ZWdvcnlfaWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGNhdGVnb3J5X2lkOlxuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzLmNhdGVnb3J5X2lkLFxuICAgICAgICAgICAgc2FtcGxlOiB0aGlzLnNlbGVjdGVkU2FtcGxlID09PSAwID8gdGhpcy5zYW1wbGVWYWx1ZSA6IDAsXG4gICAgICAgICAgICBwZXJjZW50YWdlOiB0aGlzLnNlbGVjdGVkU2FtcGxlID09PSAxID8gdGhpcy5zYW1wbGVQZXJjZW50YWdlIDogMCxcbiAgICAgICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiBgMX4wfiR7dGhpcy5zZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZX1+MWAsXG4gICAgICAgICAgICBmcmVxdWVuY3lfdGltZTogbW9tZW50KHRoaXMuYXVkaXRUaW1lLCAnSEg6bW0gYScpLmZvcm1hdChcbiAgICAgICAgICAgICAgJ0hIOm1tOnNzJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICBjYXRlZ29yeV9pZDogMCxcbiAgICAgICAgICAgIHNhbXBsZTogMCxcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6IDAsXG4gICAgICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogYGAsXG4gICAgICAgICAgICBmcmVxdWVuY3lfdGltZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgIGFzc2Vzc21lbnQ6IHtcbiAgICAgICAgY2F0ZWdvcnlfaWQ6IG1vcmVPcHRpb25zPy5BU1NFU1NNRU5UXG4gICAgICAgICAgPyBlbnRydXN0Rm9ybT8uYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWRcbiAgICAgICAgICA6ICcnLFxuICAgICAgICBhc3Nlc3NtZW50X2lkOiBtb3JlT3B0aW9ucz8uQVNTRVNTTUVOVCAmJiB0aGlzLmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X3R5cGUgIT09ICdjb21wbGlhbmNlX2F1ZGl0J1xuICAgICAgICAgID8gZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5haWRcbiAgICAgICAgICA6IGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkLFxuICAgICAgfSxcbiAgICAgIGFzc2Vzc21lbnRfY2hlY2twb2ludDogbW9yZU9wdGlvbnM/LkNIRUNLUE9JTlRTX05FV1xuICAgICAgICA/IE9iamVjdC5rZXlzKGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMpPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBlbnRydXN0Rm9ybT8ubmV3X2NoZWNrcG9pbnRzXG4gICAgICAgICAgOiB7fVxuICAgICAgICA6IHt9LFxuICAgICAgcXVlc3Rpb25uYWlyZV90eXBlOiBtb3JlT3B0aW9ucz8uQ0hFQ0tQT0lOVFNfTkVXXG4gICAgICAgID8gT2JqZWN0LmtleXMoZW50cnVzdEZvcm0/Lm5ld19jaGVja3BvaW50cyk/Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICdhc3Nlc3NtZW50X2NoZWNrcG9pbnQnXG4gICAgICAgICAgOiBtb3JlT3B0aW9ucz8uQVNTRVNTTUVOVCAmJiBlbnRydXN0Rm9ybT8uYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWRcbiAgICAgICAgICAgID8gJ2Fzc2Vzc21lbnQnXG4gICAgICAgICAgICA6IEpTT04uc3RyaW5naWZ5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jaGVja3BvaW50cykgIT0gJycgJiZcbiAgICAgICAgICAgICAgbW9yZU9wdGlvbnM/LkNIRUNLUE9JTlRTXG4gICAgICAgICAgICAgID8gJ2NoZWNrcG9pbnQnXG4gICAgICAgICAgICAgIDogJydcbiAgICAgICAgOiAnJyxcblxuICAgICAgbGlua2VkX0dSQ19pZHM6IG1vcmVPcHRpb25zPy5HUkNfT0JKRUNUU1xuICAgICAgICA/IGVudHJ1c3RGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cy5tYXAoKGdyYzogYW55KSA9PiBncmMuZ3JjaWQpXG4gICAgICAgIDogW10sXG4gICAgICBmcmVxdWVuY3k6IHRoaXMuZnJlcXVlbmN5T2JqZWN0LFxuICAgICAgc2VsZWN0ZWRDYXRlZ29yeTogdGhpcy5zZWxlY3RlZFByb2dyYW1zXG4gICAgfTtcblxuXG5cbiAgICBpZiAodGhpcy5pc1Jlc3BvbnNpYmlsaXR5UmNMaW5rRW5hYmxlZCkge1xuICAgICAgcGF5bG9hZFsncmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlJ10gPVxuICAgICAgICB0aGlzLmlzUmVzcG9uc2liaWxpdHlSY0xpbmtFbmFibGVkICYmIG1vcmVPcHRpb25zPy5SQ1xuICAgICAgICAgID8gdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGVcbiAgICAgICAgICA6IDA7XG4gICAgICBwYXlsb2FkWydyZXNwb25zaWJpbGl0eUNlbnRlckFyciddID1cbiAgICAgICAgdGhpcy5pc1Jlc3BvbnNpYmlsaXR5UmNMaW5rRW5hYmxlZCAmJiBtb3JlT3B0aW9ucz8uUkNcbiAgICAgICAgICA/IHJjRGV0YWlsc0lkQXJyXG4gICAgICAgICAgOiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zaWJpbGl0eVBheWxvYWQgPSB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5idWlsZFJlc3BvbnNpYmlsaXR5UGF5bG9hZChwYXlsb2FkKTtcblxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlQYXlsb2FkID0gcGF5bG9hZDtcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnICB8fCB0aGlzLmlzRHVwbGljYXRlKSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5zdWJtaXRFbnRydXN0KHJlc3BvbnNpYmlsaXR5UGF5bG9hZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zaG93U21pbGV5ID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVudHJ1c3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcblxuICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAmJiByZXMubWVzc2FnZS50b0xvd2VyQ2FzZSgpID09PSAnYnVsayBlbnRydXN0Jykge1xuICAgICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFlvdSBoYXZlIGVudHJ1c3RlZCAke3Jlcy5jYWxjdWxhdGVfbm9fb2ZfcmVzcG9uc2liaWl0aWVzfSByZXNwb25zaWJpbGl0aWVzLiBUaGVzZSB3b3VsZCBiZSByZWZsZWN0ZWQgd2l0aGluIHlvdXIgYWNjb3VudCBpbiBzb21ldGltZS5gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgJiYgcGF5bG9hZC5jcmVhdGVkX2J5ID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9XG4gICAgICAgICAgICAgICdUaGlzIHJlc3BvbnNpYmlsaXR5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBub3RpZmljYXRpb24gcXVldWUuJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHBheWxvYWQuY3JlYXRlZF9ieSA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zWzFdLmJ1dHRvblRleHQgPSAnVmlldyBSZXNwb25zaWJpbGl0aWVzJztcbiAgICAgICAgICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFlvdSBqdXN0IGNyZWF0ZWQgYSByZXNwb25zaWJpbGl0eSBvbiBiZWhhbGYgJHtlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdC5maW5kKFxuICAgICAgICAgICAgICAgIChtZW1iZXI6IGFueSkgPT4gbWVtYmVyLm1lbWJlcl9pZCA9PT0gcGF5bG9hZC5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgKS5tZW1iZXJfbmFtZVxuICAgICAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vdGhpcy5yZXNldCgpO1xuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5lbnRydXN0TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgICAnT09QUyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHRoZSBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQuIENvdWxkIHlvdSBwbGVhc2UgdHJ5IG9uZSBtb3JlIHRpbWU/JyxcbiAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZihyZXNwb25zaWJpbGl0eVBheWxvYWQpIHtcbiAgICAgICAgcmVzcG9uc2liaWxpdHlQYXlsb2FkWydpZCddID0gdGhpcy5yZXNwb25zaWJpbGl0eUlkXG4gICAgICB9XG4gICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSBgVGhlIHJlc3BvbnNpYmlsaXR5IGhhcyBiZWVuIG1vZGlmaWVkLmA7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZVxuICAgICAgICAudXBkYXRlRW50cnVzdChyZXNwb25zaWJpbGl0eVBheWxvYWQsIHRoaXMucmVzcG9uc2liaWxpdHlJZCwgdHJ1ZSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZW50cnVzdExvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEdXBsaWNhdGVFbnRydXN0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIC8vIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAgICdhbGVydCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVuaXF1ZUlkVXNlckdyb3VwcyhcbiAgICB0b3RhbFVzZXJMaXN0OiBhbnksXG4gICAgc2VsZWN0ZWRHcm91cDogYW55LFxuICAgIHNlbGVjdGVkVXNlcnM6IGFueVxuICApIHtcbiAgICBsZXQgZ3JvdXBVc2VyTGlzdCA9IHRoaXMuZ2V0R3JvdXBzVXNlckVtcGxveWVlc0lkKFxuICAgICAgdG90YWxVc2VyTGlzdCxcbiAgICAgIHNlbGVjdGVkR3JvdXBcbiAgICApO1xuICAgIGxldCBpZHMgPSBuZXcgU2V0KHNlbGVjdGVkVXNlcnMubWFwKCh1c2VyOiBhbnkpID0+IHVzZXI/Lm15X21lbWJlcl9pZCkpO1xuICAgIGxldCB1c2VyTGlzdCA9IFtcbiAgICAgIC4uLnNlbGVjdGVkVXNlcnMsXG4gICAgICAuLi5ncm91cFVzZXJMaXN0LmZpbHRlcihcbiAgICAgICAgKGdyb3VwVXNlcjogYW55KSA9PiAhaWRzLmhhcyhncm91cFVzZXI/Lm15X21lbWJlcl9pZClcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdXNlckxpc3Q7XG4gIH1cblxuICBjb21iaW5lVXNlckFuZFVzZXJHcm91cE1lbWJlcnMoaXNHcm91cD86IGFueSkge1xuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgdGhpcy5hc3NpZ25lZVVzZXJMaXN0ID0gaXNHcm91cFxuICAgICAgICA/IFt7IGVtcGxveWVlX2lkOiB0aGlzLnJhd1Jlc3BvbnNpYmlsaXR5Py5hc3NpZ25lZV9tZW1iZXJfaWQgfV1cbiAgICAgICAgOiB0aGlzLnVuaXF1ZUlkVXNlckdyb3VwcyhcbiAgICAgICAgICB0aGlzLmFsbFVzZXJzTGlzdCxcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QsXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFxuICAgICAgICApO1xuICAgICAgdGhpcy5yZXZpZXdlclVzZXJMaXN0ID0gdGhpcy51bmlxdWVJZFVzZXJHcm91cHMoXG4gICAgICAgIHRoaXMuYWxsVXNlcnNMaXN0LFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QsXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RcbiAgICAgICk7XG4gICAgICB0aGlzLm92ZXJzZWVyVXNlckxpc3QgPSB0aGlzLnVuaXF1ZUlkVXNlckdyb3VwcyhcbiAgICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QsXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QsXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RcbiAgICAgICk7XG4gICAgICB0aGlzLm92ZXJzZWVyVXNlck5vdGlmeUxpc3QgPSB0aGlzLnVuaXF1ZUlkVXNlckdyb3VwcyhcbiAgICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QsXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3QsXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzaWduZWVVc2VyTGlzdCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q7XG4gICAgICB0aGlzLnJldmlld2VyVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0O1xuICAgICAgdGhpcy5vdmVyc2VlclVzZXJMaXN0ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdDtcbiAgICAgIHRoaXMub3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCA9XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHJlc2V0cyB0aGUgZm9ybS5cbiAgICovXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSBmYWxzZTtcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XG4gICAgICBhc3NpZ25vcnM6IHtcbiAgICAgICAgZW5hYmxlOiBmYWxzZSxcbiAgICAgICAgbGlzdDogW10sXG4gICAgICB9LFxuICAgICAgcmVzcG9uc2liaWxpdHk6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhc3NpZ25lZUdyb3Vwczoge1xuICAgICAgICB3aG9DYW5Db21wbGV0ZTogJ0FMTCcsXG4gICAgICAgIGxpc3Q6IFtdLFxuICAgICAgfSxcbiAgICAgIGFzc2lnbmVlczoge1xuICAgICAgICB3aG9DYW5Db21wbGV0ZTogJ0FMTCcsXG4gICAgICAgIGxpc3Q6IFtdLFxuICAgICAgfSxcbiAgICAgIGFsbG93RWRpdER1ZURhdGU6IGZhbHNlLFxuICAgICAgZnJlcXVlbmN5OiAnJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnJyxcbiAgICAgIG9iamVjdGl2ZTogJycsXG4gICAgICByYzogW10sXG4gICAgICBjYXRlZ29yeTogW10sXG4gICAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246ICcnLFxuICAgICAgY3VzdG9tVGFnczogW10sXG4gICAgICBjaGVja3BvaW50czogW10sXG4gICAgICByZXZpZXdlcnM6IHtcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMixcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDogW10sXG4gICAgICB9LFxuICAgICAgZ3JvdXBSZXZpZXdlcnM6IHtcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IDIsXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMixcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDogW10sXG4gICAgICB9LFxuICAgICAgb3ZlcnNlZXJzOiB7XG4gICAgICAgIG5vdGlmeUxpc3Q6IFtdLFxuICAgICAgICBsaXN0OiBbXSxcbiAgICAgIH0sXG4gICAgICBvdmVyc2VlcnNHcm91cHM6IHtcbiAgICAgICAgbm90aWZ5TGlzdDogW10sXG4gICAgICAgIGxpc3Q6IFtdLFxuICAgICAgfSxcbiAgICAgIGZvcm1hdEFuZEV2aWRlbmNlOiB7XG4gICAgICAgIGZvcm1hdFJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZm9ybWF0RmlsZXM6IFtdLFxuICAgICAgICBmb3JtYXRMaW5rczogW10sXG4gICAgICAgIGV2aWRlbmNlUmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIGFzc3VyYW5jZUxpc3Q6IFtdLFxuICAgICAgcmVxdWlyZXNBdWRpdExpc3Q6IFtdLFxuICAgICAgcmlza0NsYXNzOiAnbG93JyxcbiAgICAgIHJpc2tNYXRyaXg6ICcwLDAsMCwwLDAsMCcsXG4gICAgICBwcm9ncmFtOiBbXSxcbiAgICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiBbXSxcbiAgICB9O1xuICAgIHRoaXMubW9yZU9wdGlvbnMgPSB7XG4gICAgICBPQkpFQ1RJVkU6IGZhbHNlLFxuICAgICAgUkM6IGZhbHNlLFxuICAgICAgQ0FURUdPUlk6IGZhbHNlLFxuICAgICAgRk9STUFURV9FVklERU5DRTogZmFsc2UsXG4gICAgICBDSEVDS1BPSU5UUzogZmFsc2UsXG4gICAgICBSSVNLX0NMQVNTSUZJQ0FUSU9OOiBmYWxzZSxcbiAgICAgIFJFVklFV0VSOiBmYWxzZSxcbiAgICAgIE9WRVJTRUVSOiBmYWxzZSxcbiAgICAgIEFTU1VSQU5DRTogZmFsc2UsXG4gICAgICBBUFBTOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnSG93IG9mdGVuIGRvZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9jY3VyPyc7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzID0ge1xuICAgICAgcGF0dGVybjogJycsXG4gICAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxuICAgICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcbiAgICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxuICAgICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgIHdpbmRvdzogMCxcbiAgICAgIGZhaWxlZDogMCxcbiAgICAgIHRpbWU6IERFRkFVTFRfVElNRSxcbiAgICAgIGZhaWxlZFRpbWU6ICcnLFxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogMCxcbiAgICAgIG9uQ29tcGxldGlvblJlcG9ydERldGFpbHM6IHt9LFxuICAgIH07XG4gICAgdGhpcy5zYW1wbGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNhbXBsZVBlcmNlbnRhZ2UgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IC0xO1xuICAgIHRoaXMuc2VuZEF1ZGl0UmVtaW5kZXJzVmFsdWUgPSAyO1xuICAgIHRoaXMuYXVkaXRUaW1lID0gREVGQVVMVF9USU1FO1xuICAgIHRoaXMubW9kZSA9ICdDUkVBVEUnO1xuICAgIHRoaXMuaXNFbnRydXN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFzc2Vzc21lbnREZXRhaWxzID0gbnVsbDtcbiAgICB0aGlzLm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5ID0gbnVsbDtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGV0YWlscyA9IHtcbiAgICB9O1xuICAgIHRoaXMucmVzZXRGb3JtLmVtaXQodHJ1ZSk7XG4gIH1cbiAgYWN0aW9uKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5vcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnKSB7XG4gICAgICB0aGlzLmNsb3NlU21pbGV5KCdkcycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50KSB7XG4gICAgICBjYXNlICdhZGRNb3JlJzpcbiAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICB0aGlzLnZpZXdSZXNwb25zaWJpbGl0aWVzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB2aWV3UmVzcG9uc2liaWxpdGllcygpOiB2b2lkIHtcbiAgICBsZXQgdXJsOiBzdHJpbmc7XG4gICAgY29uc3QgaWQgPSB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YT8uZGF0YT8ucmVzcG9uc2liaWxpdHk/LmlkO1xuICAgIGxldCB1cmxTdWJzdHJpbmcgPSAnL2NvbXBsaWFuY2UvcmVzcG9uc2liaWxpdGllcy8nO1xuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XG4gICAgICB1cmwgPSAnaHR0cDovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHVybFN1YnN0cmluZztcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xuICAgIH1cbiAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdGhpcy5tb2RlICE9PSAnRURJVCcpO1xuXG4gICAgdGhpcy5jbG9zZVNtaWxleSgnZHMnKTtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH1cbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzU21pbGV5T24gPSBmYWxzZTtcbiAgICAvLyB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSk7XG4gICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6IHRoaXMucmVzcG9uc2liaWxpdHlEYXRhLCBjb25maXJtOiBmYWxzZSB9KTtcbiAgfVxuXG4gIGdldE9uQ29tcGxldGlvblJlcG9ydERldGFpbHMoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZyZXF1ZW5jeURhdGEgPSBldmVudD8ucGF0dGVybj8uc3BsaXQoJ34nKTtcbiAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGF0YVswXSkgPT0gNikge1xuICAgICAgcmV0dXJuIGV2ZW50Py5vbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIGZvciBlZGl0IHJlc3BvbnNpYmlsaXR5XG4gIGZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCB7IHNlbGVjdGVkRGF5LCBzZWxlY3RlZE1vbnRoIH0gPSB0aGlzLmdldFNlbGVjdGVkQXR0cmlidXRlcyhldmVudCk7XG4gICAgbGV0IGRhdGE6IGFueSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5wYXR0ZXJuLFxuICAgICAgd2luZG93OiBldmVudD8uc3RhcnRCZWZvcmUsXG4gICAgICBmYWlsZWRBZnRlcjogZXZlbnQ/LmVuZEFmdGVyLFxuICAgICAgZmFpbGVkX3RpbWVfdXRjOiBldmVudD8uZmFpbGVkX3RpbWVfdXRjLFxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzLFxuICAgICAgc3RhcnRGcm9tOiBOdW1iZXIoZXZlbnQ/LnN0YXJ0X29mX2RheV91dGMpLFxuICAgICAgdGltZUluMjRIcjogZXZlbnQ/LnRpbWUsXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudD8uYXV0b0RlYWN0aXZhdGUsXG4gICAgICBzdGFydERhdGU6IE51bWJlcihldmVudD8uc3RhcnRfb2ZfZGF5X3V0YyksXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50Py50aW1lXG4gICAgICApLFxuXG4gICAgICBjYXNlOiBldmVudD8udHlwZSxcbiAgICAgIGRheTogZXZlbnQ/LmRheSxcbiAgICAgIGV2ZXJ5OiBldmVudD8ucmVwZWF0T3B0aW9ucz8uZXZlcnksXG4gICAgICBzZWxlY3RlZERheTogc2VsZWN0ZWREYXksXG4gICAgICBzZWxlY3RlZE1vbnRoOiBzZWxlY3RlZE1vbnRoLFxuICAgICAgc2VsZWN0ZWRUeXBlOiBldmVudD8ub25Hb2luZz8uc2VsZWN0ZWRUeXBlLFxuICAgICAgcmFuZG9tSW5zdGFuY2VzOiBldmVudD8ucmFuZG9tPy5yYW5kb21JbnN0YW5jZXMsXG4gICAgICBzZWxlY3RlZE9uZ29pbmdUeXBlOiBldmVudD8ub25Hb2luZz8uc2VsZWN0ZWRPbmdvaW5nVHlwZSxcbiAgICAgIG9uQ29tcGxldGlvbjogZXZlbnQ/Lm9uQ29tcGxldGUsXG5cbiAgICB9O1xuXG5cbiAgICBpZihldmVudD8ub25Db21wbGV0aW9uUmVzcG9uc2liaWxpdHkpIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEZXRhaWxzLm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5ID0gZXZlbnQ/Lm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5O1xuICAgIH1cbiAgICB0aGlzLmZyZXF1ZW5jeURhdGEoZGF0YSk7XG4gIH1cblxuICBnZXRTZWxlY3RlZEF0dHJpYnV0ZXMoZXZlbnQ6IGFueSkge1xuICAgIGxldCBzZWxlY3RlZERheTogbnVtYmVyW10gPSBbXTtcbiAgICBsZXQgc2VsZWN0ZWRNb250aDogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCByZXBlYXRPbiA9IGV2ZW50Py5yZXBlYXRPcHRpb25zPy5yZXBlYXRPbi5zcGxpdCgnJyk7XG4gICAgaWYocmVwZWF0T24ubGVuZ3RoID09PSA3KSB7XG4gICAgICByZXBlYXRPbi5mb3JFYWNoKChlbGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZihOdW1iZXIoZWxlKSA9PT0gMSkge1xuICAgICAgICAgIHNlbGVjdGVkRGF5LnB1c2goaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBzZWxlY3RlZERheSwgc2VsZWN0ZWRNb250aDogW10gfTtcbiAgICB9IGVsc2UgIHtcbiAgICAgIHJlcGVhdE9uLmZvckVhY2goKGVsZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmKGVsZSA9PT0gJzEnKSB7XG4gICAgICAgICAgc2VsZWN0ZWRNb250aC5wdXNoKGluZGV4ICsgMSk7O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IHNlbGVjdGVkRGF5LCBzZWxlY3RlZE1vbnRoIH07XG4gICAgfVxuICBcbiAgfVxuXG4gIGZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy53aW5kb3cgPSBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSBldmVudD8uc3RhcnRfb2ZfZGF5X3V0YztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID1cbiAgICAgIGV2ZW50Py5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBldmVudD8ucGxhY2Vob2xkZXI7XG5cbiAgICAvLyBsZXQgb25Db21wbGV0aW9uUmVwb3J0RGV0YWlscyA9IHRoaXMuZ2V0T25Db21wbGV0aW9uUmVwb3J0RGV0YWlscyhldmVudCk7XG4gICAgLy8gaWYgKG9uQ29tcGxldGlvblJlcG9ydERldGFpbHMgIT0gbnVsbCkge1xuICAgIC8vICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLm9uQ29tcGxldGlvblJlcG9ydERldGFpbHMgPVxuICAgIC8vICAgICBvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzO1xuICAgIC8vIH1cbiAgfVxuXG4gIHNldFBheWxvYWQoZXZlbnQ6IGFueSk6IFJlc3BvbnNpYmlsaXR5IHwgIG51bGwge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmcmVxdWVuY3lEYXRhKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3doZW4nKSB7XG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZnJlcXVlbmN5T2JqZWN0ID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNldEZyZXF1ZW5jeU9iamVjdChldmVudCk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID0gZXZlbnQucGF0dGVybjtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9XG4gICAgICBldmVudC5jYXNlID09PSAnZGFpbHknID8gMCA6IGV2ZW50LndpbmRvdztcblxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF9hZnRlcl9kYXlzID0gZXZlbnQuZmFpbGVkQWZ0ZXI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX3RpbWVfdXRjID0gZXZlbnQuZmFpbGVkX3RpbWVfdXRjO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpZmVjeWNsZURldGFpbHMgPSBldmVudC5saWZlY3ljbGVEZXRhaWxzO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcG9ydElkID0gZXZlbnQucmVwb3J0SWQgPz8gMDtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zdGFydERhdGUgPSBldmVudC5zdGFydEZyb207XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0udGltZUluMjRIciA9IGV2ZW50LnRpbWVJbjI0SHI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA9XG4gICAgICBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgZmFsc2UpO1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZXZlbnQucGF0dGVybixcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBldmVudC50aW1lSW4xMmhyLFxuICAgICAgcmVtaW5kZXJfYmVmb3JlX2RheXM6IGV2ZW50LndpbmRvdyxcbiAgICAgIGZhaWxlZF9hZnRlcl9kYXlzOiBldmVudC5mYWlsZWRBZnRlcixcbiAgICAgIGxpZmVjeWNsZV9kZXRhaWxzOiBldmVudC5saWZlY3ljbGVEZXRhaWxzLFxuICAgICAgc3RhcnRfb2ZfZGF5X3V0YzogZXZlbnQuc3RhcnRGcm9tLFxuICAgICAgb25fY29tcGxldGlvbl9vZjogW2V2ZW50LnJlcG9ydElkXSxcbiAgICAgIGRvbV91dGM6IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApLFxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cyxcbiAgICAgIHBsYWNlaG9sZGVyOiBldmVudC5wbGFjZWhvbGRlcixcbiAgICB9O1xuXG4gICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xuICAgIHRoaXMuZnJlcXVlbmN5T2JqZWN0ID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNldEZyZXF1ZW5jeU9iamVjdChldmVudCk7XG4gICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKHBheWxvYWQpO1xuICB9XG5cbiAgY2hlY2tCbGFuayhkYXRhOiBzdHJpbmcpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IHRleHQgPSBkYXRhO1xuICAgICAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2FueX0gcmVzIC0gYW55ID0ge1xuICAgKi9cbiAgZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIoZnJlcXVlbmN5OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBmcmVxdWVuY3lUaW1lID0gICB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoZnJlcXVlbmN5Py50aW1lKTtcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5RGV0YWlscyA9IGZyZXF1ZW5jeS5wYXR0ZXJuLnNwbGl0KCd+Jyk7XG4gICAgICAgIHN3aXRjaCAoZnJlcXVlbmN5Py50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnZGFpbHknOlxuICAgICAgICAgICAgdGhpcy5nZXREYWlseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnd2Vla2x5JzpcbiAgICAgICAgICAgIHRoaXMuZ2V0V2Vla2x5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtb250aGx5JzpcbiAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncXVhcnRlcmx5JzpcbiAgICAgICAgICAgIHRoaXMuZ2V0UXVhcnRlcmx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdiaWFubnVhbGx5JzpcbiAgICAgICAgICAgIHRoaXMuZ2V0Qmlhbm51YWxQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3llYXJseSc6XG4gICAgICAgICAgICB0aGlzLmdldFllYXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb25lX3RpbWUnOlxuICAgICAgICAgICAgICB0aGlzLmdldE9uZVRpbWVQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3JhbmRvbSc6XG4gICAgICAgICAgICB0aGlzLmdldFJhbmRvbVBsYWNlaG9sZGVyKGZyZXF1ZW5jeSwgZnJlcXVlbmN5VGltZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvbl9jb21wbGV0ZSc6XG4gICAgICAgICAgICB0aGlzLmdldE9uQ29tcGxldGVQbGFjZWhvbGRlcihmcmVxdWVuY3ksIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAgICAgJ1lvdSBoYXZlIHNlbGVjdGVkIGFuIG9uZ29pbmcgZnJlcXVlbmN5Lic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvbl9jb21wbGV0aW9uX29mJzpcbiAgICAgICAgICAgIC8vIHRoaXMuZ2V0T25Db21wbGV0aW9uT2YoXG4gICAgICAgICAgICAvLyAgIGZyZXF1ZW5jeSxcbiAgICAgICAgICAgIC8vICAgcmVzPy5vbl9jb21wbGV0aW9uX29mWzBdLFxuICAgICAgICAgICAgLy8gICByZXMub25Db21wbGV0aW9uUmVwb3J0RGV0YWlsc1xuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgfVxuICAgICAgXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSXQgZ2V0cyB0aGUgZnJlcXVlbmN5IGRldGFpbHMgYW5kIHJlcG9ydCBpZCwgdGhlbiBpdCBzZXRzIHRoZSBmcmVxdWVuY3kgcGxhY2Vob2xkZXIgdG8gdGhlIGZyZXF1ZW5jeVxuICAgKiBkZXRhaWxzIGFuZCB0aGVuIGl0IGdldHMgdGhlIG9uIGNvbXBsZXRpb24gb2YgcmVzcG9uc2liaWxpdHkgYW5kIHNldHMgdGhlIGZyZXF1ZW5jeSBwbGFjZWhvbGRlciB0b1xuICAgKiB0aGUgZnJlcXVlbmN5IGRldGFpbHMgYW5kIHRoZSByZXBvcnQgbmFtZS5cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbMF0gPSZndDsgXCIxXCJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJlcG9ydElkIC0gbnVtYmVyXG4gICAqL1xuICBnZXRPbkNvbXBsZXRpb25PZihcbiAgICBmcmVxdWVuY3lEZXRhaWxzOiBhbnksXG4gICAgcmVwb3J0SWQ6IG51bWJlcixcbiAgICBvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzOiBhbnlcbiAgKSB7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICBmcmVxdWVuY3lEZXRhaWxzWzNdICtcbiAgICAgICcgJyArXG4gICAgICAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxID8gJ2RheXMnIDogJ2RheScpICtcbiAgICAgICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnO1xuICAgIGlmIChvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzKSB7XG4gICAgICBpZiAocmVwb3J0SWQgPT09IG9uQ29tcGxldGlvblJlcG9ydERldGFpbHMuUmVwb3J0SWQpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgZnJlcXVlbmN5RGV0YWlsc1szXSArXG4gICAgICAgICAgJyAnICtcbiAgICAgICAgICAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAxID8gJ2RheXMnIDogJ2RheScpICtcbiAgICAgICAgICAnIGFmdGVyIGNvbXBsZXRpb24gb2YgJyArXG4gICAgICAgICAgKG9uQ29tcGxldGlvblJlcG9ydERldGFpbHNcbiAgICAgICAgICAgID8gb25Db21wbGV0aW9uUmVwb3J0RGV0YWlscy5yZXBvcnRfbmFtZVxuICAgICAgICAgICAgOiAnJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIklmIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzNdIGlzIDEsIHRoZW4gc2V0IHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byAnRGFpbHkgYnkgJyArIGZyZXF1ZW5jeVRpbWUsXG4gICAqIG90aGVyd2lzZSBpZiBmcmVxdWVuY3lEZXRhaWxzWzNdIGlzIGdyZWF0ZXIgdGhhbiAxLCB0aGVuIHNldCB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgdG8gJ0V2ZXJ5ICcgK1xuICAgKiBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSArICcgZGF5cyBieSAnICsgZnJlcXVlbmN5VGltZS5cIlxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFswLCAwLCAwLCAxXVxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTI6MDAgQU1cIlxuICAgKi9cbiAgZ2V0RGFpbHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xuICAgICBmcmVxdWVuY3lEZXRhaWxzID0gZnJlcXVlbmN5RGV0YWlscy5tYXAoTnVtYmVyKVxuICAgICAgaWYgKGZyZXF1ZW5jeURldGFpbHM/LmRheT09PSAxKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnRGFpbHkgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJ0V2ZXJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeURldGFpbHNbM10gKyAoZnJlcXVlbmN5RGV0YWlsc1szXSA+IDEgPyAnIGRheXMnIDogJyBkYXknKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfVxuICAgIFxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCB3b3Jkcy5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzLCBsaWtlIHRoaXM6XG4gICAqXG4gICAqIGdldFdlZWtseVBsYWNlaG9sZGVyKFtcIjFcIixcIjIsMyw0LDUsNiw3XCIsXCIxXCIsXCIxXCJdLCBcIjEwOjAwIEFNXCIpXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCB3b3JkcywgbGlrZSB0aGlzOlxuICAgKlxuICAgKiBcIkV2ZXJ5IE1vbmRheSxUdWVzZGF5LFdlZG5lc2RheSxUaHVyc2RheSxGcmlkYXksU2F0dXJkYXkgYnkgMTA6MDAgQU1cIjwvY29kZT5cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMSwyLDMsNCw1XCIsIFwiXCIsIFwiMVwiLCBcIlwiXVxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxuICAgKi9cbiAgZ2V0V2Vla2x5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcbiAgICB7XG4gICAgICBjb25zdCBzZWxlY3RlZERheSA9IGZyZXF1ZW5jeURldGFpbHNbMV0uc3BsaXQoJywnKS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZGF5TmFtZVtwYXJzZUludChlbGUpIC0gMV07XG4gICAgICB9KTtcblxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAxKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICdFdmVyeSAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMikge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnRXZlcnkgYWx0ZXJuYXRlICcgKyBzZWxlY3RlZERheS5qb2luKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID09PSAzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICdFdmVyeSAzcmQgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9XG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICdFdmVyeSAnICtcbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3RoICcgK1xuICAgICAgICAgIHNlbGVjdGVkRGF5LmpvaW4oKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycywgY29udmVydHMgdGhlbSB0byBtb250aCBuYW1lcywgYW5kIHRoZW4gYWRkcyB0aGVtIHRvIGFcbiAgICogc2VudGVuY2UuXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiMVwiLCBcIjFcIiwgXCIxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMlwiXVxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxuICAgKi9cbiAgZ2V0TW9udGhseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XG4gICAge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xuICAgICAgfSk7XG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzFzdCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzNyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fFxuICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3N0IG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICduZCBvZiBldmVyeSAnICtcbiAgICAgICAgICBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAncmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3RoIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyAxLCAyLCAzLCAyMSwgMjIsIDIzLCBvciBncmVhdGVyIHRoYW4gMywgdGhlbiBzZXQgdGhlXG4gICAqIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIHRvIGEgc3RyaW5nIHRoYXQgaW5jbHVkZXMgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gYW5kIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzJdXG4gICAqIGFuZCB0aGUgZnJlcXVlbmN5VGltZS5cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIzXCIsIFwiMVwiLCBcIjEsMiwzXCJdXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXG4gICAqL1xuICBnZXRRdWFydGVybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xuICAgIHtcbiAgICAgIGNvbnN0IHF1YXJ0ZXJseSA9IFtcbiAgICAgICAgJ0phbnVhcnksIEFwcmlsLCBKdWx5LCBPY3RvYmVyJyxcbiAgICAgICAgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLFxuICAgICAgICAnIE1hcmNoLCBKdW5lLCBTZXB0ZW1iZXIsIERlY2VtYmVyJyxcbiAgICAgIF07XG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzFzdCBvZiBldmVyeSAnICtcbiAgICAgICAgICBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICcybmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnM3JkIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fFxuICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3N0IG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAnbmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICdyZCBvZiBldmVyeSAnICtcbiAgICAgICAgICBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3RoIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMgYW5kIHJldHVybnMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG1vbnRoIG5hbWVzLlxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxXCIsIFwiMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTJcIl1cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcbiAgICovXG4gIGdldEJpYW5udWFsUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcbiAgICB7XG4gICAgICBjb25zdCBzZWxlY3RlZE1vbnRoID0gZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChlbGUpIC0gMV07XG4gICAgICB9KTtcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMSkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnMXN0IG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnMm5kIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnM3JkIG9mIGV2ZXJ5ICcgKyBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIxIHx8XG4gICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAnc3Qgb2YgZXZlcnkgJyArXG4gICAgICAgICAgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ25kIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICdyZCBvZiBldmVyeSAnICtcbiAgICAgICAgICBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAndGggb2YgZXZlcnkgJyArXG4gICAgICAgICAgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGlzIGxlc3MgdGhhbiAyLCB0aGVuIHRoZSBmcmVxdWVuY3lQbGFjZWhvbGRlciBpcyBzZXQgdG8gdGhlIDFzdCwgMm5kLFxuICAgKiAzcmQsIG9yIG50aCBvZiBldmVyeSBtb250aCBieSBmcmVxdWVuY3lUaW1lLlxuICAgKlxuICAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcbiAgICogM3JkLCBvciBudGggb2YgZXZlcnkgbW9udGgsIEludGVydmFsOiBldmVyeSB5ZWFyU2VxdWVuY2UgeWVhcnMgYnkgZnJlcXVlbmN5VGltZS5cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCJZZWFybHlcIiwgXCIxXCIsIFwiMVwiLCBcIjFcIl1cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcbiAgICovXG4gIGdldFllYXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XG4gICAge1xuICAgICAgY29uc3QgeWVhclNlcXVlbmNlID1cbiAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPiAwID8gcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgOiAxO1xuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pIDwgMikge1xuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICcxc3Qgb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICcybmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICczcmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgICAndGggb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxIHx8XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIxXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICAgJ3N0IG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICAgJ25kIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICAgJ3JkIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMSkge1xuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgJzFzdCAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcsIEludGVydmFsOiBldmVyeSAnICtcbiAgICAgICAgICAgIHllYXJTZXF1ZW5jZSArXG4gICAgICAgICAgICAnIHllYXJzIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgJzJuZCAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcsIEludGVydmFsOiBldmVyeSAnICtcbiAgICAgICAgICAgIHllYXJTZXF1ZW5jZSArXG4gICAgICAgICAgICAnIHllYXJzIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgJzNyZCAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcsIEludGVydmFsOiBldmVyeSAnICtcbiAgICAgICAgICAgIHllYXJTZXF1ZW5jZSArXG4gICAgICAgICAgICAnIHllYXJzIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPiAzKSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICd0aCBvZiAgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnLCBJbnRlcnZhbDogZXZlcnkgJyArXG4gICAgICAgICAgICB5ZWFyU2VxdWVuY2UgK1xuICAgICAgICAgICAgJyB5ZWFycyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSB8fFxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICdzdCBvZiBldmVyeSAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICduZCBvZiBldmVyeSAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICdyZCBvZiBldmVyeSAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHBsYWNlaG9sZGVyIHN0cmluZyBmb3Igb25lLXRpbWUgZnJlcXVlbmN5IGV2ZW50cy5cbiAgICogXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gQXJyYXkgY29udGFpbmluZyBmcmVxdWVuY3kgZGV0YWlscyB3aGVyZTpcbiAgICogICAtIGZyZXF1ZW5jeURldGFpbHNbM106IERheSBvZiB0aGUgbW9udGhcbiAgICogICAtIGZyZXF1ZW5jeURldGFpbHNbMl06IE1vbnRoIG51bWJlciAoMS0xMilcbiAgICogICAtIGZyZXF1ZW5jeURldGFpbHNbMV06IFllYXJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBUaW1lIHN0cmluZyBpbiBmb3JtYXQgJ0hIOm1tJyAoZS5nLiAnMDk6MDAnKVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogLy8gRm9yIEphbnVhcnkgMTUsIDIwMjQgYXQgMDk6MDAgQU1cbiAgICogZ2V0T25lVGltZVBsYWNlaG9sZGVyKFtudWxsLCAyMDI0LCAxLCAxNV0sICcwOTowMCBhbScpXG4gICAqIC8vIFJldHVybnM6IFwiT25lIFRpbWUgMTUgSmFudWFyeSAyMDI0IGJ5IDA5OjAwIEFNXCJcbiAgICovXG4gIGdldE9uZVRpbWVQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xuICAgIGNvbnN0IG1vbnRoTmFtZSA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5nZXRNb250aE5hbWUocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkpO1xuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnT25lIFRpbWUgJyArIGZyZXF1ZW5jeURldGFpbHNbM10gKyAnICcgKyBtb250aE5hbWUgKyAnICcgKyBmcmVxdWVuY3lEZXRhaWxzWzFdICsgJyBieSAnICsgZnJlcXVlbmN5VGltZS50b1VwcGVyQ2FzZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgZnJlcXVlbmN5RGV0YWlscyBhcnJheSBhbmQgYSBmcmVxdWVuY3lUaW1lIGFycmF5IGFuZCByZXR1cm5zIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFs0LDEsMSwxXVxuICAgKi9cbiAgZ2V0UmFuZG9tUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcbiAgICBjb25zdCBxdWFydGVybHkgPSBbXG4gICAgICAnSmFudWFyeSwgQXByaWwsIEp1bHksIE9jdG9iZXInLFxuICAgICAgJ0ZlYnJ1YXJ5LCBNYXksIEF1Z3VzdCwgTm92ZW1iZXInLFxuICAgICAgJyBNYXJjaCwgSnVuZSwgU2VwdGVtYmVyLCBEZWNlbWJlcicsXG4gICAgXTtcbiAgICBjb25zdCBwYXR0ZXJuID0gZnJlcXVlbmN5RGV0YWlscz8ucGF0dGVybj8uc3BsaXQoJ34nKTtcbiAgICB7XG4gICAgICBzd2l0Y2ggKHBhcnNlSW50KHBhdHRlcm5bMV0pKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICdFdmVyeSB3ZWVrIGZvciAnICsgcGF0dGVyblszXSArICcgcmFuZG9tIGluc3RhbmNlcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICcgRXZlcnkgJyArXG4gICAgICAgICAgICBwYXR0ZXJuWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGVsZSkgLSAxXTtcbiAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBhbGlnblxuICAgICAgICAgICAgfSkgK1xuICAgICAgICAgICAgJyBmb3IgJyArXG4gICAgICAgICAgICBwYXR0ZXJuWzNdICtcbiAgICAgICAgICAgICcgcmFuZG9tIGluc3RhbmNlcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICdFdmVyeSAnICtcbiAgICAgICAgICAgIHF1YXJ0ZXJseVtwYXJzZUludChwYXR0ZXJuWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gK1xuICAgICAgICAgICAgJyBmb3IgJyArXG4gICAgICAgICAgICBwYXR0ZXJuWzNdICtcbiAgICAgICAgICAgICcgcmFuZG9tIGluc3RhbmNlcyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICdFdmVyeSB5ZWFyIGZvciAnICsgcGF0dGVyblszXSArICcgcmFuZG9tIGluc3RhbmNlcyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0T25Db21wbGV0ZVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XG4gICAgY29uc3QgZGF5cyA9IGZyZXF1ZW5jeURldGFpbHMub25Db21wbGV0ZS5kdWVBZnRlciA+IDEgPyAnZGF5cycgOiAnZGF5JztcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZnJlcXVlbmN5RGV0YWlscy5vbkNvbXBsZXRlLmR1ZUFmdGVyICsgJyAnICsgZGF5cyArICcgYWZ0ZXIgY29tcGxldGlvbiBvZiAnICsgdGhpcy5yZXNwb25zaWJpbGl0eURldGFpbHM/Lm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5Py50aXRsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIldoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBlZGl0IGJ1dHRvbiwgdGhlIGVkaXQgYnV0dG9uIGlzIGhpZGRlbiBhbmQgdGhlIGlucHV0IGZpZWxkIGlzIHNob3duLlxuICAgKiBXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgaW5wdXQgZmllbGQsIHRoZSBpbnB1dCBmaWVsZCBpcyBoaWRkZW4gYW5kIHRoZSBlZGl0IGJ1dHRvbiBpcyBzaG93bi5cIlxuICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBhbnkgLSB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICBvbkVkaXRXaGF0KGV2ZW50OiBhbnkpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIHRoaXMgd2lsbCBtYWtlIHRoZSBleGVjdXRpb24gYWZ0ZXIgdGhlIGFib3ZlIGJvb2xlYW4gaGFzIGNoYW5nZWRcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IGZhbHNlO1xuICAgICAgdGhpcy53aGF0SW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ/LmZvY3VzKCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIGEgcGFyYW1ldGVyIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gICAqIEBwYXJhbSB7YW55fSBbcmVzXSAtIGlzIHRoZSByZXNwb25zZSBmcm9tIHRoZSBBUElcbiAgICovXG4gIGdldEVkaXRNb3JlT3B0aW9ucyhyZXM/OiBhbnkpIHtcbiAgICBsZXQgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSAhPT0gJycpIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdPQkpFQ1RJVkUnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuT0JKRUNUSVZFID0gdHJ1ZTtcbiAgICB9XG4gICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JJU0tfQ0xBU1NJRklDQVRJT04nKTtcbiAgICB0aGlzLm1vcmVPcHRpb25zLlJJU0tfQ0xBU1NJRklDQVRJT04gPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdQUk9HUkFNJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlBST0dSQU0gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZFxuICAgICkge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0ZPUk1BVEVfRVZJREVOQ0UnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuRk9STUFURV9FVklERU5DRSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYz8ubGVuZ3RoID4gMCkge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ1JDJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdDSEVDS1BPSU5UUycpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cz8ubGVuZ3RoID4gMCkge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0dSQ19PQkpFQ1RTJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkdSQ19PQkpFQ1RTID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVZJRVdFUiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ09WRVJTRUVSJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc3VyYW5jZUxpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdBU1NVUkFOQ0UnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQVNTVVJBTkNFID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSRVFVSVJFU19BVURJVCcpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVFVSVJFU19BVURJVCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcy5xdWVzdGlvbm5haXJlX3R5cGUgPT09ICdhc3Nlc3NtZW50Jykge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0FTU0VTU01FTlQnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlcy5xdWVzdGlvbm5haXJlX3R5cGUgPT09ICdhc3Nlc3NtZW50X2NoZWNrcG9pbnQnKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFNfTkVXJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkNIRUNLUE9JTlRTX05FVyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XG4gIH1cblxuICAvLyBGb3JtYXQgJiBFdmlkZW5jZVxuICB0ZXN0RnVuY3Rpb24oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZS50cmltKCkgIT09ICcnICYmXG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPT09IGZhbHNlXG4gICAgKSB7XG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPT0gJzxicj4nKSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kZXNjcmlwdGlvbiA9ICcnO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID09ICc8YnI+Jykge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcmV2aWV3ZXJUeXBlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID1cbiAgICAgIGV2ZW50ID09PSAnU0VRVUVOVElBTCcgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBzZWxlY3RlZFNhbXBsZURhdGEoZXZlbnQ6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSBldmVudDtcbiAgICB0aGlzLnRlbXBDaGVja1ZhbHVlID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogSXQgcG9wdWxhdGVzIGEgbGlzdCBvZiBhc3N1cmFuY2UgY2F0ZWdvcmllcyBiYXNlZCBvbiB0aGUgdGVzdCBwbGFuIGNhdGVnb3J5IHNlbGVjdGVkLlxuICAgKiBAcGFyYW0ge2FueX0gdGVzdFBsYW5DYXRlZ29yeSAtIGFueVxuICAgKi9cbiAgcG9wdWxhdGVBc3N1cmFuY2VMaXN0KHRlc3RQbGFuQ2F0ZWdvcnk6IGFueSkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc3VyYW5jZSA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QsXG4gICAgICBbdGVzdFBsYW5DYXRlZ29yeT8uY2F0ZWdvcnlfaWRdLFxuICAgICAgJ2NhdGVnb3J5X2lkJ1xuICAgICk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyA9IHRlc3RQbGFuQ2F0ZWdvcnk7XG4gICAgaWYgKHRlc3RQbGFuQ2F0ZWdvcnkuc2FtcGxlKSB7XG4gICAgICB0aGlzLmlzU2FtcGxlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB0ZXN0UGxhbkNhdGVnb3J5LnNhbXBsZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSAwO1xuICAgIH1cblxuICAgIGlmICh0ZXN0UGxhbkNhdGVnb3J5LnBlcmNlbnRhZ2UpIHtcbiAgICAgIHRoaXMuaXNTYW1wbGUgPSB0cnVlO1xuICAgICAgdGhpcy5zYW1wbGVQZXJjZW50YWdlID0gdGVzdFBsYW5DYXRlZ29yeS5wZXJjZW50YWdlO1xuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IDE7XG4gICAgfVxuICAgIHRoaXMudGVtcENoZWNrVmFsdWUgPSB0aGlzLnNlbGVjdGVkU2FtcGxlO1xuICAgIHRoaXMuc2VuZEF1ZGl0UmVtaW5kZXJzVmFsdWUgPSB0ZXN0UGxhbkNhdGVnb3J5LmZyZXF1ZW5jeV9wYXR0ZXJuXG4gICAgICA/IHBhcnNlSW50KHRlc3RQbGFuQ2F0ZWdvcnkuZnJlcXVlbmN5X3BhdHRlcm4uc3BsaXQoJ34nKVsyXSlcbiAgICAgIDogMjtcbiAgICB0aGlzLmF1ZGl0VGltZSA9IG1vbWVudChcbiAgICAgIHRlc3RQbGFuQ2F0ZWdvcnk/LmZyZXF1ZW5jeV90aW1lLFxuICAgICAgJ0hIOm1tOnNzJ1xuICAgICkuZm9ybWF0KCdISDptbSBhJyk7XG4gIH1cblxuIFxuXG4gIC8vb24gc2FtcGxlIHRvZ2dsZSBvbi9vZmZcbiAgY2hlY2tJbnB1dFZhbHVlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQga2V5ID0gZXZlbnQuY2hhckNvZGU7IC8vICAgICAgICAga2V5ID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxuICAgIHJldHVybiAoa2V5ID4gNDcgJiYga2V5IDwgNTgpIHx8IGtleSA9PSA0NTtcbiAgfVxuXG4gIHN3aXRjaEVuYWJsZShldmVudDogYm9vbGVhbikge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNhbXBsZSA9IHRoaXMudGVtcENoZWNrVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSAtMTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiAgc2VsZWN0IEFzc2Vzc21lbnQgbGlzdCBhbmQgc2V0IGlkIHRvIHBheWxvYWRcbiAgb25Bc3Nlc3NtZW50U2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmlzQXNzZXNzbWVudCA9IGZhbHNlO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQgPSBldmVudDtcbiAgfVxuICAvLyBUT0RPOiBQb3B1bGF0ZSBhc3Nlc3NtZW50IGRhdGEgZnJvbSBhbHJlYWR5IHNlbGVjdGVkIGRhdGFcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhc3Nlc3NtZW50RGV0YWlscyA6IHNlbGVjdGVkIGFzc2Vzc21lbnQgZGV0YWlscyBsaWtlIGl0J3Mgb2JqZWN0IGlkIGFuZCBjYXRlZ29yeV9pZFxuICAgKi9cbiAgZ2V0QXNzZXNzbWVudERldGFpbHMoYXNzZXNzbWVudERldGFpbHM6IGFueSwgdHlwZT86IHN0cmluZykge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXG4gICAgICAuZ2V0QXNzZXNzbWVudERldGFpbHNCeUlEKGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldEFzc2Vzc21lbnREYXRhKHJlcywgYXNzZXNzbWVudERldGFpbHMsIHR5cGUpO1xuICAgICAgfSk7XG4gIH1cblxuICBzZXRBc3Nlc3NtZW50RGF0YShyZXM6IGFueSwgYXNzZXNzbWVudERldGFpbHM6IGFueSwgdHlwZT86IHN0cmluZykge1xuICAgIGlmIChyZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0eXBlID09PSAnYXNzZXNzbWVudCcpIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlEZXRhaWxzID0gcmVzWzBdLmNhdGVnb3J5LmZpbmQoXG4gICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUuX2lkID09IGFzc2Vzc21lbnREZXRhaWxzLmNhdGVnb3J5X2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubW9yZU9wdGlvbnMuQVNTRVNTTUVOVCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGFzc2Vzc21lbnREYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCxcbiAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkLFxuICAgICAgICAgIGFzc2Vzc21lbnREZXRhaWxzOiB7XG4gICAgICAgICAgICBpZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgIGFzc2Vzc21lbnRfbmFtZTogcmVzWzBdLmFzc2Vzc21lbnRfbmFtZSxcbiAgICAgICAgICAgIHF1ZXN0aW9uczogcmVzWzBdLnF1ZXN0aW9uc0NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2F0ZWdvcnlfZGV0YWlsczogY2F0ZWdvcnlEZXRhaWxzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0gSlNPTi5wYXJzZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShhc3Nlc3NtZW50RGF0YSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFNfTkVXID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wb3N0QXNzZXNzbWVudCh7IGFzc2Vzc21lbnREZXRhaWxzOiByZXNbMF0ucXVlc3Rpb25zIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVtb3ZlQ2hlY2twb2ludHModHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5vblJlbW92aW5nQ2hlY2twb2ludC5lbWl0KHR5cGUpO1xuICB9XG5cbiAgcmVtb3ZlQ2hlY2twb2ludCgpIHtcbiAgICB0aGlzLm1vcmVPcHRpb25zLkNIRUNLUE9JTlRTID0gZmFsc2U7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgQXNzZXNzbWVudCBkZXRhaWxzXG4gICAqL1xuICBwb3N0QXNzZXNzbWVudChldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ubmV3X2NoZWNrcG9pbnRzID0gZXZlbnQuYXNzZXNzbWVudERldGFpbHM7XG4gICAgdGhpcy5jaGVja3BvaW50Q291bnQgPSBldmVudC5hc3Nlc3NtZW50RGV0YWlscy5lbGVtZW50cz8ubGVuZ3RoO1xuICAgIHRoaXMuY2hlY2twb2ludENvdW50VXBkYXRlZC5lbWl0KHRoaXMuY2hlY2twb2ludENvdW50KTtcbiAgICB0aGlzLnNldElzVXBsb2FkZWQoZmFsc2UpO1xuICB9XG5cbiAgc2V0SXNVcGxvYWRlZChldmVudDogYW55KSB7XG4gICAgaWYgKCFldmVudCkgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XG4gICAgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XG4gIH1cblxuICBjaGVja0RlZmF1bHRQcm9ncmFtT25SZW1vdmUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuYWxsUHJvZ2FtU2VsZWN0ZWQgPSB0aGlzLmFsbFByb2dhbVNlbGVjdGVkLmZpbHRlcihcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LmlkICE9PSBldmVudD8uaWRcbiAgICApO1xuICAgIHRoaXMucmVtb3ZlUHJvZ3JhbShldmVudCk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhbiBhcnJheSBvZiBudW1iZXJzIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHVuaXF1ZSBudW1iZXJzLlxuICAgKiBAcGFyYW0ge2FueX0gYXJyYXkgLSBUaGUgYXJyYXkgeW91IHdhbnQgdG8gZ2V0IHRoZSB1bmlxdWUgdmFsdWVzIGZyb20uXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHVuaXF1ZSB2YWx1ZXMuXG4gICAqL1xuICBnZXRVbmlxdWVJZHMoYXJyYXk6IGFueSkge1xuICAgIGNvbnN0IHVuaXF1ZSA9IFsuLi5uZXcgU2V0KGFycmF5KV07XG4gICAgcmV0dXJuIHVuaXF1ZTtcbiAgfVxuXG4gIG9wZW5Bc3NpZ25lZUNoYW5nZUNvbmZpcm1hdGlvbihldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnQU5ZX09ORSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9ICcnO1xuICAgICAgdGhpcy5hc3NpZ25lZVR5cGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIG1vZGUgaXMgRURJVCwgZW1pdCB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSB7YW55fSBldmVudCAtIGFueSAtIHRoZSBldmVudCB0aGF0IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgYSByYWRpbyBidXR0b25cbiAgICovXG4gIG9uUmV2aWV3ZXJXb3JrZmxvd0NoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9XG4gICAgICBldmVudCA9PT0gJ3NlcXVlbnRpYWwnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJyAmJiB0aGlzLmhhc1Jldmlld2VyKSB7XG4gICAgICB0aGlzLm9uUmV2aWV3ZXJUeXBlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldE90aGVyR1JDT2JqZWN0cyhldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLm90aGVyR1JDU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm90aGVyR1JDU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIGV2ZW50ID0ge1xuICAgICAgICByY19pZHM6ICcnLFxuICAgICAgICB0eXBlOiB0aGlzLnNlbGVjdGVkR1JDVGFiLFxuICAgICAgICBzdGF0ZTogMSxcbiAgICAgICAgcGFnZTogMSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChldmVudD8uc2VhcmNoU3RyaW5nICYmIHRoaXMuZ3JjU2VhcmNoU3RyaW5nICE9PSBldmVudD8uc2VhcmNoU3RyaW5nKSB7XG4gICAgICB0aGlzLmdyY1NlYXJjaFN0cmluZyA9IGV2ZW50Py5zZWFyY2hTdHJpbmc7XG4gICAgICB0aGlzLmdldE90aGVyR1JDVGFiQ291bnQoe1xuICAgICAgICByY19pZHM6ICcnLFxuICAgICAgICBzZWFyY2hTdHJpbmc6IHRoaXMuZ3JjU2VhcmNoU3RyaW5nLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZ3JjTG9hZGVyID0gdHJ1ZTtcbiAgICBldmVudFsncmNfaWRzJ10gPSB0aGlzLmdldEFsbFJDSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjKTtcbiAgICBldmVudFsnZ3JjVHlwZSddID0gdGhpcy5zZWxlY3RlZEdSQ1RhYjtcbiAgICB0aGlzLm90aGVyR1JDU3Vic2NyaXB0aW9uID0gdGhpcy5ncmNTZXJ2aWNlXG4gICAgICAuZ2V0R1JDTGlzdChldmVudClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmdyY0xpc3QgPSBkYXRhO1xuICAgICAgICB0aGlzLmdyY0xvYWRlciA9IGZhbHNlO1xuICAgICAgICBpZihldmVudD8ubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc2VsZWN0ZWRHUkNPYmplY3RzID0gZGF0YT8uZGF0YT8uZmlsdGVyKChpdGVtOiBhbnkpID0+IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cy5pbmNsdWRlcyhpdGVtLmdyY2lkKSk7XG4gICAgICAgICAgdGhpcy5zZXRPdGhlckdSQ1R5cGVzRm9ybWF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gYGdldE90aGVyR1JDVGFiQ291bnRgIHJldHJpZXZlcyB0aGUgY291bnQgb2YgZGlmZmVyZW50IHR5cGVzIG9mIGl0ZW1zIChhc3NldHMsXG4gICAqIHByb2Nlc3NlcywgdmVuZG9ycywgaW52ZW50b3J5KSBhbmQgdXBkYXRlcyB0aGUgY29ycmVzcG9uZGluZyB0YWJzIHdpdGggdGhlIGNvdW50LlxuICAgKiBAcGFyYW0ge2FueX0gW2V2ZW50XSAtIFRoZSBcImV2ZW50XCIgcGFyYW1ldGVyIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlXG4gICAqIFwiZ2V0T3RoZXJHUkNUYWJDb3VudFwiIGZ1bmN0aW9uLiBJdCBpcyBvZiB0eXBlIFwiYW55XCIsIHdoaWNoIG1lYW5zIGl0IGNhbiBhY2NlcHQgYW55IGRhdGEgdHlwZS5cbiAgICovXG4gIGdldE90aGVyR1JDVGFiQ291bnQoZXZlbnQ/OiBhbnkpIHtcbiAgICBldmVudFsncmNfaWRzJ10gPSB0aGlzLmdldEFsbFJDSWRzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjKTtcbiAgICB0aGlzLmdyY1RhYkxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5ncmNTZXJ2aWNlLmdldEdSQ1RhYnNDb3VudChldmVudCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub3RoZXJHUkNDYXJkLmZvckVhY2goKHRhYjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IE9CSkVDVF9MQUJFTDogYW55ID0ge1xuICAgICAgICAgIEFTU0VUOiAnQXNzZXRzJyxcbiAgICAgICAgICBQUk9DRVNTOiAnUHJvY2Vzc2VzJyxcbiAgICAgICAgICBWRU5ET1I6ICdWZW5kb3JzJyxcbiAgICAgICAgICBJTlZFTlRPUlk6ICdJbnZlbnRvcnknLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdyY1RhYkxvYWRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBUQUJfTkFNRSA9IE9CSkVDVF9MQUJFTFt0YWI/LnRpdGxlPy50b1VwcGVyQ2FzZSgpXTtcbiAgICAgICAgaWYgKFRBQl9OQU1FKSB7XG4gICAgICAgICAgdGFiLnRpdGxlID0gVEFCX05BTUU7XG4gICAgICAgICAgdGFiLnZhbHVlID0gaW5kZXg7XG4gICAgICAgICAgdGFiLnNlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICAgIHRhYi5rZXkgPSBUQUJfTkFNRT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBgJHt0YWIua2V5fV90eXBlX2NvdW50YDtcbiAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHRhYi5jb3VudCA9IGRhdGFba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRBbGxSQ0lkcyhyY0lkczogYW55KSB7XG4gICAgY29uc3QgYWxsSWRzOiBudW1iZXJbXSA9IHJjSWRzLmZsYXRNYXAoKHJjOiBhbnkpID0+IFtcbiAgICAgIC4uLnJjLml0ZW1fcGFyZW50X2lkcy5tYXAoTnVtYmVyKSxcbiAgICAgIC4uLnJjLml0ZW1fY2hpbGRfaWRzLm1hcChOdW1iZXIpLFxuICAgICAgTnVtYmVyKHJjLnJjX2lkKSxcbiAgICBdKTtcblxuICAgIHJldHVybiB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3RcbiAgICAgIC5maWx0ZXIoKHJjOiBhbnkpID0+IGFsbElkcy5pbmNsdWRlcyhyYz8ucmNfaWQpKVxuICAgICAgLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5faWQpXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgc2V0T3RoZXJHUkNUeXBlc0Zvcm1hdGUoKSB7XG4gICAgY29uc3QgZ3JjVHlwZXMgPSBHUkNfVFlQRV9BUlJBWTtcbiAgICB0aGlzLnJlc2V0R1JDRGF0YVdpdGhUeXBlcygpO1xuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzPy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5ncmNEYXRhV2l0aFR5cGVzW2dyY1R5cGVzW2l0ZW0/LnR5cGVdXT8ucHVzaChpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0R1JDRGF0YVdpdGhUeXBlcygpIHtcbiAgICB0aGlzLmdyY0RhdGFXaXRoVHlwZXMgPSB7XG4gICAgICBhc3NldHM6IFtdLFxuICAgICAgcHJvY2Vzc2VzOiBbXSxcbiAgICAgIHZlbmRvcnM6IFtdLFxuICAgICAgaW52ZW50b3J5OiBbXSxcbiAgICB9O1xuICB9XG5cbiAgcmVtb3ZlT3RoZXJHUkNPYmplY3RzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBncmNUeXBlcyA9IEdSQ19UWVBFX0FSUkFZO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cyA9XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzLmZpbHRlcihcbiAgICAgICAgKGdyYzogYW55KSA9PiBncmM/Ll9pZCAhPT0gZXZlbnQ/Ll9pZFxuICAgICAgKTtcbiAgICB0aGlzLmZpbHRlck90aGVyR1JDRGF0YShldmVudCwgZ3JjVHlwZXNbZXZlbnQ/LnR5cGVdKTtcbiAgICB0aGlzLm90aGVyR1JDQ2FyZFswXS5zZWxlY3RlZENvdW50XG4gICAgICA/ICh0aGlzLm90aGVyR1JDQ2FyZFtldmVudD8udHlwZV0uc2VsZWN0ZWRDb3VudCAtPSAxKVxuICAgICAgOiAwO1xuICB9XG5cbiAgZmlsdGVyT3RoZXJHUkNEYXRhKGV2ZW50OiBhbnksIHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMuZ3JjRGF0YVdpdGhUeXBlc1t0eXBlXSA9IHRoaXMuZ3JjRGF0YVdpdGhUeXBlc1t0eXBlXT8uZmlsdGVyKFxuICAgICAgKGdyYzogYW55KSA9PiBncmM/Ll9pZCAhPT0gZXZlbnQ/Ll9pZFxuICAgICk7XG4gIH1cblxuICAvLyBOZXcgUHJvZ3JhbSBMaXN0XG4gIHByb2dyYW1zITogTGlzdEl0ZW1bXTsgLy8gQXNzaWduIG1vY2sgZGF0YVxuICBzZWxlY3RlZFByb2dyYW1zOiBhbnkgPSB7fTtcblxuXG4gIEBWaWV3Q2hpbGQoJ2N1c3RvbUl0ZW1UZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIGN1c3RvbUl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcblxuXG5cblxuICBvbkl0ZW1zU2VsZWN0ZWRDaGFuZ2UoaXRlbXM6IExpc3RJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXMgPSBpdGVtcztcbiAgICB0aGlzLmFsbFByb2dhbVNlbGVjdGVkID0gKFtdIGFzIGFueSkuY29uY2F0KC4uLiBPYmplY3QudmFsdWVzKGl0ZW1zKSk7XG4gIH1cblxuICBzZWxlY3RDYXRlZ29yeSgpOiB2b2lkIHtcblxuICAgIHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc1xuICAgIHRoaXMuZ2VuZXJhdGVDdXN0b21UYWdzKClcbiAgXG4gIH1cblxuZ2VuZXJhdGVDdXN0b21UYWdzKCkge1xuICAvLyBFbnN1cmUgY3VzdG9tVGFncyBleGlzdHNcbiAgaWYgKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY3VzdG9tVGFncykge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcbiAgfVxuXG4gIC8vIFByZXBhcmUgZXhpc3RpbmcgdGFncyBmb3IgcXVpY2sgbG9va3VwXG4gIGNvbnN0IGV4aXN0aW5nVGFnc1NldCA9IG5ldyBTZXQoXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFnc1xuICAgICAgLm1hcCgodGFnSXRlbTogYW55KSA9PiB0YWdJdGVtLm5hbWU/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICk7XG5cbiAgLy8gQ29sbGVjdCBuZXcgdGFnc1xuICBjb25zdCBuZXdUYWdzOiBhbnlbXSA9IFtdO1xuICBjb25zdCBwcm9ncmFtR3JvdXBzID0gT2JqZWN0LnZhbHVlcyh0aGlzLnNlbGVjdGVkUHJvZ3JhbXMgfHwge30pO1xuXG4gIHByb2dyYW1Hcm91cHMuZm9yRWFjaCgocHJvZ3JhbUdyb3VwOiBhbnkpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvZ3JhbUdyb3VwKSkgcmV0dXJuO1xuXG4gICAgcHJvZ3JhbUdyb3VwLmZvckVhY2goKHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRmllbGRzID0gcHJvZ3JhbT8uY3VzdG9tRmllbGRzIHx8IFtdO1xuICAgICAgY3VzdG9tRmllbGRzLmZvckVhY2goKHRhZzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGFnID0gdGFnPy50b0xvd2VyQ2FzZT8uKCk7XG4gICAgICAgIGlmIChsb3dlclRhZyAmJiAhZXhpc3RpbmdUYWdzU2V0Lmhhcyhsb3dlclRhZykpIHtcbiAgICAgICAgICBuZXdUYWdzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogdGFnLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtLmlkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV4aXN0aW5nVGFnc1NldC5hZGQobG93ZXJUYWcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gTWVyZ2UgbmV3IGFuZCBleGlzdGluZyB0YWdzXG4gIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MgPSBbXG4gICAgLi4ubmV3VGFncyxcbiAgICAuLi50aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLFxuICBdO1xufVxuXG5cbiAgZ2V0IGN1cnJlbnRVc2VySW5mbygpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKT8udXNlcjtcblxuICAgIHJldHVybiB7XG4gICAgICBtZW1iZXJfZW1haWw6IGN1cnJlbnRVc2VyPy5lbWFpbCxcbiAgICAgIG1lbWJlcl9pZDogY3VycmVudFVzZXIuaWQsXG4gICAgICBtZW1iZXJfbmFtZTogY3VycmVudFVzZXIubmFtZSxcbiAgICAgIG9yZ2FuaXNhdGlvbl9pZDogY3VycmVudFVzZXIub3JnYW5pc2F0aW9uX2lkLFxuICAgICAgdWlkOiBjdXJyZW50VXNlci51aWQsXG4gICAgICBfaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS5faWQsXG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlUHJvZ3JhbShwcm9ncmFtOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZFByb2dyYW1zKTtcbiAgICBrZXlzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc1trZXldLmZpbmRJbmRleChcbiAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbT8uaWQgPT09IHByb2dyYW0/LmlkXG4gICAgICApO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNba2V5XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcG9wdWxhdGVSZXNwb25zaWJpbGl0eURldGFpbHMoKSB7XG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICBjb25zdCByZXMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5RGV0YWlscztcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuaXNEdXBsaWNhdGUgPyBcIkNvcHkgb2YgXCIgKyByZXM/LnRpdGxlIDogcmVzPy50aXRsZTsgIFxuICAgIGNvbnN0IGN1cnJlbnRzVWVySW5mbyA9IHRoaXMuY3VycmVudFVzZXJJbmZvO1xuICAgIGNvbnN0IGFzc2lnbm9ySWQgPSB0aGlzLmlzRHVwbGljYXRlID8gY3VycmVudHNVZXJJbmZvLnVpZCA6IHJlcz8uYXNzaWdub3JJZDtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5SWQgPSByZXM/LmlkO1xuXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0gPSB7XG4gICAgICBhc3NpZ25vcnM6IHtcbiAgICAgICAgZW5hYmxlOiBmYWxzZSxcbiAgICAgICAgbGlzdDpcbiAgICAgICAgICB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25vcnNMaXN0LCBbYXNzaWdub3JJZF0sICd1aWQnKVxuICAgICAgICAgICAgPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbm9yc0xpc3QsIFthc3NpZ25vcklkXSwgJ3VpZCcpXG4gICAgICAgICAgICA6IFtjdXJyZW50c1VlckluZm9dLFxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNpYmlsaXR5OiB7XG4gICAgICAgIG5hbWU6IHRpdGxlLFxuICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVzPy5rZXksXG4gICAgICB9LFxuICAgICAgYXNzaWduZWVzOiB7XG4gICAgICAgIHdob0NhbkNvbXBsZXRlOiByZXM/LmFzc2lnbmVlPy50eXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxpc3Q6IHRoaXMuc2V0TGlzdCh0aGlzLmFzc2lnbmVlc0xpc3QsIHJlcz8uYXNzaWduZWU/LnVzZXJJZCwgJ3VpZCcpLFxuICAgICAgfSxcbiAgICAgIGFzc2lnbmVlR3JvdXBzOiB7XG4gICAgICAgIHdob0NhbkNvbXBsZXRlOiByZXM/LmFzc2lnbmVlPy50eXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGxpc3Q6IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmdyb3VwQXNzaWduZWVMaXN0LFxuICAgICAgICAgIHJlcz8uYXNzaWduZWU/LnVzZXJHcm91cElkLFxuICAgICAgICAgICd1aWQnLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGFsbG93RWRpdER1ZURhdGU6IHJlcz8uYWxsb3dFZGl0RHVlRGF0ZSxcbiAgICAgIGZyZXF1ZW5jeTogcmVzPy5mcmVxdWVuY3ksXG4gICAgICBkZXNjcmlwdGlvbjogcmVzPy5ub3RlcyxcbiAgICAgIG9iamVjdGl2ZTogcmVzPy5vYmplY3RpdmUsXG4gICAgICByYzogdGhpcy5zZXRMaXN0KFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QsXG4gICAgICAgIHJlcy5yZXNwb25zaWJpbGl0eUNlbnRlcj8uaWQsXG4gICAgICAgICdyY2lkJ1xuICAgICAgKSxcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTpcbiAgICAgIHJlcy5yZXNwb25zaWJpbGl0eUNlbnRlcj8udHlwZSA9PT0gJ2FsbCcgPyAxOiAwLFxuICAgICAgY2F0ZWdvcnk6IHJlcz8ucHJvZ3JhbV9jYXRfaWRzPy5sZW5ndGhcbiAgICAgICAgPyByZXM/LmNhdGVnb3J5X2lkc19hcnJheS5maWx0ZXIoXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+ICFyZXMucHJvZ3JhbV9jYXRfaWRzPy5pbmNsdWRlcyhlbGUpXG4gICAgICAgICAgKVxuICAgICAgICA6IHJlcz8uY2F0ZWdvcnlfaWRzX2FycmF5LFxuICAgICAgcHJvZ3JhbV9zZWxlY3RlZF9pZHM6IHJlcz8uY2F0ZWdvcnlfaWQ/LnNwbGl0KCcsJykgPz8gW10sXG4gICAgICBjYXRlZ29yeV9pZDogcmVzPy5jYXRlZ29yeV9pZCA/PyAnJyxcblxuICAgICAgcHJvZ3JhbTogcmVzPy5wcm9ncmFtRGV0YWlscz8uY2F0ZWdvcnlfaWRcbiAgICAgICAgPyBbcmVzPy5wcm9ncmFtRGV0YWlsc11cbiAgICAgICAgOiBbXSxcbiAgICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogcmVzPy5jaGVja3BvaW50X2Rlc2NyaXB0aW9uLFxuICAgICAgY3VzdG9tVGFnczogcmVzPy50YWdzICxcbiAgICAgIGNoZWNrcG9pbnRzOiByZXM/LmNoZWNrcG9pbnRfZGV0YWlsc1xuICAgICAgICA/IEpTT04ucGFyc2UocmVzPy5jaGVja3BvaW50X2RldGFpbHMpXG4gICAgICAgIDogJycsXG4gICAgICByZXZpZXdlcnM6IHtcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OlxuICAgICAgICAgIHJlcz8ucmV2aWV3ZXI/LnR5cGUgPT0gJ3NlcXVlbnRpYWwnID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IHJlcz8ucmV2aWV3ZXI/LmZyZXF1ZW5jeT8uY29tcGxldGVCeSA/PyAyLFxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IHJlcz8ucmV2aWV3ZXI/LmZyZXF1ZW5jeT8uZW5kQWZ0ZXIgPz8gMixcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDogdGhpcy5zZXRMaXN0KHRoaXMucmV2aWV3ZXJzTGlzdCwgcmVzPy5yZXZpZXdlcj8udXNlcklkLCAndWlkJyksXG4gICAgICB9LFxuXG4gICAgICBncm91cFJldmlld2Vyczoge1xuICAgICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IHJlcz8ucmV2aWV3ZXI/LnR5cGUgPT0gJ3NlcXVlbnRpYWwnID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6IHJlcz8ucmV2aWV3ZXI/LmZyZXF1ZW5jeT8uY29tcGxldGVCeSA/PyAyLFxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IHJlcz8ucmV2aWV3ZXI/LmZyZXF1ZW5jeT8uZW5kQWZ0ZXIgPz8gMixcbiAgICAgICAgfSxcbiAgICAgICAgbGlzdDogdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuZ3JvdXBSZXZpZXdlckxpc3QsXG4gICAgICAgICAgcmVzPy5yZXZpZXdlcj8udXNlckdyb3VwSWQsXG4gICAgICAgICAgJ3VpZCcsXG4gICAgICAgICksXG4gICAgICB9LFxuXG4gICAgICBvdmVyc2VlcnM6IHtcbiAgICAgICAgbGlzdDogcmVzPy5vdmVyc2VlclxuICAgICAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgICB0aGlzLm92ZXJzZWVyc0xpc3QsXG4gICAgICAgICAgICAgIHJlcz8ub3ZlcnNlZXI/LnN1Y2Nlc3M/LnVzZXJJZCxcbiAgICAgICAgICAgICAgJ3VpZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IFtdLFxuICAgICAgICBub3RpZnlMaXN0OiByZXM/Lm92ZXJzZWVyPy5mYWlsPy51c2VySWRcbiAgICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0LFxuICAgICAgICAgICAgICByZXM/Lm92ZXJzZWVyPy5mYWlsPy51c2VySWQsXG4gICAgICAgICAgICAgICd1aWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXSxcbiAgICAgIH0sXG4gICAgICBmb3JtYXRBbmRFdmlkZW5jZToge1xuICAgICAgICBmb3JtYXRSZXF1aXJlZDpcbiAgICAgICAgICByZXM/LmV2aWRlbmNlPy5mb3JtYXQ/LmRhdGE/Lmxlbmd0aCA+IDAgXG4gICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgIGZvcm1hdEZpbGVzOiByZXMuZXZpZGVuY2U/LmZvcm1hdD8udHlwZSA9PT0gJ2ZpbGUnID8gcmVzPy5ldmlkZW5jZT8uZm9ybWF0Py5kYXRhIDogW10sXG4gICAgICAgIGZvcm1hdExpbmtzOiByZXM/LmV2aWRlbmNlPy5mb3JtYXQ/LnR5cGUgPT09ICdsaW5rJyA/IHJlcz8uZXZpZGVuY2U/LmZvcm1hdD8uZGF0YSA6IFtdLFxuICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiByZXM/LmV2aWRlbmNlPy5yZXF1aXJlZCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhc3N1cmFuY2VMaXN0OiBbXSxcbiAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiBbXSxcbiAgICAgIHJpc2tDbGFzczogcmVzPy5yaXNrQ2xhc3MsXG4gICAgICBzZWxlY3RlZEdSQ09iamVjdHM6IHJlcz8ubWV0YT8ubGlua2VkRW50aXRpZXM/LmdyY09iamVjdHMgPz8gW10sXG5cbiAgICB9O1xuICAgIGNvbnN0IEdSQ19PQkpFQ1RTID0gcmVzPy5tZXRhPy5saW5rZWRFbnRpdGllcz8uZ3JjT2JqZWN0cyA/PyBbXTtcbiAgICAgaWYoR1JDX09CSkVDVFM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucG9wdWxhdGVHUkNPYmplY3REZXRhaWxzKEdSQ19PQkpFQ1RTKTtcbiAgICB9XG4gICAgdGhpcy5wb3B1bGF0ZUZyZXF1ZW5jeURldGFpbHMocmVzLmZyZXF1ZW5jeSk7XG4gICAgdGhpcy5wb3B1bGF0ZVByb2dyYW1EZXRhaWxzKHJlcyk7XG4gICAgdGhpcy5nZXRFZGl0TW9yZU9wdGlvbnMocmVzKTtcbiAgICB0aGlzLnBvcHVsYXRlZm9ybWF0RGV0YWlscyhyZXMpO1xuICB9XG5cbiAgLy9wb3B1bGF0ZSBmb3JtYXQgRGV0YWlsc1xuICBwb3B1bGF0ZWZvcm1hdERldGFpbHMocmVzOiBhbnkpIHtcbiAgICBjb25zdCBmb3JtYXRPYmplY3Q6IGFueVtdID0gW11cbiAgICBjb25zdCBmb3JtYXRGaWxlcyA9IHJlcz8uZXZpZGVuY2U/LmZvcm1hdD8uZGF0YSA/PyBbXTtcbiAgICBpZihmb3JtYXRGaWxlcz8ubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9ybWF0RmlsZXMuZm9yRWFjaCgoZmlsZTogYW55KSA9PiB7XG4gICAgICBmb3JtYXRPYmplY3QucHVzaCgge1xuICAgICAgICBmaWxlX3VybF9wYXRoOiBmaWxlPy5maWxlUGF0aCA/PyAnJyxcbiAgICAgICAgbmFtZTogZmlsZT8ubmFtZSA/PyAnJyxcbiAgICAgICAgb3JnX2ZpbGU6IGZpbGU/Lm5hbWUgPz8gJycsXG4gICAgICAgIGZpbGVfbmFtZTogZmlsZT8ubmFtZSA/PyAnJyxcbiAgICAgICAgdHlwZTogZmlsZT8udHlwZSA/PyAnJ1xuICAgICAgfSlcbiAgICB9KVxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdEZpbGVzID0gZm9ybWF0T2JqZWN0O1xuICB9XG5cbiAgLy9Qb3B1bGF0ZSBQcm9ncmFtIERldGFpbHNcbiBwb3B1bGF0ZVByb2dyYW1EZXRhaWxzKHJlczogYW55KSB7XG4gIGNvbnN0IGRhdGEgPSByZXM/Lm1ldGE/LmxpbmtlZEVudGl0aWVzPy5wcm9ncmFtcyA/PyB7fTtcbiAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncyA9IGRhdGE/LnRhZ3MgPz8gW107XG4gIHRoaXMuc2VsZWN0ZWRQcm9ncmFtcyA9IHRoaXMubWFwTGlua2VkUHJvZ3JhbXMoZGF0YSlcbiAgaWYoT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZFByb2dyYW1zKS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5vbkl0ZW1zU2VsZWN0ZWRDaGFuZ2UodGhpcy5zZWxlY3RlZFByb2dyYW1zKTtcbiAgfVxuIH1cblxuICBwb3B1bGF0ZUZyZXF1ZW5jeURldGFpbHMoZnJlcXVlbmN5OiBhbnkpIHtcbiAgICBjb25zdCBnZXRQYXR0ZXJuID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmNyZWF0ZUZyZXF1ZW5jeVBhdHRlcm4oZnJlcXVlbmN5KTtcbiAgICBjb25zdCBsaWZlY3ljbGVEZXRhaWxzID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmdldExpZmVjeWNsZVBhdHRlcm4oZnJlcXVlbmN5KTtcbiAgICBmcmVxdWVuY3kucGF0dGVybiA9IGdldFBhdHRlcm47XG4gICAgZnJlcXVlbmN5LmxpZmVjeWNsZV9kZXRhaWxzID0gbGlmZWN5Y2xlRGV0YWlscy5wYXR0ZXJuO1xuICAgIGZyZXF1ZW5jeS5zdGFydF9vZl9kYXlfdXRjID0gbGlmZWN5Y2xlRGV0YWlscy5zdGFydEZyb207XG4gICAgaWYodGhpcy5yZXNwb25zaWJpbGl0eURldGFpbHM/Lm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5KSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGV0YWlscy5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eSA9ICB7XG4gICAgICAgIC4uLnRoaXMucmVzcG9uc2liaWxpdHlEZXRhaWxzPy5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eSxcbiAgICAgICAgLi4uZnJlcXVlbmN5Lm9uQ29tcGxldGVcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5mcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihmcmVxdWVuY3kpO1xuICAgIHRoaXMuZ2V0RnJlcXVlbmN5UGxhY2Vob2xkZXIoZnJlcXVlbmN5KTtcbiAgfVxuXG4gICBtYXBMaW5rZWRQcm9ncmFtcyhwcm9ncmFtczoge1xuICAgIGxpbmtlZDogUmVjb3JkPHN0cmluZywgbnVtYmVyW10+LFxuICAgIGRhdGE6IGFueVtdXG4gIH0pOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4ge1xuICAgIC8vIEJ1aWxkIGEgbG9va3VwIGZvciBmYXN0IGlkIOKGkiBvYmplY3QgbWFwcGluZ1xuICAgIGNvbnN0IHByb2dyYW1CeUlkID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcbiAgICBmb3IgKGNvbnN0IHByb2dyYW0gb2YgcHJvZ3JhbXMuZGF0YSkge1xuICAgICAgcHJvZ3JhbUJ5SWQuc2V0KHByb2dyYW0uaWQsIHByb2dyYW0pO1xuICAgIH1cbiAgXG4gICAgLy8gTWFwIGVhY2ggbGlua2VkIElEIGdyb3VwIHRvIGZ1bGwgcHJvZ3JhbSBvYmplY3RzXG4gICAgY29uc3QgbWFwcGVkOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IG9yaWdpbklkIGluIHByb2dyYW1zLmxpbmtlZCkge1xuICAgICAgbWFwcGVkW29yaWdpbklkXSA9IHByb2dyYW1zLmxpbmtlZFtvcmlnaW5JZF1cbiAgICAgICAgLm1hcChpZCA9PiBwcm9ncmFtQnlJZC5nZXQoaWQpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pOyAvLyByZW1vdmUgdW5kZWZpbmVkIGlmIGlkIG5vdCBmb3VuZFxuICAgIH1cbiAgXG4gICAgcmV0dXJuIG1hcHBlZDtcbiAgfVxuXG4gIHBvcHVsYXRlR1JDT2JqZWN0RGV0YWlscyhHUkNfT0JKRUNUUzogYW55KSB7XG4gICAgaWYoR1JDX09CSkVDVFM/Lmxlbmd0aCA+IDApIHtcbiAgICAgdGhpcy5ncmNTZXJ2aWNlLmdldEdSQ09iamVjdEJ5R1JDSWQoR1JDX09CSkVDVFMubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uZ3JjaWQpLmpvaW4oJywnKSkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cyA9IGRhdGFcbiAgICAgIHRoaXMuc2V0T3RoZXJHUkNUeXBlc0Zvcm1hdGUoKTtcbiAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxufSIsIjxkaXYgY2xhc3M9XCJ3b3JrZmx3LWNvbXBsaWFuY2VcIiAqbmdJZj1cIiFzaG93U21pbGV5XCI+XG4gIDwhLS0gQmVoYWxmIC0tPlxuICA8ZGl2ICpuZ0lmPVwibW9kZSAhPT0gJ0VESVQnXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25vcnMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWdub3JzJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25vcnMnXG4gICAgICBcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuaW1fY3JlYXRpbmdcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25vcnMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbm9ycydcbiAgICAgICAgXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPkkgYW0gY3JlYXRpbmcgdGhpcyByZXNwb25zaWJpbGl0eSBvbiBiZWhhbGYgb2Ygc29tZW9uZSBlbHNlXG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2ggW25nVmFsdWVdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5lbmFibGVcIiAobmdWYWx1ZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5lbmFibGUgPSAkZXZlbnQ7XG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdXG4gICAgICAgICAgICBcIj5cbiAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25vcnMnXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2Fzc2lnbm9ycycsIHRydWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV2hvIGlzIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyB0aGlzIHJlc3BvbnNpYmlsaXR5P1wiIHJlYWRvbmx5XG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5lbmFibGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbm9ycydcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgYl91c2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5zbGljZSgwLCAxKVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWdub3JzJywgYl91c2VyKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJiX3VzZXIubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBiX3VzZXIubWVtYmVyX25hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImJlaGFsZi5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBiX3VzZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/LnNsaWNlKDAsMilcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbm9ycycsYl91c2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2JfdXNlci5tZW1iZXJfbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA+IDJcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiYmVoYWxmLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbm9ycydcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25vcnMnLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXBwLXBvcG92ZXIgI2JlaGFsZiBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgYl91c2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0IHwgc2xpY2UgOiAyO1xuICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWdub3JzJywgYl91c2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBiX3VzZXIubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxwICpuZ0lmPVwiaW52YWxpZFR5cGUgPT09ICd3aG9tJ1wiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxuICAgICAgICAgIFBsZWFzZSBzZWxlY3QgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhpcyByZXNwb25zaWJpbGl0eS5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gV2hhdCAtLT5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyYW1ld29yaydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXNwb25zaWJpbGl0eU5hbWUnICYmXG4gICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlxuICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJlc3BvbnNpYmlsaXR5Py5uYW1lLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgIWZvY3VzLnJlc3BvbnNpYmlsaXR5TmFtZVxuICAgICAgXCI+XG4gICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLndoYXRcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXNwb25zaWJpbGl0eT8ubmFtZS50cmltKCkgPT09ICcnIHx8XG4gICAgICAgICAgZm9jdXMucmVzcG9uc2liaWxpdHlOYW1lXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXNwb25zaWJpbGl0eT8ubmFtZS50cmltKCkgIT09ICcnICYmXG4gICAgICAgICAgIWZvY3VzLnJlc3BvbnNpYmlsaXR5TmFtZVxuICAgICAgICBcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgV2hhdD8gPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIlxuICAgICAgICAgICAgICBpc0ZyYW1ld29ya0F2YWlsYWJsZSAmJlxuICAgICAgICAgICAgICBtb2RlICE9PSAnRURJVCcgJiZcbiAgICAgICAgICAgICAgb3BlbmVkRnJvbSAhPT0gJ1JJU0tfVFJFQVRNRU5UJyAmJlxuICAgICAgICAgICAgICBhc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF90eXBlICE9PSAnY29tcGxpYW5jZV9hdWRpdCdcbiAgICAgICAgICAgIFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmFtZXdvcmsnLCB0cnVlKVwiIGNsYXNzPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICBTZWxlY3QgRnJvbSBBIGZyYW1ld29ya1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVzcG9uc2liaWxpdHk/LmtleVJlc3BvbnNpYmlsaXR5XCIgY2xhc3M9XCJpbmRpY2F0b3JcIlxuICAgICAgICAgIFthcHBUb29sdGlwXT1cIidUaGlzIHJlc3BvbnNpYmlsaXR5IGlzIG1hcmtlZCBhcyBrZXkgcmVzcG9uc2liaWxpdHkuJ1wiIHBsYWNlbWVudD1cImJvdHRvbVwiIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlYTcwOzwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXQgKm5nSWY9XCJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVzcG9uc2liaWxpdHk/Lm5hbWUudHJpbSgpID09ICcnIHx8ICFpc0VkaXRXaGF0XG4gICAgICAgICAgXCIgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJyZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZVwiIHBsYWNlaG9sZGVyPVwiV2hhdCBpcyB0aGUgcmVzcG9uc2liaWxpdHk/XCJcbiAgICAgICAgICAoY2hhbmdlKT1cIndoYXRDaGFuZ2VkKCRldmVudClcIiAoZm9jdXNpbik9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXNwb25zaWJpbGl0eU5hbWUnLCB0cnVlKVwiXG4gICAgICAgICAgKGZvY3Vzb3V0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiIChjbGlja091dHNpZGUpPVwidGVzdEZ1bmN0aW9uKClcIiAjd2hhdCAvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXNwb25zaWJpbGl0eT8ubmFtZS50cmltKCkgIT0gJycgJiYgaXNFZGl0V2hhdFxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPnt7XG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eT8ubmFtZVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfdHlwZSAhPT0gJ2NvbXBsaWFuY2VfYXVkaXQnXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FZGl0V2hhdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwICpuZ0lmPVwiaW52YWxpZFR5cGUgPT09ICd3aGF0J1wiIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxuICAgICAgICAgIFBsZWFzZSBlbnRlciBhIG5hbWUgZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaC1yb3cgYWxpZ24tcmlnaHRcIj5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaCBbbmdWYWx1ZV09XCJyZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHk/LmtleVJlc3BvbnNpYmlsaXR5XCIgKG5nVmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5rZXlSZXNwb25zaWJpbGl0eSA9ICRldmVudFxuICAgICAgICAgICAgXCI+S2V5IFJlc3BvbnNpYmlsaXR5XG4gICAgICAgICAgPC9hcHAtY3Mtc3dpdGNoPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFdobyAtLT5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25lZXMnICYmXG4gICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlxuICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcydcbiAgICAgIFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jYXNlX2Fzc2lnbmVlc1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcbiAgICAgICAgXCIgLz5cblxuICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJ1xuICAgICAgICBcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdC1kdWUtZGF0ZVwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5XaG8/IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFsbG93RWRpdER1ZURhdGVGZWF0dXJlRmxhZyAmJiBmYWxzZVwiIGNsYXNzPVwic3dpdGNoLXJvdyBhbGlnbi1yaWdodFwiPlxuICAgICAgICAgICAgPGFwcC1jcy1zd2l0Y2ggW25nVmFsdWVdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFsbG93RWRpdER1ZURhdGVcIlxuICAgICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJyZXNwb25zaWJpbGl0eUZvcm0uYWxsb3dFZGl0RHVlRGF0ZSA9ICRldmVudFwiPkFMTE9XIEFTU0lHTkVFIFRPIEVESVQgQ09NUExFVEVEIFdPUks8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICdJZiBpdOKAmXMgZW5hYmxlZCwgdGhlIGFzc2lnbmVlIHdpbGwgaGF2ZSB0aGUgb3B0aW9uIHRvIG1vZGlmeSBhIHByZXZpb3VzbHkgY29tcGxldGVkIGR1ZSBkYXRlLidcbiAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+XG4gICAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IHZ4LW10LTBcIiAqbmdJZj1cIlxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAoIWZlYXR1cmVGbGFnX2dyb3VwcyB8fFxuICAgICAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBpcyByZXNwb25zaWJsZSBmb3IgY29tcGxldGluZyB0aGUgcmVzcG9uc2liaWxpdHk/XCIgcmVhZG9ubHkgLz5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGVfdXNlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8uc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsIGVfdXNlcilcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiZV91c2VyLm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgZV91c2VyLm1lbWJlcl9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbmJnXCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiYXNzaWduZWVzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiICpuZ0lmPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICByZW1vdmUoJ2Fzc2lnbmVlcycsIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0WzBdKVxuICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cInVzZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICt7eyByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwXG4gICAgICAgICAgICAgIFwiPiY8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnZ3JvdXBhc3NpZ25lZXMnLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0WzBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0WzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdFswXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJncm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCIgW2NsYXNzLm1vcmUtb25lXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5sZW5ndGg+MVwiIFtjbGFzcy5wbHVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5sZW5ndGg+MlwiICpuZ0lmPVwiIWZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBlX3VzZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/LnNsaWNlKDAsMilcIj48aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsZV91c2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VfdXNlci5tZW1iZXJfbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDJcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiYXNzaWduZWVzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCIgKm5nSWY9XCJmZWF0dXJlRmxhZ19ncm91cHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1pbm5lclwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDBcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycscmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3RbMF0pXCIgPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj48c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwXCI+e3tyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZX19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwidXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+ICt7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggLTF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMCAmJiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwXCIgPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoIWFsbEdyb3VwQXNzaWduZWUgfHwgbW9kZSAhPT0gJ0VESVQnKVwiIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ2dyb3VwYXNzaWduZWVzJyxyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0WzBdKVwiID4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdFswXT8uZ3JvdXBfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj48c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwXCI+e3tyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0WzBdPy5ncm91cF9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnRcIiBhcHBQb3BvdmVyIChjbGljayk9XCJncm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcydcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXBwLXBvcG92ZXIgI3VzZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGVfdXNlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdCB8IHNsaWNlIDogMVxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgZV91c2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBlX3VzZXIubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjZ3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGdyb3VwIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDFcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFmZWF0dXJlRmxhZ19ncm91cHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChmZWF0dXJlRmxhZ19ncm91cHMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCFhbGxHcm91cEFzc2lnbmVlIHx8IG1vZGUgIT09ICdFRElUJykpXG4gICAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2dyb3VwYXNzaWduZWVzJywgZ3JvdXApXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmdyb3VwX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG5cbiAgICAgICAgPHAgKm5nSWY9XCJpbnZhbGlkVHlwZSA9PT0gJ3dobydcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAgICBQbGVhc2Ugc2VsZWN0IHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIGNvbXBsZXRpbmcgdGhpc1xuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5LlxuICAgICAgICA8L3A+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNHcm91cEFzc2lnbmVkXCI+XG4gICAgICAgICAgPGFwcC1jcy1yYWRpbyAqbmdJZj1cIm1vZGUgIT09ICdFRElUJ1wiIChjaGVja2VkRXZlbnQpPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9ICdBTEwnXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPT0gJ0FMTCdcIiBbbmFtZV09XCInd2hhdCdcIj5BTEwgU0VMRUNURUQgUEVSU09OUyBORUVEXG4gICAgICAgICAgICBUTyBDT01QTEVURSBUSElTPGkgY2xhc3M9XCJpY29uc1wiIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgc2VwYXJhdGUgcmVzcG9uc2liaWxpdGllcyB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggcGVyc29uLidcbiAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPlxuICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgIDxhcHAtY3MtcmFkaW8gKm5nSWY9XCJtb2RlICE9PSAnRURJVCdcIiAoY2hlY2tlZEV2ZW50KT1cIlxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gJ0FOWV9PTkUnXG4gICAgICAgICAgICBcIiBbY2hlY2tlZF09XCJyZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTllfT05FJ1wiIFtuYW1lXT1cIid3aGF0J1wiPkFOWSBTRUxFQ1RFRCBQRVJTT05cbiAgICAgICAgICAgIENBTiBDT01QTEVURSBUSElTXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCBvbmx5IG9uZSByZXNwb25zaWJpbGl0eSB3aWxsIGJlIGNyZWF0ZWQuJ1xuICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+XG4gICAgICAgICAgPC9hcHAtY3MtcmFkaW8+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3dpdGNoLXJvdyBhbGlnbi1yaWdodFwiICpuZ0lmPVwiXG4gICAgICAgICAgICAgIG1vZGUgPT0gJ0VESVQnICYmXG4gICAgICAgICAgICAgICghZmVhdHVyZUZsYWdfZ3JvdXBzIHx8XG4gICAgICAgICAgICAgICAgKHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpKVxuICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaCAobmdWYWx1ZUNoYW5nZSk9XCJvcGVuQXNzaWduZWVDaGFuZ2VDb25maXJtYXRpb24oJGV2ZW50KVwiIFtuZ1ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPT0gJ0FOWV9PTkUnXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICBBTlkgU0VMRUNURUQgUEVSU09OIENBTiBDT01QTEVURSBUSElTXG4gICAgICAgICAgICA8L2FwcC1jcy1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8YXBwLXBvcG92ZXIgI2Fzc2lnbmVlcyBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgZV91c2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0IHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzaWduZWVzJywgZV91c2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBlX3VzZXIubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBXaGVuPyAtLT5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knICYmXG4gICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlxuICAgICAgICAhcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXG4gICAgICBcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMud2hlblwiIGFsdD1cImltXCIgKm5nSWY9XCIhcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCIgLz5cblxuICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmZyZXF1ZW5jeSAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5JyAmJlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZnJlcXVlbmN5ICE9ICcnICYmXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgIT0gJzV+MH4wfjAnXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5XaGVuPyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmZyZXF1ZW5jeSA9PSAnJyB8fFxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgPT0gJzV+MH4wfjAnXG4gICAgICAgICAgXCIgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiIFtwbGFjZWhvbGRlcl09XCJmcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICByZWFkb25seSAvPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmZyZXF1ZW5jeSAhPSAnJyAmJlxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgIT09ICc1fjB+MH4wJ1xuICAgICAgICAgIFwiIGNsYXNzPVwic2VsZWN0ZWQgYnV0dG9uLXNlY1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cImZyZXF1ZW5jeVBsYWNlaG9sZGVyXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCAqbmdJZj1cImludmFsaWRUeXBlID09PSAnd2hlbidcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAgICBQbGVhc2Ugc2VsZWN0IHRoZSBmcmVxdWVuY3kgb2Ygb2NjdXJyZW5jZSBmb3IgdGhpcyByZXNwb25zaWJpbGl0eS5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTm90ZXMgLS0+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdub3RlcydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdub3RlcycgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiXG4gICAgICAgIGNoZWNrQmxhbmsocmVzcG9uc2liaWxpdHlGb3JtPy5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJyAmJlxuICAgICAgICAhZm9jdXMuZGVzY3JpcHRpb25cbiAgICAgIFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5ub3Rlc1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICBjaGVja0JsYW5rKHJlc3BvbnNpYmlsaXR5Rm9ybT8uZGVzY3JpcHRpb24pLnRyaW0oKSA9PT0gJycgfHxcbiAgICAgICAgICBmb2N1cy5kZXNjcmlwdGlvblxuICAgICAgICBcIiAvPlxuXG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgKm5nSWY9XCJcbiAgICAgICAgICBjaGVja0JsYW5rKHJlc3BvbnNpYmlsaXR5Rm9ybT8uZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgICAhZm9jdXMuZGVzY3JpcHRpb25cbiAgICAgICAgXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+Tm90ZXM8L2xhYmVsPlxuICAgICAgICA8dmNvbXBseS1lZGl0b3IgWyhuZ01vZGVsKV09XCJyZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb25cIiBbZWRpdG9yQ29uZmlnXT1cIntcbiAgICAgICAgICAgIG1vZGU6ICdwcmltZScsXG4gICAgICAgICAgICBjb2xvclBhbGV0dGU6IHRydWUsXG4gICAgICAgICAgICBsaW5rOiB0cnVlLFxuICAgICAgICAgICAgaWQ6ICdub3RlcycsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjpcbiAgICAgICAgICAgICAgJ0FkZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5J1xuICAgICAgICAgIH1cIj48L3Zjb21wbHktZWRpdG9yPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gT2JqZWN0aXZlIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uT0JKRUNUSVZFXCIgW2F0dHIuaWRdPVwiJ09CSkVDVElWRSdcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdvYmplY3RpdmUnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnb2JqZWN0aXZlJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgY2hlY2tCbGFuayhyZXNwb25zaWJpbGl0eUZvcm0/Lm9iamVjdGl2ZSkudHJpbSgpICE9PSAnJyAmJlxuICAgICAgICAhZm9jdXMub2JqZWN0aXZlXG4gICAgICBcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMub2JqZWN0aXZlc1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICBjaGVja0JsYW5rKHJlc3BvbnNpYmlsaXR5Rm9ybT8ub2JqZWN0aXZlKS50cmltKCkgPT09ICcnIHx8XG4gICAgICAgICAgZm9jdXMub2JqZWN0aXZlXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgY2hlY2tCbGFuayhyZXNwb25zaWJpbGl0eUZvcm0/Lm9iamVjdGl2ZSkudHJpbSgpICE9PSAnJyAmJlxuICAgICAgICAgICFmb2N1cy5vYmplY3RpdmVcbiAgICAgICAgXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPk9iamVjdGl2ZTwvbGFiZWw+XG4gICAgICAgIDx2Y29tcGx5LWVkaXRvciBbKG5nTW9kZWwpXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmVcIiBbZWRpdG9yQ29uZmlnXT1cIntcbiAgICAgICAgICAgIG1vZGU6ICdwcmltZScsXG4gICAgICAgICAgICBjb2xvclBhbGV0dGU6IHRydWUsXG4gICAgICAgICAgICBpZDogJ29iamVjdGl2ZScsXG4gICAgICAgICAgICBsaW5rOiB0cnVlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6XG4gICAgICAgICAgICAgICdUaGlzIG9wdGlvbiBsZXRzIHlvdSBzcGVjaWZ5IGFuIG9iamVjdGl2ZSBmb3IgdGhlIHJlc3BvbnNpYmlsaXR5LidcbiAgICAgICAgICB9XCI+PC92Y29tcGx5LWVkaXRvcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJlc3BvbnNpYmlsaXR5IENlbnRlciAtLT5cbiAgPGRpdiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwibW9yZU9wdGlvbnM/LlJDXCIgW2F0dHIuaWRdPVwiJ1JDJ1wiXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoID4gMCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjJ1xuICAgICAgXCI+XG4gICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLnJlc3BvbnNpYmlsaXR5X2NlbnRlclwiIGFsdD1cIlwiXG4gICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoID09IDAgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcIiAvPlxuXG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyYydcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmVzcG9uc2liaWxpdHkgQ2VudGVyIDwvbGFiZWw+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCJcbiAgICAgICAgICAgIGFyaWEtcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIHJlc3BvbnNpYmlsaXR5IGNlbnRlciBvciB0aGUgcmVzcG9uc2liaWxpdHkgY2VudGVycyBmb3IgdGhpcyByZXNwb25zaWJpbGl0eS5cIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsdHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSZXNwb25zaWJpbGl0eSBDZW50ZXIocylcIiByZWFkb25seT4gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgW2NsYXNzLnJlYWRPbmx5XT1cIm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmMgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yYz8uc2xpY2UoMCwgMSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm9wZW5lZEZyb20gIT09ICdSSVNLX1RSRUFUTUVOVCdcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicmM/Lml0ZW1fbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyByYz8uaXRlbV9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDFcIiBhcHBQb3BvdmVyIChjbGljayk9XCJyY1BvcG92ZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5yYz8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCIgW2NsYXNzLm1vcmUtb25lXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aD4xXCIgW2NsYXNzLnBsdXNdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgcmMgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yYz8uc2xpY2UoMCwyKVwiPjxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdyYycscmMpXCIgKm5nSWY9XCJvcGVuZWRGcm9tICE9PSAnUklTS19UUkVBVE1FTlQnXCI+JiN4ZTkwZDs8L2k+e3tyYz8uaXRlbV9uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJjPy5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInJjLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tyZXNwb25zaWJpbGl0eUZvcm0/LnJjPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmMnICYmIG9wZW5lZEZyb20gIT09ICdSSVNLX1RSRUFUTUVOVCdcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjcmNQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCByYyBvZiByZXNwb25zaWJpbGl0eUZvcm0/LnJjIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgcmMuaXRlbV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJcbiAgICAgICAgICAgIGlzUmVzcG9uc2liaWxpdHlSY0xpbmtFbmFibGVkICYmXG4gICAgICAgICAgICAobW9kZSAhPSAnRURJVCcgfHwgcmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoIDw9IDEpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPCEtLSA8YXBwLWNzLXJhZGlvPjxkaXYgW2FwcFRvb2x0aXBdPVwiJ0NyZWF0ZSBzZXBhcmF0ZSByZXNwb25zaWJpbGl0aWVzIGZvciBlYWNoIHJlc3BvbnNpYmlsaXR5IGNlbnRlcidcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj5DUkVBVEUgU0VQQVJBVEUgUkVTUE9OU0lCSUxJVElFUyBGT1IgRUFDSCBSRVNQT05TSUJJTElUWSBDRU7igKY8L2Rpdj48aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiJ0lmIHNlbGVjdGVkLCBzZXBhcmF0ZSByZXNwb25zaWJpbGl0aWVzIHdpbGwgYmUgY3JlYXRlZCBmb3IgZWFjaCBSZXNwb25zaWJpbGl0eSBDZW50ZXIuJ1wiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTFmOzwvaT48L2FwcC1jcy1yYWRpbz4gLS0+XG4gICAgICAgICAgPGFwcC1jcy1yYWRpbyBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIG1vZGUgPT0gJ0VESVQnICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPT09IDEgJiZcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoID4gMVxuICAgICAgICAgICAgXCIgW2NoZWNrZWRdPVwicmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID09PSAwXCIgW25hbWVdPVwiJ2ZmX3Jlc3BvbnNpYmlsaXR5X3JjX2xpbmsnXCJcbiAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwib25SY1R5cGVDaGFuZ2UoMClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYy1yYWRpby10ZXh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0NyZWF0ZSBzZXBhcmF0ZSByZXNwb25zaWJpbGl0aWVzIGZvciBlYWNoIHJlc3BvbnNpYmlsaXR5IGNlbnRlcnMnXG4gICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICBDUkVBVEUgU0VQQVJBVEUgUkVTUE9OU0lCSUxJVElFUyBGT1IgRUFDSCBSRVNQT05TSUJJTElUWSBDRU7igKZcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdJZiBzZWxlY3RlZCwgc2VwYXJhdGUgcmVzcG9uc2liaWxpdGllcyB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggUmVzcG9uc2liaWxpdHkgQ2VudGVyLidcbiAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPlxuICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgIDxhcHAtY3MtcmFkaW8gW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICBtb2RlID09ICdFRElUJyAmJlxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID09PSAxICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgIFwiIFtjaGVja2VkXT1cInJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gMVwiIFtuYW1lXT1cIidmZl9yZXNwb25zaWJpbGl0eV9yY19saW5rJ1wiXG4gICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cIm9uUmNUeXBlQ2hhbmdlKDEpXCI+RElTUExBWSBUSEUgU0FNRSBSRVNQT05TSUJJTElUWSBJTiBBTEwgUkVTUE9OU0lCSUxJVFkgQ0VOVEVSUzxpXG4gICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnSWYgc2VsZWN0ZWQsIHRoZSBzYW1lIHJlc3BvbnNpYmlsaXR5IHdpbGwgYmUgbGlua2VkIHRvIGVhY2ggUmVzcG9uc2liaWxpdHkgQ2VudGVyLidcbiAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPjwvYXBwLWNzLXJhZGlvPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByb2dyYW0gLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5QUk9HUkFNXCIgW2F0dHIuaWRdPVwiJ1BST0dSQU0nXCJcbiAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncHJvZ3JhbSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwcm9ncmFtJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGggPiAwICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAncHJvZ3JhbSdcbiAgICAgIFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jYXNlX2NhdGVnb3J5XCIgYWx0PVwiXCIgKm5nSWY9XCJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdwcm9ncmFtJykgJiZcbiAgICAgICAgICBhbGxQcm9nYW1TZWxlY3RlZD8ubGVuZ3RoID09IDBcbiAgICAgICAgXCIgLz5cblxuICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCIgKm5nSWY9XCJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Byb2dyYW0nKSB8fFxuICAgICAgICAgIGFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPiAwXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5Qcm9ncmFtPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwiYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwcm9ncmFtJywgdHJ1ZSlcIlxuICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgUHJvZ3JhbSBvciBQcm9ncmFtIENhdGVnb3JpZXMgdGhhdCB0aGlzIHJlc3BvbnNpYmlsaXR5IHJlbGF0ZXMgdG8uXCI+PC9kaXY+XG4gICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncHJvZ3JhbScsdHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSZXNwb25zaWJpbGl0eSBwcm9ncmFtKHMpXCIgcmVhZG9ubHk+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJhbGxQcm9nYW1TZWxlY3RlZD8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhaGlkZGVuTGlzdD8uaW5jbHVkZXMoJ1BST0dSQU0nKSAmJlxuICAgICAgICAgICAgICAgICAgIXByb2dyYW0/LmlzVmlld09ubHlQcm9ncmFtXG4gICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cInJlbW92ZSgncHJvZ3JhbScsIGFsbFByb2dhbVNlbGVjdGVkWzBdKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImFsbFByb2dhbVNlbGVjdGVkWzBdPy5uYW1lID8/ICctLSdcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBhbGxQcm9nYW1TZWxlY3RlZFswXT8ubmFtZVxuICAgICAgICAgICAgICAgID8/IFwiLS1cIiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJwcm9ncmFtLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCIgKm5nSWY9XCJhbGxQcm9nYW1TZWxlY3RlZD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGg+MVwiIFtjbGFzcy5wbHVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbT8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBwcm9ncmFtIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVwiPjxpIGNsYXNzPVwiaWNvbnNcIiAqbmdJZj1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIiAoY2xpY2spPVwicmVtb3ZlKCdwcm9ncmFtJyxwcm9ncmFtKVwiPiYjeGU5MGQ7PC9pPiB7e3Byb2dyYW0/Lm5hbWU/PyctLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLSAtIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW0/Lmxlbmd0aCA+IDJcIiBjbGFzcz1cImNvdW50XCIgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInByb2dyYW0ucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rIHt7cmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPiAtIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJwcm9ncmFtLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+KyB7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8ubGVuZ3RoIC0gMX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwcm9ncmFtJyAmJiAhaGlkZGVuTGlzdC5pbmNsdWRlcygnUFJPR1JBTScpXG4gICAgICAgICAgICBcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Byb2dyYW0nLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjcHJvZ3JhbSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgcHJvZ3JhbSBvZiBhbGxQcm9nYW1TZWxlY3RlZCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJwcm9ncmFtPy5uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tXCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFoaWRkZW5MaXN0Py5pbmNsdWRlcygnUFJPR1JBTScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhcHJvZ3JhbT8uaXNWaWV3T25seVByb2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncHJvZ3JhbScsIHByb2dyYW0pXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IHByb2dyYW0/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmN1c3RvbVRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5jdXN0b21UYWdzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFnPy5uYW1lPy50cmltKClcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+e3tcbiAgICAgICAgICAgICAgICB0YWc/Lm5hbWVcbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwidGFnLnZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7eyB0YWc/Lm5hbWUgfX1cIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9ybWF0ICYgRXZpZGVuY2UgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5GT1JNQVRFX0VWSURFTkNFXCJcbiAgICBbYXR0ci5pZF09XCInRk9STUFURV9FVklERU5DRSdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnZm9ybWF0ZV9ldmlkZW5jZSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdmb3JtYXRlX2V2aWRlbmNlJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgPGltZyAqbmdJZj1cIlxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPT0gZmFsc2UgJiZcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRGaWxlcy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzPy5sZW5ndGggPT0gMFxuICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5mb3JtYXRfZXZpZGVuY2VcIiBhbHQ9XCJpbVwiIC8+XG5cbiAgICAgIDxzdmcgKm5nSWY9XCJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXMubGVuZ3RoIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0TGlua3M/Lmxlbmd0aFxuICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGFwcC1mb3JtYXQtYW5kLWV2aWRlbmNlICh1cGRhdGVGaWxlcyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdmb3JtYXRlX2V2aWRlbmNlJywgJGV2ZW50KVwiIFttb2RlXT1cIidyZXNwb25zaWJpbGl0eSdcIlxuICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uZm9ybWF0QW5kRXZpZGVuY2VcIiBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbklkXCI+XG4gICAgICA8L2FwcC1mb3JtYXQtYW5kLWV2aWRlbmNlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFzc2Vzc21lbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJtb3JlT3B0aW9ucz8uQVNTRVNTTUVOVFwiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICBbYXR0ci5pZF09XCInQVNTRVNTTUVOVCdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnaXNBc3Nlc3NtZW50J1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2lzQXNzZXNzbWVudCcgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIj5cbiAgICAgIDxpbWcgKm5nSWY9XCIhcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIiBbc3JjXT1cIkFTU0VUUy5hc3Nlc3NtZW50c1wiIGFsdD1cImltXCIgLz5cblxuICAgICAgPHN2ZyAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5BU1NFU1NNRU5UUzwvbGFiZWw+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIiBjbGFzcz1cInNlbGVjdFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSk7IGlzQXNzZXNzbWVudCA9IHRydWVcbiAgICAgICAgICAgIFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGFuIGFzc2Vzc21lbnQgZm9yIHRoaXMgcmVzcG9uc2liaWxpdHlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoXCIgcmVhZG9ubHkgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxuICAgICAgICAgICAgPGkgKm5nSWY9XCJhc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF90eXBlICE9PSAnY29tcGxpYW5jZV9hdWRpdCdcIlxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2Fzc2Vzc21lbnQnLCBjYXRlZ29yeSlcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzXG4gICAgICAgICAgICAgICAgICA/LmFzc2Vzc21lbnRfbmFtZVxuICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzXG4gICAgICAgICAgICAgID8uYXNzZXNzbWVudF9uYW1lXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1sLTEgdngtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAge3sgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5xdWVzdGlvbnMgfX1cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5xdWVzdGlvbnMgPiAxXG4gICAgICAgICAgICAgID8gXCJRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICA6IFwiUXVlc3Rpb25cIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfdHlwZSAhPT0gJ2NvbXBsaWFuY2VfYXVkaXQnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdpc0Fzc2Vzc21lbnQnLCB0cnVlKTsgaXNBc3Nlc3NtZW50ID0gdHJ1ZVxuICAgICAgICAgICAgXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2hlY2twb2ludHMgLS0+XG4gIDwhLS0gKm5nSWY9XCJtb3JlT3B0aW9ucy5jaGVja3BvaW50c1wiIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uQ0hFQ0tQT0lOVFNcIlxuICAgIFthdHRyLmlkXT1cIidDSEVDS1BPSU5UUydcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnICYmXG4gICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jaGVja3BvaW50c1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5jaGVja3BvaW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cbiAgICAgICAgICA8IS0tIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzfGpzb259fVxuICAgICAgICAgICAgICAgIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbn19IC0tPlxuXG4gICAgICAgICAgQ2hlY2twb2ludHNcbiAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJyx0cnVlKVwiPisgQWRkIENoZWNrcG9pbnRzPC9idXR0b24+IC0tPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGJ1dHRvbi1zZWNcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uY2hlY2twb2ludHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwiIXJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIkFkZCBjaGVja3BvaW50cyBmb3IgdGhpcyByZXNwb25zaWJpbGl0eVwiXG4gICAgICAgICAgICByZWFkb25seSAvPlxuICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFyZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsIHRydWUpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIEFkZCBDaGVja3BvaW50c1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImNoZWNrcG9pbnQ/LmxhYmVsXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgY2hlY2twb2ludD8ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2hlY2twb2ludC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICt7eyByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXIgY2hlY2twb2ludHNcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGg+MVwiIFtjbGFzcy5wbHVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/LnNsaWNlKDAsMSlcIj57e2NoZWNrcG9pbnQ/LmxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDFcIiB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2hlY2twb2ludC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoLSAxfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGhcIiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dFwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb25zIGFsZXJ0LWljb25cIj4mI3hlOTMwOzwvaT5cbiAgICAgICAgPHNwYW4+WW91IGNhbiBub3cgdXNlIHRoZSBuZXcgPHN0cm9uZz5DaGVja3BvaW50cyA8L3N0cm9uZz5vclxuICAgICAgICAgIDxzdHJvbmc+QXNzZXNzbWVudHM8L3N0cm9uZz4gZmVhdHVyZSBpbnN0ZWFkIG9mIHRoZSBvbGQgY2hlY2twb2ludHNcbiAgICAgICAgICBmdW5jdGlvbmFsaXR5IHRvIGNyZWF0ZSBhbmFseXRpY2FsIHF1ZXN0aW9ucy5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ0blwiIChjbGljayk9XCJvblJlbW92ZUNoZWNrcG9pbnRzKCdjaGVja3BvaW50JylcIj5cbiAgICAgICAgICAgIFJlbW92ZSBDaGVja3BvaW50c1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHRvIGNvbnRpbnVlLjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFwcC1wb3BvdmVyICNjaGVja3BvaW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgY2hlY2twb2ludD8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTmV3ICBDaGVja3BvaW50cyAtLT5cbiAgPCEtLSAqbmdJZj1cIm1vcmVPcHRpb25zLmNoZWNrcG9pbnRzXCIgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5DSEVDS1BPSU5UU19ORVdcIlxuICAgIFthdHRyLmlkXT1cIidDSEVDS1BPSU5UUy1ORVcnXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzLW5ldydcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jaGVja3BvaW50c1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICpuZ0lmPVwiY2hlY2twb2ludENvdW50ID4gMCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJ1wiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cbiAgICAgICAgICA8IS0tIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzfGpzb259fVxuICAgICAgICAgICAgICAgIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbn19IC0tPlxuXG4gICAgICAgICAgQ2hlY2twb2ludHNcbiAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY2hlY2twb2ludC12ZXJzaW9uXCI+IFYyLjA8L3NwYW4+IC0tPlxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cy1uZXcnLHRydWUpXCI+KyBBZGQgQ2hlY2twb2ludHM8L2J1dHRvbj4gLS0+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiICpuZ0lmPVwiY2hlY2twb2ludENvdW50ID09PSAwXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzLW5ldycsIHRydWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIGNoZWNrcG9pbnRzIGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5XCIgcmVhZG9ubHkgLz5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cy1uZXcnLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIEFkZCBDaGVja3BvaW50c1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJjaGVja3BvaW50Q291bnQgPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQ2hlY2twb2ludHMoJ25ldy1jaGVja3BvaW50cycpXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPnt7IGNoZWNrcG9pbnRDb3VudCB9fVxuICAgICAgICAgICAgICB7eyBjaGVja3BvaW50Q291bnQgPiAxID8gXCJRdWVzdGlvbnNcIiA6IFwiUXVlc3Rpb25cIiB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyIGNoZWNrcG9pbnRzXCIgW2NsYXNzLm1vcmUtb25lXT1cImNoZWNrcG9pbnRDb3VudCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJvblJlbW92ZUNoZWNrcG9pbnRzKCduZXctY2hlY2twb2ludHMnKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NoZWNrcG9pbnRDb3VudH19IHt7Y2hlY2twb2ludENvdW50ID4gMSA/ICdRdWVzdGlvbnMnOiAnUXVlc3Rpb24nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdjaGVja3BvaW50cy1uZXcnXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMtbmV3JywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFwcC1wb3BvdmVyICNjaGVja3BvaW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgY2hlY2twb2ludD8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmlzayBDbGFzc2lmaWNhdGlvbiAtLT5cbiAgPGRpdiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwibW9yZU9wdGlvbnM/LlJJU0tfQ0xBU1NJRklDQVRJT05cIlxuICAgIFthdHRyLmlkXT1cIidSSVNLX0NMQVNTSUZJQ0FUSU9OJ1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyaXNrQ2FsY3VsYXRvcidcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyaXNrQ2FsY3VsYXRvcicgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yaXNrQ2xhc3NcIj5cbiAgICAgIDxzdmcgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJpc2tDbGFzc1wiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgUmlzayBDbGFzc2lmaWNhdGlvblxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jpc2tDYWxjdWxhdG9yJywgdHJ1ZSlcIiBjbGFzcz1cImJ1dHRvblwiPlxuICAgICAgICAgICAgKyBSaXNrIENhbGN1bGF0b3JcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb25cIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsb3dcIiAqbmdGb3I9XCJsZXQgcmlzayBvZiByaXNrQ2xhc3NpZmljYXRpb25cIiBbbmdDbGFzc109XCJbcmlzay5jbGFzc11cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY2xhc3NpZmljYXRpb25cIiBbKG5nTW9kZWwpXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrQ2xhc3NcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwicmlzaz8udmFsdWVcIiAvPlxuICAgICAgICAgICAgPHNwYW4+e3sgcmlzaz8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJldmlld2VyIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uUkVWSUVXRVJcIiBbYXR0ci5pZF09XCInUkVWSUVXRVInXCJcbiAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeScgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcbiAgICBcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMucmV2aWV3ZXJcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInXG4gICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmV2aWV3ZXI8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgIWZlYXR1cmVGbGFnX2dyb3VwcykgfHxcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUmV2aWV3ZXJcIiByZWFkb25seSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IHJldmlld2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5zbGljZSgwLCAxKVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicmV2aWV3ZXIubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyByZXZpZXdlci5tZW1iZXJfbmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJyZXZpZXdlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aD4xXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucGx1c109XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgcmV2aWV3ZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/LnNsaWNlKDAsMilcIj48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmV2aWV3ZXInLHJldmlld2VyKVwiPiYjeGU5MGQ7PC9pPiB7e3Jldmlld2VyLm1lbWJlcl9uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMlwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyZXZpZXdlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICByZW1vdmUoJ3Jldmlld2VyJywgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RbMF0pXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZVxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwidXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICt7eyByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnZ3JvdXBSZXZpZXdlcicsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RbMF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RbMF0/Lmdyb3VwX25hbWVcbiAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0WzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicscmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RbMF0pXCIgPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj48c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwXCI+e3tyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZX19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwidXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+ICt7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggLSAxfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwICYmIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDBcIj4mPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Lmxlbmd0aCA+IDAgXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdncm91cFJldmlld2VyJyxyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0WzBdKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0WzBdPy5ncm91cF9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPjxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDBcIj57e3Jlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RbMF0/Lmdyb3VwX25hbWV9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cImdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7cmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIC0gMX19PC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFwcC1jcy1yYWRpbyBbY2hlY2tlZF09XCJyZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvd1wiIFtuYW1lXT1cIidyZXZpZXdlcidcIlxuICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwib25SZXZpZXdlcldvcmtmbG93Q2hhbmdlKCdzZXF1ZW50aWFsJylcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgU0VRVUVOVElBTDxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgJ1RoZSByZXNwb25zaWJpbGl0eSB3aWxsIGJlIHNlbnQgZm9yIHJldmlldyBvbmUgYXQgYSB0aW1lIGluIHRoZSBzZXF1ZW5jZSBkZWZpbmVkIGJ5IHlvdS4nXG4gICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiBkZWxheT1cIjBcIiB0eXBlPVwid2hpdGVcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+XG4gICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICA8YXBwLWNzLXJhZGlvIFtjaGVja2VkXT1cIiFyZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvd1wiIFtuYW1lXT1cIidyZXZpZXdlcidcIlxuICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwib25SZXZpZXdlcldvcmtmbG93Q2hhbmdlKCdhbnlSZXZpZXdlcicpXCI+XG4gICAgICAgICAgQU5ZIFJFVklFV0VSIENBTiBNQVJLIFRISVMgQVMgUkVWSUVXRUQ8aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICdUaGUgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBzZW50IGZvciByZXZpZXcgdG8gYWxsIHJldmlld2VycyBhdCB0aGUgc2FtZSB0aW1lLiBJZiBhbnlvbmUgb2YgdGhlIHJldmlld2VyIHJldmlld3MgdGhlIHJlc3BvbnNpYmlsaXR5LCBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgcmV2aWV3ZWQuJ1xuICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgZGVsYXk9XCIwXCIgdHlwZT1cIndoaXRlXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPlxuICAgICAgICA8L2FwcC1jcy1yYWRpbz5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNyZXZpZXdlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgcmV2aWV3ZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyByZXZpZXdlci5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICN1c2VyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCByZXZpZXdlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJldmlld2VyLm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0XG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnZ3JvdXBSZXZpZXdlcicsIGdyb3VwKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gT3ZlcnNlZXIgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5PVkVSU0VFUlwiIFthdHRyLmlkXT1cIidPVkVSU0VFUidcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyJ1xuICAgIFwiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAhWydvdmVyc2Vlck5vdGlmeScsICdvdmVyc2Vlck5vdGlmeSddLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKSAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5vdmVyc2lnaHRcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPT0gMCkgfHxcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnb3ZlcnNlZXInXG4gICAgICAgIFwiIC8+XG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgKm5nSWY9XCJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyJ1xuICAgICAgICAgIClcbiAgICAgICAgXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+T3ZlcnNpZ2h0PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwiXG4gICAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICFmZWF0dXJlRmxhZ19ncm91cHMpIHx8XG4gICAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ292ZXJzZWVyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoZSByZXNwb25zaWJpbGl0eT9cIiByZWFkb25seSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8uc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2VlcicsIG92ZXJzZWVyKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIm92ZXJzZWVyLm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgb3ZlcnNlZXIubWVtYmVyX25hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiIFtjbGFzcy5tb3JlLW9uZV09XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoPjFcIiBbY2xhc3MucGx1c109XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoPjJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IG92ZXJzZWVyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Py5zbGljZSgwLDIpXCI+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyJyxvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT4ge3tvdmVyc2Vlci5tZW1iZXJfbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDJcIiB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7cmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/LnNsaWNlKDIpLmxlbmd0aH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiICpuZ0lmPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZSgnb3ZlcnNlZXInLCByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdFswXSlcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2VlclVzZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj4mPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnb3ZlcnNlZXJHcm91cCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0WzBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdFswXS5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3RbMF0uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiICpuZ0lmPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Lmxlbmd0aCA+IDBcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyJyxyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdFswXSlcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+PHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMFwiPnt7cmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWV9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnQgdXNlclwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyVXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+ICt7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Py5sZW5ndGggLTF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdC5sZW5ndGggPiAwICYmIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwXCIgPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwIFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgnb3ZlcnNlZXJHcm91cCcscmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3RbMF0pXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0WzBdLmdyb3VwX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+PHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMFwiICA+e3tyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdFswXS5ncm91cF9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJHcm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggLTF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ292ZXJzZWVyJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ292ZXJzZWVyJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgIWZlYXR1cmVGbGFnX2dyb3VwcykgfHxcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIGZlYXR1cmVGbGFnX2dyb3VwcylcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3ZlcnNlZXJOb3RpZnknLCB0cnVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHJlc3BvbnNpYmlsaXR5IGlzIG5vdCBjb21wbGV0Li4uXCIgcmVhZG9ubHkgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICdXaG8gc2hvdWxkIGJlIG5vdGlmaWVkIGlmIHRoZSByZXNwb25zaWJpbGl0eSBpcyBub3QgY29tcGxldGVkPydcbiAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8uc2xpY2UoXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2Vlck5vdGlmeUxpc3QnLCBvdmVyc2VlcilcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJvdmVyc2Vlci5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IG92ZXJzZWVyLm1lbWJlcl9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm5vdGlmeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aD4xXCIgW2NsYXNzLnBsdXNdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aD4yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IG92ZXJzZWVyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5zbGljZSgwLDIpXCI+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyTm90aWZ5TGlzdCcsb3ZlcnNlZXIpXCI+JiN4ZTkwZDs8L2k+IHt7b3ZlcnNlZXIubWVtYmVyX25hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm5vdGlmeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnb3ZlcnNlZXJOb3RpZnlMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RbMF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJub3RpZnlVc2VyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgXCI+Jjwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICByZW1vdmUoXG4gICAgICAgICAgICAgICAgICAgICdvdmVyc2Vlckdyb3VwTm90aWZ5TGlzdCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdFswXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm5vdGlmeUdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgK3t7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyTm90aWZ5TGlzdCcscmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RbMF0pXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0WzBdPy5lbXBsb3llZV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPjxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDBcIj57e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0WzBdPy5lbXBsb3llZV9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50IHVzZXJcIiBhcHBQb3BvdmVyIChjbGljayk9XCJub3RpZnlVc2VyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIj4gK3t7cmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwICYmIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwXCIgPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwIFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgnb3ZlcnNlZXJHcm91cE5vdGlmeUxpc3QnLHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdFswXT8uZ3JvdXBfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj48c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwXCIgID57e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdPy5ncm91cF9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwibm90aWZ5R3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoIC0gMX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnb3ZlcnNlZXJOb3RpZnknXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3ZlcnNlZXJOb3RpZnknLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVycyBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2VlcicsIG92ZXJzZWVyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJVc2VyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlcnMgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2VlcicsIG92ZXJzZWVycylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXJzPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2Vlckdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyR3JvdXAnLCBvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/Lmdyb3VwX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjbm90aWZ5IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyTm90aWZ5TGlzdCcsIG92ZXJzZWVyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjbm90aWZ5VXNlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2Vlck5vdGlmeUxpc3QnLCBvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/Lm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8YXBwLXBvcG92ZXIgI25vdGlmeUdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyR3JvdXBOb3RpZnlMaXN0JywgZ3JvdXApXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXNzdXJhbmNlIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uQVNTVVJBTkNFXCIgW2F0dHIuaWRdPVwiJ0FTU1VSQU5DRSdcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3N1cmFuY2UnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzdXJhbmNlJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5yZXZpZXdlclwiIGFsdD1cIlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXNzdXJhbmNlJ1xuICAgICAgICBcIiAvPlxuXG4gICAgICA8c3ZnICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3N1cmFuY2UnXG4gICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QXNzdXJhbmNlPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzdXJhbmNlJywgdHJ1ZSlcIlxuICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgdGVzdCBwbGFuIGNhdGVnb3JpZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBhZGQgdGhpcyByZXNwb25zaWJpbGl0eSB0by5cIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGFzc3VyYW5jZSBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc3VyYW5jZUxpc3Q/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXNzdXJhbmNlJywgYXNzdXJhbmNlKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImFzc3VyYW5jZS5jYXRlZ29yeV9uYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgYXNzdXJhbmNlLmNhdGVnb3J5X25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJhc3N1cmFuY2UucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzdXJhbmNlTGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzdXJhbmNlJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2Fzc3VyYW5jZScsIHRydWUpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjYXNzdXJhbmNlIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBhc3N1cmFuY2Ugb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0XG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzdXJhbmNlJywgYXNzdXJhbmNlKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBhc3N1cmFuY2UuY2F0ZWdvcnlfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJlcXVpcmVzIEF1ZGl0IC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAqbmdJZj1cIm1vcmVPcHRpb25zPy5SRVFVSVJFU19BVURJVCAmJiByZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID4gMFwiIFthdHRyLmlkXT1cIidSRVFVSVJFU19BVURJVCdcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXF1aXJlc19hdWRpdCdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXF1aXJlc19hdWRpdCcgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuYXVkaXRcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXF1aXJlc19hdWRpdCdcbiAgICAgICAgXCIgLz5cblxuICAgICAgPHN2ZyAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3JlcXVpcmVzX2F1ZGl0J1xuICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJFUVVJUkVTIEFVRElUPzwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJJZiB5ZXMsIHNlbGVjdCBhbiBBdWRpdCBDYXRlZ29yeS5cIiByZWFkb25seVxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3JlcXVpcmVzX2F1ZGl0JywgdHJ1ZSlcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJlcXVpcmVzQXVkaXRMaXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmVxdWlyZXNfYXVkaXQnLCBvdmVyc2VlcilcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXF1aXJlc0F1ZGl0TGlzdFswXT8uY2F0ZWdvcnlfbmFtZVxuICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXF1aXJlc0F1ZGl0TGlzdFswXT8uY2F0ZWdvcnlfbmFtZVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXF1aXJlc19hdWRpdCcsIHRydWUpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYzs8L2k+IEVkaXRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8IS0tIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICBFZGl0PC9idXR0b24+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtOFwiPlxuICAgICAgICAgICAgU0FNUExFIFNJWkVcbiAgICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoIFsobmdWYWx1ZSldPVwiaXNTYW1wbGVcIiAobmdWYWx1ZUNoYW5nZSk9XCJzd2l0Y2hFbmFibGUoJGV2ZW50KVwiPjwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYW1wbGUtcGFydFwiIFtjbGFzcy5kaXNhYmxlZF09XCIhaXNTYW1wbGVcIj5cbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gdmFsdWU9XCIwXCIgY2xhc3M9XCJzYW1wbGUtcmFkaW9cIiAoY2xpY2spPVwic2VsZWN0ZWRTYW1wbGVEYXRhKDApXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRTYW1wbGUgPT09IDBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5DT1VOVDwvZGl2PlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiLS1cIiAoa2V5cHJlc3MpPVwiY2hlY2tJbnB1dFZhbHVlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNhbXBsZVZhbHVlXCIgLz5cbiAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yXCI+T1I8L2Rpdj5cbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gdmFsdWU9XCIxXCIgY2xhc3M9XCJzYW1wbGUtcmFkaW9cIiAoY2xpY2spPVwic2VsZWN0ZWRTYW1wbGVEYXRhKDEpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRTYW1wbGUgPT09IDFcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5QRVJDRU5UQUdFPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgKGtleXByZXNzKT1cImNoZWNrSW5wdXRWYWx1ZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzYW1wbGVQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tXCIgLz5cbiAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtOFwiPlNFVCBBIFJFTUlOREVSIElGIFRIRSBBVURJVCBQTEFOIElTIE5PVCBDUkVBVEVELjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWluZGVyLXBhcnRcIj5cbiAgICAgICAgICAgIFNlbmQgcmVtaW5kZXIgZXZlcnlcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdmFsdWU9XCIyXCIgWyhuZ01vZGVsKV09XCJzZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZVwiIC8+XG4gICAgICAgICAgICBEYXkgYnlcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZXItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGltZVwiIGFyaWEtbGFiZWw9XCIxMmhyIGZvcm1hdFwiIFsobmdNb2RlbCldPVwiYXVkaXRUaW1lXCIgW25neFRpbWVwaWNrZXJdPVwiZGFpbHlUaW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImF1ZGl0VGltZS50b1VwcGVyQ2FzZSgpXCIgdHlwZT1cInRleHRcIiBbbWluXT1cImN1cnJlbnRUaW1lXCIgcmVhZG9ubHkgLz5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5NTU7PC9pPlxuICAgICAgICAgICAgICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIgI2RhaWx5VGltZSBbZGVmYXVsdFRpbWVdPVwiYXVkaXRUaW1lXCI+XG4gICAgICAgICAgICAgIDwvbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBMaW5rIG9mIEdSQyBvYmplY3RzIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAqbmdJZj1cIm1vcmVPcHRpb25zPy5HUkNfT0JKRUNUUyAmJiByZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID4gMFwiIFthdHRyLmlkXT1cIidHUkNfT0JKRUNUUydcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdHUkNfT0JKRUNUUydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdHUkNfT0JKRUNUUycgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuYXVkaXRcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnR1JDX09CSkVDVFMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnNlbGVjdGVkR1JDT2JqZWN0cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnR1JDX09CSkVDVFMnXG4gICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+TElOSyBHUkMgT0JKRUNUKFMpPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5zZWxlY3RlZEdSQ09iamVjdHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEdSQyBvYmplY3QocykgdG8gbGluayB3aXRoIHRoaXMgcmVzcG9uc2liaWxpdHlcIiByZWFkb25seVxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ0dSQ19PQkpFQ1RTJywgdHJ1ZSlcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3RlZEdSQyBvZiBHUkNfVFlQRV9BUlJBWTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyY0RhdGFXaXRoVHlwZXNbc2VsZWN0ZWRHUkNdPy5sZW5ndGhcIiBjbGFzcz1cInNlbGVjdGVkIHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncmMgb2YgZ3JjRGF0YVdpdGhUeXBlc1tzZWxlY3RlZEdSQ10/LnNsaWNlKDAsIDEpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ0dSQ19PQkpFQ1RTJywgZ3JjLCAwKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRHUkMgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImdyYz8ubmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBncmM/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwicG9wb3ZlckdSQy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JjRGF0YVdpdGhUeXBlc1tzZWxlY3RlZEdSQ10/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAgICt7eyBncmNEYXRhV2l0aFR5cGVzW3NlbGVjdGVkR1JDXS5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ0dSQydcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHUkNUYWIgPSBncmNEYXRhV2l0aFR5cGVzW3NlbGVjdGVkR1JDXVswXT8udHlwZTtcbiAgICAgICAgICAgICAgICAgIGdldE90aGVyR1JDT2JqZWN0cygpO1xuICAgICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignR1JDX09CSkVDVFMnLCB0cnVlKVxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb3BvdmVyR1JDIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JjIG9mIGdyY0RhdGFXaXRoVHlwZXNbc2VsZWN0ZWRHUkNdIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdHUkNfT0JKRUNUUycsIGdyYywgaiArIDEpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBncmMubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGFwcC11c2Vycy1yYWRpby1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25vcnMnXCIgW3VzZXJzTGlzdF09XCJhc3NpZ25vcnNMaXN0XCJcbiAgW3NlbGVjdGVkVXNlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0XCIgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxuICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2Fzc2lnbm9ycycsICRldmVudClcIlxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCIgW2xvYWRlZF09XCJhc3NpZ25vcnNMaXN0TG9hZGVkXCI+XG48L2FwcC11c2Vycy1yYWRpby1saXN0PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXCI+XG4gIDxhcHAtZ3JvdXAtdXNlcnMtbGlzdCAqbmdJZj1cIlxuICAgICAgaXNFbnRydXN0IHx8IHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy53aG9DYW5Db21wbGV0ZSA9PT0gJ0FOWV9PTkUnXG4gICAgXCIgW29wZW5lZEZyb21dPVwib3BlbmVkRnJvbVwiIFt1c2Vyc0xpc3RdPVwiYXNzaWduZWVzTGlzdFwiIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ0Fzc2lnbmVlJ1wiIFtncm91cHNMaXN0XT1cImdyb3Vwc0xpc3RcIlxuICAgIFthc3NpZ25lZUdyb3Vwc0xpc3RdPVwiZ3JvdXBBc3NpZ25lZUxpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3RcIiBbdXNlcklkS2V5XT1cIidteV9tZW1iZXJfaWQnXCIgW2dyb3VwSWRLZXldPVwiJ2dyb3VwX2lkJ1wiXG4gICAgW2xvYWRlcl09XCJ1c2VyTGlzdExvYWRlciB8fCBhc3NpZ25vcnNMaXN0TG9hZGVyXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiIFtncm91cHNFbmFibGVkXT1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICA8L2FwcC1ncm91cC11c2Vycy1saXN0PlxuICA8YXBwLXVzZXJzLXJhZGlvLWxpc3QgKm5nSWY9XCJcbiAgICAgICFpc0VudHJ1c3QgJiYgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnXG4gICAgXCIgW2l0ZW1FbWFpbEtleV09XCInZW1wbG95ZWVfZW1haWwnXCIgW3VzZXJzTGlzdF09XCJhc3NpZ25lZXNMaXN0XCIgW3NlbGVjdGVkVXNlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0XCJcbiAgICBbdXNlcklkS2V5XT1cIidlbXBsb3llZV9pZCdcIiBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCIgW2Zyb21SZXNwb25zaWJpbGl0eV09XCInQXNzaWduZWUnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCIgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4gICAgW2xvYWRlZF09XCJhc3NpZ25lZXNMaXN0TG9hZGVkXCI+XG4gIDwvYXBwLXVzZXJzLXJhZGlvLWxpc3Q+XG48L25nLWNvbnRhaW5lcj5cblxuPGFwcC1jaGVja3BvaW50cyAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXCJcbiAgW2NoZWNrcG9pbnRJbnN0cnVjdGlvbl09XCJyZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRJbnN0cnVjdGlvblwiIFtjaGVja3BvaW50RGF0YV09XCJyZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzXCJcbiAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NoZWNrcG9pbnRzJywgJGV2ZW50KVwiIChjbG9zZUNoZWNrUG9pbnQpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCI+PC9hcHAtY2hlY2twb2ludHM+XG48YXBwLWZyZXF1ZW5jeS1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIiBbZnJlcXVlbmN5RGV0YWlsc109XCJmcmVxdWVuY3lEZXRhaWxzXCJcbiAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiIFtvbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eV09XCJyZXNwb25zaWJpbGl0eURldGFpbHM/Lm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5XCJcbiAgKHNlbGVjdGVkRnJlcXVlbmN5KT1cImZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiIFttb2RlXT1cIidyZXNwb25zaWJpbGl0eSdcIiAoY2xvc2VGcmVxdWVuY3kpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCI+XG48L2FwcC1mcmVxdWVuY3ktY29udGFpbmVyPlxuXG48YXBwLXJlc3BvbnNpYmlsaXR5LWNlbnRlcnMtbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCIgW2xvYWRlZF09XCJyY0xpc3RMb2FkZWRcIlxuICBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XCIgW3JhZGlvU2VsZWN0aW9uXT1cIlxuICAgIG1vZGUgPT0gJ0VESVQnICYmIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gMCA/IHRydWUgOiBmYWxzZVxuICBcIiBbc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLnJjXCIgW3JjSWRLZXldPVwiJ2l0ZW1faWQnXCJcbiAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCAkZXZlbnQpXCIgKGNsb3NlUmNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiPlxuPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxuXG48YXBwLWNhdGVnb3J5LW11bHRpLXNlbGVjdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2F0ZWdvcnknXCIgW2NhdGVnb3J5TGlzdF09XCJjYXRlZ29yaWVzXCJcbiAgW2FsbENhdGVnb3JpZXNdPVwiYWxsQ2F0ZWdvcmllc1wiIFtjYXRlZ29yeUlkS2V5XT1cIidjYXRlZ29yeV9pZCdcIiBbc2VsZWN0ZWRDYXRlZ29yaWVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeVwiXG4gIChzYXZlU2VsZWN0ZWRDYXRlZ29yeSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjYXRlZ29yeScsICRldmVudClcIiAoY2xvc2VDYXRlZ29yaWVzTGlzdCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIj5cbjwvYXBwLWNhdGVnb3J5LW11bHRpLXNlbGVjdD5cblxuPCEtLSBQcm9ncmFtIExpc3QgUG9wdXAgLS0+XG48YXBwLWxpc3QtY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwcm9ncmFtJ1wiIChjbG9zZSk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIj5cbiAgPGFwcC1wcm9ncmFtLWxpc3QgYm9keSAoaXRlbXNTZWxlY3RlZENoYW5nZSk9XCJvbkl0ZW1zU2VsZWN0ZWRDaGFuZ2UoJGV2ZW50KVwiIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkUHJvZ3JhbXNcIlxuICAgIFt1cmxdPVwicHJvZ3JhbUxpc3RVcmxcIj48L2FwcC1wcm9ncmFtLWxpc3Q+XG4gIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC13LTEwMFwiIGZvb3Rlcj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlIHZ4LWZzLTEyIHZ4LWQtZmxleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQtY291bnQtYm94IHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIj5cbiAgICAgICAgICB7eyBhbGxQcm9nYW1TZWxlY3RlZC5sZW5ndGggfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWQtdGV4dFwiPlxuICAgICAgICAgIFByb2dyYW1cbiAgICAgICAgICB7eyBhbGxQcm9nYW1TZWxlY3RlZC5sZW5ndGggPiAxID8gXCJDYXRlZ29yaWVzXCIgOiBcIkNhdGVnb3J5XCIgfX1cbiAgICAgICAgICBTZWxlY3RlZDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zaWRlIHZ4LWQtZmxleFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbEJ0blwiIChjbGljayk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJuZXh0QnRuXCIgKGNsaWNrKT1cImFjdGl2ZURlc2VsZWN0b3IoKTsgc2VsZWN0Q2F0ZWdvcnkoKVwiPlxuICAgICAgICBOZXh0IDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFlOzwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvYXBwLWxpc3QtY29udGFpbmVyPlxuXG48YXBwLW93bmVyLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJyAmJiAhZmVhdHVyZUZsYWdfZ3JvdXBzXCIgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgYSBSZXZpZXdlcidcIlxuICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbdXNlcnNMaXN0XT1cImFsbFVzZXJzTGlzdFwiIFtzaG93V29ya2Zsb3ddPVwidHJ1ZVwiXG4gIFtzZWxlY3RlZFVzZXJzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdFwiIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiIFtpdGVtRW1haWxLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiXG4gIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwiXG4gICAgc2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXInLCAkZXZlbnQpO1xuICAgIGFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcbiAgXCIgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiIFttb2RlXT1cIm1vZGVcIiBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidSZXZpZXdlcidcIiBbcmV2aWV3ZXJXb3JrZmxvd1R5cGVdPVwiXG4gICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/LnNlcXVlbnRpYWxXb3JrZmxvd1xuICAgICAgPyAnU0VRVUVOVElBTCdcbiAgICAgIDogJ0FOWSBSRVZJRVdFUiBDQU4gTUFSSyBUSElTIEFTIFJFVklFV0VEJ1xuICBcIiAocmV2aWV3ZXJXb3JrZmxvd1R5cGVDaGFuZ2UpPVwicmV2aWV3ZXJUeXBlQ2hhbmdlKCRldmVudClcIj5cbjwvYXBwLW93bmVyLWxpc3Q+XG48dXNlci1ncm91cC1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcicgJiYgZmVhdHVyZUZsYWdfZ3JvdXBzXCIgW3NlbGVjdGVkUmV2aWV3ZXJdPVwidHJ1ZVwiXG4gIFt1c2VybGlzdF09XCJyZXZpZXdlck1lbWJlcklkc0xpc3RcIiBbZ3JvdXBFbmFibGVkXT1cInRydWVcIiBbZ3JvdXBMaXN0XT1cImdyb3VwUmV2aWV3ZXJMaXN0XCJcbiAgW3NlbGVjdGVkR3JvdXBzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFwiXG4gIChjYW5jZWwpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCIgKHNhdmUpPVwiXG4gICAgc2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXInLCAkZXZlbnQpO1xuICAgIGFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcbiAgXCIgW21vZGVdPVwibW9kZVwiIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ1Jldmlld2VyJ1wiIFtsb2FkaW5nXT1cInVzZXJMaXN0TG9hZGVyIHx8IGFzc2lnbm9yc0xpc3RMb2FkZXJcIlxuICAocmV2aWV3ZXJXb3JrZmxvd1R5cGVDaGFuZ2UpPVwicmV2aWV3ZXJUeXBlQ2hhbmdlKCRldmVudClcIiBbcmV2aWV3ZXJXb3JrZmxvd1R5cGVdPVwiXG4gICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/LnNlcXVlbnRpYWxXb3JrZmxvd1xuICAgICAgPyAnU0VRVUVOVElBTCdcbiAgICAgIDogJ0FOWSBSRVZJRVdFUiBDQU4gTUFSSyBUSElTIEFTIFJFVklFV0VEJ1xuICBcIiBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG48L3VzZXItZ3JvdXAtbGlzdD5cbjxhcHAtb3duZXItbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3ZlcnNlZXInICYmICFmZWF0dXJlRmxhZ19ncm91cHNcIiBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiXG4gIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbdXNlcnNMaXN0XT1cImFsbFVzZXJzTGlzdFwiIFtzZWxlY3RlZFVzZXJzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdFwiXG4gIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ092ZXJzZWVyJ1wiIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCJcbiAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3ZlcnNlZXInLCAkZXZlbnQpXCIgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4gIFtpdGVtRW1haWxLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiPlxuPC9hcHAtb3duZXItbGlzdD5cbjx1c2VyLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyJyAmJiBmZWF0dXJlRmxhZ19ncm91cHNcIiBbZ3JvdXBFbmFibGVkXT1cInRydWVcIlxuICBbZ3JvdXBMaXN0XT1cImdyb3VwT3ZlcnNlZXJMaXN0XCIgW3NlbGVjdGVkR3JvdXBzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0XCJcbiAgW3VzZXJsaXN0XT1cIm92ZXJzZWVyc0xpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3RcIiBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidPdmVyc2VlcidcIlxuICBbbG9hZGluZ109XCJ1c2VyTGlzdExvYWRlciB8fCBhc3NpZ25vcnNMaXN0TG9hZGVyXCIgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3ZlcnNlZXInLCAkZXZlbnQpXCJcbiAgKGNhbmNlbCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIiBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG48L3VzZXItZ3JvdXAtbGlzdD5cblxuPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdvdmVyc2Vlck5vdGlmeScgJiYgIWZlYXR1cmVGbGFnX2dyb3Vwc1wiIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiIFt1c2Vyc0xpc3RdPVwiYWxsVXNlcnNMaXN0XCIgW2Zyb21SZXNwb25zaWJpbGl0eV09XCInT3ZlcnNlZXInXCJcbiAgW3NlbGVjdGVkVXNlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0XCIgW3VzZXJJZEtleV09XCInZW1wbG95ZWVfaWQnXCIgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvdmVyc2Vlck5vdGlmeScsICRldmVudClcIiAoY2xvc2VVc2Vyc0xpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCJcbiAgW2l0ZW1FbWFpbEtleV09XCInZW1wbG95ZWVfZW1haWwnXCI+PC9hcHAtb3duZXItbGlzdD5cbjx1c2VyLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyAmJiBmZWF0dXJlRmxhZ19ncm91cHNcIiBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gIFtncm91cEVuYWJsZWRdPVwidHJ1ZVwiIFtncm91cExpc3RdPVwiZ3JvdXBPdmVyc2Vlckxpc3RcIlxuICBbc2VsZWN0ZWRHcm91cHNdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3RcIlxuICBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3RcIiBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidPdmVyc2VlcidcIlxuICBbbG9hZGluZ109XCJ1c2VyTGlzdExvYWRlciB8fCBhc3NpZ25vcnNMaXN0TG9hZGVyXCIgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3ZlcnNlZXJOb3RpZnknLCAkZXZlbnQpXCJcbiAgKGNhbmNlbCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIiBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG48L3VzZXItZ3JvdXAtbGlzdD5cblxuPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3N1cmFuY2UnXCIgW3Npbmd1bGFyVGV4dF09XCInVGVzdCBDYXRlZ29yeSBzZWxlY3RlZCdcIlxuICBbcGx1cmFsVGV4dF09XCInVGVzdCBDYXRlZ29yaWVzIHNlbGVjdGVkJ1wiIFtzZWFyY2hQbGFjZWhvbGRlcl09XCInU2VhcmNoIFRlc3QgQ2F0ZWdvcnkuLi4nXCJcbiAgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgVGVzdCBDYXRlZ29yaWVzJ1wiIFt1c2Vyc0xpc3RdPVwiYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3RcIlxuICBbbm9EYXRhVGV4dF09XCInTm8gVGVzdCBDYXRlZ29yaWVzIEZvdW5kJ1wiIFtzZWxlY3RlZFVzZXJzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0XCJcbiAgW3VzZXJJZEtleV09XCInY2F0ZWdvcnlfaWQnXCIgW2l0ZW1FbWFpbEtleV09XCInY2F0ZWdvcnlfbmFtZSdcIiBbaXRlbU5hbWVLZXldPVwiJ2NhdGVnb3J5X25hbWUnXCJcbiAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzdXJhbmNlJywgJGV2ZW50KVwiIChjbG9zZVVzZXJzTGlzdCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIlxuICBbc2VhcmNoUGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBDYXRlZ29yeSdcIj5cbjwvYXBwLW93bmVyLWxpc3Q+XG5cbjxhcHAtYXVkaXQtY2F0ZWdvcnktbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmVxdWlyZXNfYXVkaXQnXCIgKGNsb3NlTGlzdCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIlxuICBbYXVkaXRDYXRlZ29yeV09XCJhc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdFwiIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3JlcXVpcmVzX2F1ZGl0JywgJGV2ZW50KVwiXG4gIFtzZWxlY3RlZERhdGFdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yZXF1aXJlc0F1ZGl0TGlzdFswXVwiPjwvYXBwLWF1ZGl0LWNhdGVnb3J5LWxpc3Q+XG5cbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cIihsb2FkZXIgJiYgdGhpcy5tb2RlID09PSAnRURJVCcpIHx8IGVudHJ1c3RMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxuPGFwcC1mcmFtZXdvcmstbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJhbWV3b3JrJ1wiIChhc3NpZ25Db250cm9sKT1cImFzc2lnbkZyb21GcmFtZXdvcmsoJGV2ZW50KVwiXG4gIFtwcmV2aW91c1NlbGVjdGVkVmFsdWVzXT1cInNlbGVjdGVkRnJhbWV3b3JrVmFsdWVzXCIgKGNsb3NlRnJhbWV3b3JrKT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4gIChlbnRydXN0RnJhbWV3b3JrKT1cImVudHJ1c3RGcmFtZXdvcmsoJGV2ZW50KVwiPjwvYXBwLWZyYW1ld29yay1saXN0PlxuXG48IS0tIHJpc2stY2FsY3VsYXRvciBoZXJlIC0tPlxuPGFwcC1yaXNrLWNsYXNzaWZpY2F0aW9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyaXNrQ2FsY3VsYXRvcidcIiBbY3VycmVudFJpc2tWYWx1ZV09XCJyZXNwb25zaWJpbGl0eUZvcm0ucmlza0NsYXNzXCJcbiAgKHNhdmVMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NhbGN1bGF0ZWRyaXNrJywgJGV2ZW50KVwiIChjbG9zZUxpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCI+XG48L2FwcC1yaXNrLWNsYXNzaWZpY2F0aW9uPlxuXG48YXBwLXJldmlldy1mcmVxdWVuY3kgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiIFtyZXZpZXdDb21wbGV0ZURheXNdPVwiXG4gICAgcmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzXG4gIFwiIFtyZXZpZXdOT3RDb21wbGV0ZWREYXlzXT1cIlxuICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld05PdENvbXBsZXRlZERheXNcbiAgXCIgKHNhdmVSZXZpZXdGcmVxdWVuY3kpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3RnJlcXVlbmN5JywgJGV2ZW50KVwiIChjbG9zZVJldmlld0ZyZXF1ZW5jeSk9XCJcbiAgICBhY3RpdmVEZXNlbGVjdG9yKCk7XG4gICAgYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCBmYWxzZSk7XG4gICAgcmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gW107XG4gICAgcmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3QgPSBbXVxuICBcIiAoYmFja1RvVXNlckxpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpOyBhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCI+XG48L2FwcC1yZXZpZXctZnJlcXVlbmN5PlxuXG48YXBwLWFzc2Vzc21lbnQtbGlzdCAqbmdJZj1cImlzQXNzZXNzbWVudFwiIFtwcm9ncmFtX2lkc109XCJyZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXT8uX2lkXCIgKGNhbmNlbEFzc2Vzc21lbnQpPVwiXG4gICAgaXNBc3Nlc3NtZW50ID0gZmFsc2U7IGFjdGl2YXRlU2VsZWN0b3IoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVxuICBcIiBbaXNFZGl0XT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA/IHRydWUgOiBmYWxzZVwiXG4gIFtzZWxlY3RlZEFzc2Vzc21lbnRdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50XCIgKG9uQXNzZXNzbWVudFNlbGVjdCk9XCJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgZmFsc2UpXG4gIFwiPjwvYXBwLWFzc2Vzc21lbnQtbGlzdD5cblxuPGFwcC1zbWlsZXktZGlhbG9nLWlubGluZSAqbmdJZj1cInNob3dTbWlsZXlcIiBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCIgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXG4gIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPlxuXG48ZGl2IGNsYXNzPVwiaW1wb3J0XCIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzLW5ldydcIj5cbiAgPGFwcC1jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXIgI2VkaXRvciBbb3BlblBvcnRhbF09XCInUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCdcIlxuICAgIChwb3N0QXNzZXNzbWVudCk9XCJwb3N0QXNzZXNzbWVudCgkZXZlbnQpXCIgKHNldElzVXBsb2FkZWQpPVwic2V0SXNVcGxvYWRlZCgkZXZlbnQpXCJcbiAgICBbY2hlY2twb2ludEpTT05dPVwicmVzcG9uc2liaWxpdHlGb3JtLm5ld19jaGVja3BvaW50c1wiPlxuICA8L2FwcC1jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXI+XG48L2Rpdj5cblxuPGFwcC1ncmMtb2JqZWN0LWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ0dSQ19PQkpFQ1RTJ1wiIFtncmNPYmplY3RdPVwiZ3JjTGlzdFwiXG4gIFtzZWxlY3RlZEdSQ109XCJyZXNwb25zaWJpbGl0eUZvcm0uc2VsZWN0ZWRHUkNPYmplY3RzIHwgcmVmRGlzY29ubmVjdFwiIFtsb2FkZXJdPVwiZ3JjTG9hZGVyXCIgW3RhYmxlQ2FyZF09XCJvdGhlckdSQ0NhcmRcIlxuICBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRHUkNUYWJcIiBbY2FyZExvYWRlcl09XCJncmNUYWJMb2FkZXJcIiAoZ2V0T3RoZXJHUkNPYmplY3RzKT1cImdldE90aGVyR1JDT2JqZWN0cygkZXZlbnQpXCJcbiAgKHNhdmVPdGhlckdSQyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdHUkNfT0JKRUNUUycsICRldmVudClcIlxuICAoY2xvc2VPdGhlckdSQyk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdHUkNfT0JKRUNUUycsIGZhbHNlKVwiPjwvYXBwLWdyYy1vYmplY3QtbGlzdD4iXX0=
|
|
4020
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92eC13b3JrZmxvdy1lbmdpbmUvc3JjL2xpYi93b3JrZmxvdy1jb21wbGlhbmNlL3dvcmtmbG93LWNvbXBsaWFuY2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctY29tcGxpYW5jZS93b3JrZmxvdy1jb21wbGlhbmNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFLbkMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBR25DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQWtCLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhFLE9BQU8sRUFDTCxjQUFjLEVBQ2QsY0FBYyxHQUNmLE1BQU0saURBQWlELENBQUM7QUFFekQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUzlELE1BQU0sT0FBTywyQkFBMkI7SUFnRHRDLElBQXlCLFVBQVUsQ0FBQyxlQUF3QjtRQUMxRCxJQUFJLGVBQWUsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdC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Q0M3Q3hDLHk1NkdBazlEaUY7OzRGRHI2RHBFLDJCQUEyQjtrQkFOdkMsU0FBUzsrQkFDRSx5QkFBeUI7aWNBTzFCLElBQUk7c0JBQVosS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQXdDbUIsVUFBVTtzQkFBbEMsS0FBSzt1QkFBQyxZQUFZO2dCQUtWLFVBQVU7c0JBQWxCLEtBQUs7Z0JBSUksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFLd0Isa0JBQWtCO3NCQUEvQyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFXZCxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBdVJZLFNBQVM7c0JBQTNCLFNBQVM7dUJBQUMsTUFBTTtnQkFHUixxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBeWpJNkMsa0JBQWtCO3NCQUFwRSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEVkaXRvckNvbmZpZyB9IGZyb20gJ3Zjb21wbHktZWRpdG9yJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJlcXVlbmN5U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZnJlcXVlbmN5L2ZyZXF1ZW5jeS5zZXJ2aWNlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFByb2dyYW1zU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Byb2dyYW1zLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgR1JDX1RZUEVfQVJSQVksXG4gIE9USEVSX0dSQ19DQVJELFxufSBmcm9tICcuLi93b3JrZmxvdy9zaGFyZWQvY29uc3RhbnRzL2dyY09iamVjdC5jb25zdGFudCc7XG5pbXBvcnQgeyBHcmNTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3cvc2hhcmVkL3NlcnZpY2VzL2dyYy5zZXJ2aWNlJztcbmltcG9ydCB7IERFRkFVTFRfMjRIUiwgREVGQVVMVF9USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzL3RpbWUuY29uc3RhbnRzJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLXVzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wbGlhbmNlQ29tbW9uU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2NvbW1vbi13b3JrZmxvdy1zZXJ2aWNlcy9jb21wbGlhbmNlLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9jb21tb24td29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IEZyZXF1ZW5jeU9iamVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZnJlcXVlbmN5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBSZXNwb25zaWJpbGl0eSB9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVzcG9uc2liaWx0eS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL3Byb2dyYW0tbGlzdC9pbnRlcmZhY2VzL2xpc3QtaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvcHJvZ3JhbS1saXN0L2ludGVyZmFjZXMvZGF0YS1zb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XG5pbXBvcnQgeyBBU1NFVFMgfSBmcm9tICcuLi9jb25zdGFudHMvYXNzZXRzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBQUk9HUkFNX0xJU1RfQVBJIH0gZnJvbSAnLi4vY29uc3RhbnRzL2FwaS5jb25zdGFudHMnO1xuaW1wb3J0IHsgTU9OVEhfTkFNRVMgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuY29uc3RhbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtd29ya2Zsb3ctY29tcGxpYW5jZScsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1jb21wbGlhbmNlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd29ya2Zsb3ctY29tcGxpYW5jZS5jb21wb25lbnQubGVzcycsICcuLi9mb3Jtcy5sZXNzJ10sXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd0NvbXBsaWFuY2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKiBEZWZpbmluZyB0aGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgbW9kZSA9ICdDUkVBVEUnO1xuICBASW5wdXQoKSByZXNwb25zaWJpbGl0eUlkOiBudW1iZXIgID0gMDtcbiAgQElucHV0KCkgZnJhbWV3b3JrRGV0YWlsczogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSBpc0VudHJ1c3Q6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBmZWF0dXJlOiBhbnk7XG4gIEBJbnB1dCgpIGFzc2Vzc21lbnREZXRhaWxzOiBhbnk7XG4gIEBJbnB1dCgpIGlzRHVwbGljYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEFTU0VUUyA9IEFTU0VUUztcbiAgYWxsR3JvdXBBc3NpZ25lZTogYm9vbGVhbiA9IHRydWU7XG4gIGFzc2lnbm9ySWQ6IGFueVtdID0gW107XG4gIGFzc2lnbmVlSWRzOiBhbnlbXSA9IFtdO1xuICByZXZpZXdlcklkczogYW55W10gPSBbXTtcbiAgb3ZlcnNlZXJJZHM6IGFueVtdID0gW107XG4gIGRpc2FibGVSYWRpb0Fzc2lnbmVlOiBhbnlbXSA9IFtdO1xuICBpc1Jlc3BvbnNpYmlsaXR5U2ltcGxpZmllZDogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcbiAgcmVjZW50UmVzcG9uc2liaWxpdHlVcmw6IGFueSA9IHtcbiAgICBieVJlc3BvbnNpYmlsaXRpZXM6IHsgdHlwZTogWydyZWNlbnRfcmVzcG9uc2liaWxpdGllcyddLCBzdWJUeXBlOiBbJ0NDJ10gfSxcbiAgICBieVN0YXR1czogeyB0eXBlOiBbXSwgc3ViVHlwZTogW10gfSxcbiAgICBmaWx0ZXJPYmplY3Q6IHtcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiBbXSxcbiAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcbiAgICAgIGVudHJ1c3RlZFRvOiBbXSxcbiAgICAgIHJpc2tJZHM6IFtdLFxuICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXG4gICAgfSxcbiAgICB0aW1lUGVyaW9kRGV0YWlsczogeyB0eXBlOiAnJywgc2VsZWN0ZWRQZXJpb2Q6ICcnLCBzZWxlY3RlZFllYXI6ICcnIH0sXG4gICAgc3RhdHVzOiAnJyxcbiAgfTtcbiAgaXNSZXNwb25zaWJpbGl0eVJjTGlua0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JjTGlzdDogQXJyYXk8YW55PiA9IFtdO1xuICBncmNMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgb3RoZXJHUkNDYXJkOiBhbnkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KE9USEVSX0dSQ19DQVJEKSk7XG4gIHNlbGVjdGVkR1JDVGFiOiBudW1iZXIgPSAwO1xuICBncmNUYWJMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ3JjU2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAnJztcbiAgR1JDX1RZUEVfQVJSQVkgPSBHUkNfVFlQRV9BUlJBWTtcbiAgZ3JjRGF0YVdpdGhUeXBlczogYW55ID0ge1xuICAgIGFzc2V0czogW10sXG4gICAgcHJvY2Vzc2VzOiBbXSxcbiAgICB2ZW5kb3JzOiBbXSxcbiAgICBpbnZlbnRvcnk6IFtdLFxuICB9O1xuICBzZWxlY3RlZENhdGVnb3J5OiBhbnlbXSA9IFtdO1xuICBwcm9ncmFtTGlzdFVybCA9IFBST0dSQU1fTElTVF9BUEk7XG5cbiAgQElucHV0KCdjbG9zZU9uRXNjJykgc2V0IGNsb3NlT25Fc2MoZXNjYXBlQ29uZGl0aW9uOiBib29sZWFuKSB7XG4gICAgaWYgKGVzY2FwZUNvbmRpdGlvbikge1xuICAgICAgdGhpcy5hY3RpdmVEZXNlbGVjdG9yKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIG9yZ0RldGFpbHM6IGFueTtcblxuICB1cmwgPVxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcbiAgQE91dHB1dCgpIHBpY2tlckNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZXNldEZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNoZWNrcG9pbnRDb3VudFVwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByY1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBvcGVuZWRGcm9tITogYW55OyAvL3doZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnQgaXQgd2lsbCBiZSAnUklTS19UUkVBVE1FTlQnXG4gIEBJbnB1dCgpIHNlbGVjdGVkUkM6IG51bWJlciA9IDA7IC8vIDQtNSBkaWdpdCBpZCBvZiBzZWxlY3RlZCByYyBieSBkZWZhdWx0IHdoZW4gb3BlbmVkIGZyb20gcmlzayB0cmVhdG1lbnRcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWRQcm9ncmFtOiBhbnkgPSBudWxsO1xuICBmZWF0dXJlRmxhZ19ncm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0ZWRQcm9ncmFtOiBhbnkgPSBudWxsO1xuICBzZWxlY3RlZFJldmlld2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCdzZWxlY3RlZFByb2dyYW0nKSBzZXQgc2V0U2VsZWN0ZWRQcm9ncmFtKHByb2dyYW06IGFueSkge1xuICAgIGlmIChwcm9ncmFtICYmIE9iamVjdC5rZXlzKHByb2dyYW0pPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtID0gcHJvZ3JhbTtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0gPSBbXTtcbiAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0ucHVzaChwcm9ncmFtKTtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpbmtlZFByb2dyYW0ucHVzaChwcm9ncmFtKTtcbiAgICB9XG4gIH1cblxuICAvKiBDcmVhdGluZyBhbiBldmVudCBlbWl0dGVyLiAqL1xuICBAT3V0cHV0KCkgb25SZW1vdmluZ0NoZWNrcG9pbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaXNBc3Nlc3NtZW50RGlzYWJsZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBhc3NpZ25lZVR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vIGl0IHdpbGwgZW1pdCB3aGVuIGFzc2lnbmVlIHR5cGUgY2hhbmdlXG4gIEBPdXRwdXQoKSBvblJldmlld2VyVHlwZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy8gaXQgd2lsbCBlbWl0IHdoZW4gcmV2aWV3ZXIgdHlwZSBjaGFuZ2VcblxuICBlbnRydXN0TG9hZGVyID0gZmFsc2U7XG4gIHNjcm9sbFRvQm90dG9tID0gZmFsc2U7XG4gIGRlc2NyaXB0aW9uOiBFZGl0b3JDb25maWcgPSB7XG4gICAgbW9kZTogJ3ByaW1lJyxcbiAgICBjb2xvclBhbGV0dGU6IHRydWUsXG4gICAgbGluazogdHJ1ZSxcbiAgICBwbGFjZWhvbGRlcjogJ0FkZCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvbXBsZXRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5JyxcbiAgfTtcbiAgcHJvZ3JhbVBlb3BsZUxpc3Q6IGFueSA9IHtcbiAgICBhc3NpZ25lZXNMaXN0OiBbXSxcbiAgICByZXZpZXdlcnNMaXN0OiBbXSxcbiAgICBvdmVyc2VlcnNMaXN0OiBbXSxcbiAgfTtcbiAgbG9hZGVyID0gZmFsc2U7XG4gIHN1Ym1pdHRlZCA9IGZhbHNlO1xuICBlZGl0RGV0YWlscyE6IGFueTtcbiAgc21pbGV5TWVzc2FnZSA9IGBEb25lIWA7XG4gIGFjdGlvbkJ1dHRvbnMgPSBbXG4gICAge1xuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcbiAgICAgIGlkOiAnYWRkTW9yZScsXG4gICAgfSxcbiAgICB7IGJ1dHRvblRleHQ6ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMnLCBjbGFzczogJ2JsdWUtYnRuJywgaWQ6ICd2aWV3JyB9LFxuICBdO1xuICBzaG93U21pbGV5ID0gZmFsc2U7XG4gIG1lbWJlcklkID0gMDtcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgYXNzaWdub3JzTGlzdExvYWRlZCA9IGZhbHNlO1xuICBhc3NpZ25lZXNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGNhdGVnb3JpZXNMaXN0TG9hZGVkID0gZmFsc2U7XG4gIGdyb3Vwc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgc2VsZWN0ZWRGcmFtZXdvcmtWYWx1ZXMhOiBhbnk7XG4gIGhhc1Jldmlld2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gdXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3NpZ25vcnNMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3NpZ25lZXNMaXN0OiBhbnlbXSA9IFtdO1xuICByZXZpZXdlcnNMaXN0OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlQXNzaWduZWVJZHM6IGFueVtdID0gW107XG4gIGRpc2FibGVSZXZpZXdlcklkczogYW55W10gPSBbXTtcbiAgZGlzYWJsZU92ZXJzZWVySWRzOiBhbnlbXSA9IFtdO1xuICByZXZpZXdlck1lbWJlcklkc0xpc3Q6IGFueVtdID0gW107XG4gIGdyb3VwT3ZlcnNlZXJMaXN0OiBhbnlbXSA9IFtdO1xuICBncm91cFJldmlld2VyTGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBBc3NpZ25lZUxpc3Q6IGFueVtdID0gW107XG4gIG92ZXJzZWVyc0xpc3Q6IGFueVtdID0gW107XG4gIGFsbFVzZXJzTGlzdDogYW55W10gPSBbXTtcbiAgYmVoYWxmT2ZVc2Vyc0xpc3Q6IGFueVtdID0gW107XG4gIGFzc2lnbmVlVXNlckxpc3Q6IGFueVtdID0gW107XG4gIHJldmlld2VyVXNlckxpc3Q6IGFueVtdID0gW107XG4gIG92ZXJzZWVyVXNlckxpc3Q6IGFueVtdID0gW107XG4gIG92ZXJzZWVyVXNlck5vdGlmeUxpc3Q6IGFueVtdID0gW107XG4gIGFsbENhdGVnb3JpZXM6IGFueVtdID0gW107XG4gIGFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0OiBhbnlbXSA9IFtdO1xuICBhc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdDogYW55W10gPSBbXTtcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcbiAgT3JnR3JvdXA6IGFueVtdID0gW107XG4gIGFkbWluc0xpc3Q6IGFueVtdID0gW107XG4gIHJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3Q6IGFueVtdID0gW107XG4gIGNhdGVnb3J5TGlzdDogYW55W10gPSBbXTtcbiAgbm9uUmVtb3ZhYmxlVXNlcnNMaXN0OiBhbnlbXSA9IFtdO1xuICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IE51bWJlciA9IDE7XG5cbiAgcmVzcG9uc2liaWxpdHlGb3JtOiBhbnkgPSB7XG4gICAgYXNzaWdub3JzOiB7XG4gICAgICBlbmFibGU6IGZhbHNlLFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICByZXNwb25zaWJpbGl0eToge1xuICAgICAgbmFtZTogJycsXG4gICAgICBrZXlSZXNwb25zaWJpbGl0eTogZmFsc2UsXG4gICAgfSxcbiAgICBhc3NpZ25lZUdyb3Vwczoge1xuICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTllPTkUnLFxuICAgICAgbGlzdDogW10sXG4gICAgfSxcbiAgICBhc3NpZ25lZXM6IHtcbiAgICAgIHdob0NhbkNvbXBsZXRlOiAnQU5ZX09ORScsXG4gICAgICBsaXN0OiBbXSxcbiAgICB9LFxuICAgIGFsbG93RWRpdER1ZURhdGU6IGZhbHNlLFxuICAgIGZyZXF1ZW5jeTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIG9iamVjdGl2ZTogJycsXG4gICAgcmM6IFtdLFxuICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogMSxcbiAgICBjYXRlZ29yeTogW10sXG4gICAgcHJvZ3JhbTogW10sXG4gICAgcHJvZ3JhbV9zZWxlY3RlZF9pZHM6IFtdLFxuICAgIGNoZWNrcG9pbnRJbnN0cnVjdGlvbjogJycsXG4gICAgY3VzdG9tVGFnczogW10sXG4gICAgY2hlY2twb2ludHM6IFtdLFxuICAgIHJldmlld2Vyczoge1xuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiB0cnVlLFxuICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogMixcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogMixcbiAgICAgIH0sXG4gICAgICBsaXN0OiBbXSxcbiAgICB9LFxuICAgIGdyb3VwUmV2aWV3ZXJzOiB7XG4gICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6IHRydWUsXG4gICAgICByZXZpZXdGcmVxdWVuY3k6IHtcbiAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxuICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiAyLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgIH0sXG4gICAgb3ZlcnNlZXJzOiB7XG4gICAgICBub3RpZnlMaXN0OiBbXSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgIH0sXG4gICAgb3ZlcnNlZXJzR3JvdXBzOiB7XG4gICAgICBub3RpZnlMaXN0OiBbXSxcbiAgICAgIGxpc3Q6IFtdLFxuICAgIH0sXG4gICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcbiAgICAgIGZvcm1hdFJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcbiAgICAgIGV2aWRlbmNlUmVxdWlyZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgYXNzdXJhbmNlTGlzdDogW10sXG4gICAgcmVxdWlyZXNBdWRpdExpc3Q6IFtdLFxuICAgIHJpc2tDbGFzczogJ2xvdycsXG4gICAgcmlza01hdHJpeDogJzAsMCwwLDAsMCwwJyxcbiAgICBhdWRpdF9jYXRlZ29yeV9kZXRhaWxzOiB7XG4gICAgICBjYXRlZ29yeV9pZDogMCxcbiAgICAgIHNhbXBsZTogNSxcbiAgICAgIHBlcmNlbnRhZ2U6IDMwLFxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBERUZBVUxUXzI0SFIsXG4gICAgfSxcbiAgICBhc3Nlc3NtZW50OiB7XG4gICAgICBjYXRlZ29yeV9pZDogJycsXG4gICAgICBhc3Nlc3NtZW50X2lkOiAnJyxcbiAgICB9LFxuICAgIG5ld19jaGVja3BvaW50czoge30sXG4gICAgbGlua2VkUHJvZ3JhbTogW10sXG4gICAgc2VsZWN0ZWRHUkNPYmplY3RzOiBbXSxcbiAgfTtcbiAgbW9yZU9wdGlvbnM6IGFueSA9IHtcbiAgICBPQkpFQ1RJVkU6IGZhbHNlLFxuICAgIFJDOiBmYWxzZSxcbiAgICBDQVRFR09SWTogZmFsc2UsXG4gICAgUFJPR1JBTTogZmFsc2UsXG4gICAgRk9STUFURV9FVklERU5DRTogZmFsc2UsXG4gICAgQ0hFQ0tQT0lOVFM6IGZhbHNlLFxuICAgIEFTU0VTU01FTlQ6IGZhbHNlLFxuICAgIFJJU0tfQ0xBU1NJRklDQVRJT046IGZhbHNlLFxuICAgIFJFVklFV0VSOiBmYWxzZSxcbiAgICBPVkVSU0VFUjogZmFsc2UsXG4gICAgQVNTVVJBTkNFOiBmYWxzZSxcbiAgICBBUFBTOiBmYWxzZSxcbiAgICBSRVFVSVJFU19BVURJVDogZmFsc2UsXG4gICAgQ0hFQ0tQT0lOVFNfTkVXOiBmYWxzZSxcbiAgICBHUkNfT0JKRUNUUzogZmFsc2UsXG4gIH07XG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gIHNpZGVTZWxlY3RvckVsZW1lbnRzOiBhbnkgPSBbXG4gICAgJ2Fzc3VyYW5jZScsXG4gICAgJ2ZyYW1ld29yaycsXG4gICAgJ2Fzc2lnbm9ycycsXG4gICAgJ2Fzc2lnbmVlcycsXG4gICAgJ2NhdGVnb3J5JyxcbiAgICAncHJvZ3JhbScsXG4gICAgJ3JjJyxcbiAgICAnY2hlY2twb2ludHMnLFxuICAgICdmcmVxdWVuY3knLFxuICAgICdyZXZpZXdlcicsXG4gICAgJ3Jldmlld2VyRnJlcXVlbmN5JyxcbiAgICAnb3ZlcnNlZXInLFxuICAgICdvdmVyc2Vlck5vdGlmeScsXG4gICAgJ3Jpc2tDYWxjdWxhdG9yJyxcbiAgICAnaXNBc3Nlc3NtZW50JyxcbiAgICAncmVxdWlyZXNfYXVkaXQnLFxuICAgICdjaGVja3BvaW50cy1uZXcnLFxuICAgICdHUkNfT0JKRUNUUycsXG4gIF07XG5cbiAgZm9jdXMgPSB7XG4gICAgcmVzcG9uc2liaWxpdHlOYW1lOiBmYWxzZSxcbiAgICBkZXNjcmlwdGlvbjogZmFsc2UsXG4gICAgb2JqZWN0aXZlOiBmYWxzZSxcbiAgfTtcblxuICBjYXRlZ29yaWVzOiBhbnkgPSB7XG4gICAgcmVndWxhdGlvbnM6IHtcbiAgICAgIGxpc3Q6IFtdLFxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXSxcbiAgICB9LFxuICAgIHN0YW5kYXJkczoge1xuICAgICAgbGlzdDogW10sXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdLFxuICAgIH0sXG4gICAgaW50ZXJuYWxDb250cm9sczoge1xuICAgICAgbGlzdDogW10sXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdLFxuICAgIH0sXG4gICAgb3RoZXJzOiB7XG4gICAgICBsaXN0OiBbXSxcbiAgICAgIHNlbGVjdGVkTGlzdDogW10sXG4gICAgfSxcbiAgfTtcblxuICBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcblxuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXG4gICAgeyBuYW1lOiAnTG93JywgdmFsdWU6ICdsb3cnLCBjbGFzczogJ2xvdycgfSxcbiAgICB7IG5hbWU6ICdMb3ctTWVkaXVtJywgdmFsdWU6ICdsb3dfbWVkaXVtJywgY2xhc3M6ICdsb3ctbWVkJyB9LFxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6ICdtZWRpdW1faGlnaCcsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXG4gICAgeyBuYW1lOiAnSGlnaCcsIHZhbHVlOiAnaGlnaCcsIGNsYXNzOiAnaGlnaCcgfSxcbiAgXTtcblxuICBhc3NpZ25vck1vZGUgPSAnY2hlY2tib3gnO1xuICByY01vZGUgPSAnY2hlY2tib3gnO1xuICBpbnZhbGlkVHlwZSA9ICcnO1xuICByZXNwb25zaWJpbGl0eVBheWxvYWQhOiBhbnk7XG4gIGFzc2lnbmVlUmFkaW9TZWxlY3QgPSBmYWxzZTtcbiAgcHJvZ3JhbXNMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIC8vIGZyZXF1ZW5jeSB2YXJpYWJsZSBkZWNsYXJhdGlvblxuICBmcmVxdWVuY3lEZXRhaWxzID0ge1xuICAgIHBhdHRlcm46ICcnLFxuICAgIG5vdGlmaWNhdGlvblBlbmRpbmc6IDAsXG4gICAgZGF0ZU9mTW9kaWZpZWQ6IDAsXG4gICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgc2VsZWN0ZWRSZXBvcnQ6IDAsXG4gICAgbGlmZWN5Y2xlOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgc3RhcnRPblRoZURheTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHdpbmRvdzogMCxcbiAgICBmYWlsZWQ6IDAsXG4gICAgdGltZTogREVGQVVMVF9USU1FLFxuICAgIGZhaWxlZFRpbWU6ICcnLFxuICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgb25Db21wbGV0aW9uUmVwb3J0RGV0YWlsczoge30sXG4gIH07XG5cbiAgZnJlcXVlbmN5T2JqZWN0OiBGcmVxdWVuY3lPYmplY3QgfCBudWxsID0gbnVsbDtcbiAgZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnSG93IG9mdGVuIGRvZXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9jY3VyPyc7XG4gIHNob3J0TW9udGg6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgaXNFZGl0V2hhdDogQm9vbGVhbiA9IHRydWU7XG4gIGlzRnJhbWV3b3JrQXZhaWxhYmxlID0gMTtcbiAgaXNOb3RpZmljYXRpb25QZW5kaW5nID0gMDtcblxuICBhc3N1cmFuY2VGbGFnITogYW55O1xuICByaXNrQ2xhc3NpZmljYXRpb25GbGFnITogYW55O1xuICBoaWRkZW5MaXN0OiBhbnlbXSA9IFtdO1xuICBzdWJzY3JpcHRpb25EZXRhaWxzITogYW55O1xuICBpc1Jpc2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0R1cGxpY2F0ZUVudHJ1c3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYXVkaXRUaW1lOiBzdHJpbmcgPSBERUZBVUxUX1RJTUU7XG4gIHNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlOiBudW1iZXIgPSAyO1xuICBzYW1wbGVWYWx1ZTogYW55O1xuICBzYW1wbGVQZXJjZW50YWdlOiBhbnk7XG4gIHNlbGVjdGVkU2FtcGxlITogbnVtYmVyO1xuICBpc1NhbXBsZTogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wQ2hlY2tWYWx1ZTogbnVtYmVyID0gLTE7XG4gIGlzQXNzZXNzbWVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBtYW5hZ2VQZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNoZWNrcG9pbnRDb3VudDogbnVtYmVyID0gMDtcbiAgcm9sZUJhc2VkUGVybWlzc2lvbnMhOiBhbnk7XG4gIGlzR3JvdXBBc3NpZ25lZDogYm9vbGVhbiA9IGZhbHNlO1xuICByZXNwb25zaWJpbGl0eURhdGEhOiBhbnk7XG4gIG9yaWdpbmFsQXNzaWduZWUhOiBhbnk7XG4gIHVzZXJMaXN0TG9hZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIGFzc2lnbm9yc0xpc3RMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmF3UmVzcG9uc2liaWxpdHk6IGFueTtcbiAgb3RoZXJHUkNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG4gIGFsbG93RWRpdER1ZURhdGVGZWF0dXJlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxQcm9nYW1TZWxlY3RlZDogYW55W10gPSBbXTtcbiAgb25Db21wbGV0aW9uUmVzcG9uc2liaWxpdHk6IGFueTtcblxuXG4gIEBWaWV3Q2hpbGQoJ3doYXQnKSB3aGF0SW5wdXQhOiBFbGVtZW50UmVmO1xuICB1blN1YnNjcmliZVByb2dyYW0gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBJbnB1dCgpIHJlc3BvbnNpYmlsaXR5RGV0YWlsczogYW55O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZnJlcXVlbmN5U2VydmljZTogRnJlcXVlbmN5U2VydmljZSxcbiAgICBwcml2YXRlIHVpS2l0U2VydmljZTogVWlLaXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb246IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvZ3JhbVNlcnZpY2U6IFByb2dyYW1zU2VydmljZSxcbiAgICBwcml2YXRlIGdyY1NlcnZpY2U6IEdyY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcmdhbml6YXRpb25Vc2VyU2VydmljZTogT3JnYW5pemF0aW9uVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wbGlhbmNlQ29tbW9uU2VydmljZTogQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcmdhbml6YXRpb25Db21tb25TZXJ2aWNlOiBPcmdhbml6YXRpb25Db21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgaWZyYW1lU2VydmljZTogSWZyYW1lU2VydmljZSxcblxuICApIHtcbiAgICB0aGlzLm9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U/LmdldE9yZ1VzZXJJbmZvKCk/LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY29tcGxpYW5jZVN1Ym1vZHVsZSA9XG4gICAgICAgICAgcmVzPy5yb2xlQWN0aW9uc1tcbiAgICAgICAgICAgIHJlcz8ucm9sZUFjdGlvbnM/LmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGU/Lm1vZHVsZU5hbWUgPT09ICdjb21wbGlhbmNlJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIF0/LnN1Yk1vZHVsZTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPVxuICAgICAgICAgIGNvbXBsaWFuY2VTdWJtb2R1bGVbXG4gICAgICAgICAgICBjb21wbGlhbmNlU3VibW9kdWxlPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlPy5zdWJNb2R1bGVOYW1lID09PSAnUHJvZ3JhbXMnXG4gICAgICAgICAgICApXG4gICAgICAgICAgXT8ucGVybWlzc2lvbnM7XG4gICAgICAgIHRoaXMubWFuYWdlUGVybWlzc2lvbiA9IHBlcm1pc3Npb25zW1xuICAgICAgICAgIHBlcm1pc3Npb25zPy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGU/Lm5hbWUgPT09ICdtYW5hZ2UgcHJvZ3JhbXMnKVxuICAgICAgICBdPy5lbmFibGVcbiAgICAgICAgICA/IHRydWVcbiAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5tYW5hZ2VQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NBVEVHT1JZJyk7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ1BST0dSQU0nKTtcbiAgICAgICAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRGZWF0dXJlRmxhZ3MoKTtcbiAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5nZXRJbml0aWFsRGF0YSgpO1xuICAgIHRoaXMucG9wdWxhdGVSQ0xpc3QoKTtcbiAgfVxuXG4gIHBvcHVsYXRlUkNMaXN0KCkge1xuICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCcgJiYgdGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xuICAgICAgdGhpcy5nZXRSQ0xpc3QoKTtcbiAgICB9XG4gIH1cblxuICBzZXRGZWF0dXJlRmxhZ3MoKSB7XG4gICAgdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcbiAgICAgICdmZl9yZXNwb25zaWJpbGl0eV9ncm91cHMnXG4gICAgKTtcbiAgICB0aGlzLmlzUmVzcG9uc2liaWxpdHlTaW1wbGlmaWVkID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoXG4gICAgICAnZmZfcmVzcG9uc2liaWxpdHlfc2ltcGxpZmljYXRpb24nXG4gICAgKTtcbiAgICB0aGlzLmlzUmVzcG9uc2liaWxpdHlSY0xpbmtFbmFibGVkID0gdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoXG4gICAgICAnZmZfcmVzcG9uc2liaWxpdHlfcmNfbGluaydcbiAgICApO1xuICAgIHRoaXMuYWxsb3dFZGl0RHVlRGF0ZUZlYXR1cmVGbGFnID1cbiAgICAgIHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKCdmZl9lZGl0X2R1ZV9kYXRlJyk7XG4gIH1cblxuICBnZXRJbml0aWFsRGF0YSgpIHtcbiAgICB0aGlzLmlzRHVwbGljYXRlID0gdGhpcy5yZXNwb25zaWJpbGl0eURldGFpbHM/LmR1cGxpY2F0ZSA/PyBmYWxzZTtcbiAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQVNTRVNTTUVOVCcpO1xuICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdBU1NVUkFOQ0UnKTtcbiAgICB0aGlzLmdldEFzc2lnbmVlc0xpc3QoKTtcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XG4gICAgdGhpcy5nZXRPcmdhbml6YXRpb25EZXRhaWxzKCk7XG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xuICAgIHRoaXMuc2hvcnRNb250aCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5tb250aEFycmF5Lm1hcCgobW9udGgpID0+XG4gICAgICBtb250aC5zdWJzdHJpbmcoMCwgMylcbiAgICApO1xuICAgIGlmKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJyl7XG4gICAgICB0aGlzLmdldFJDRGV0YWlsc2luUmlza1RyZWF0bWVudCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xuICAgICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcbiAgICAgIHRoaXMubWVtYmVySWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlci51aWQ7XG4gICAgICB0aGlzLmhpZGRlbkxpc3QucHVzaCgnQ0hFQ0tQT0lOVFMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QoKTtcbiAgICB9XG4gICAgdGhpcy5nZXRPcmdEZXRhaWxzKCk7XG4gICAgdGhpcy5nZXRTdWJzY3JpcHRpb25EZXRhaWwoKTtcbiAgICB0aGlzLnNldFJlc3BvbnNpYmlsaXR5TmFtZSgpO1xuICAgIHRoaXMuaGlkZUVsZW1lbnRzRnJvbU1vcmVPcHRpb25zLmVtaXQodGhpcy5oaWRkZW5MaXN0KTtcbiAgfVxuXG4gIGdldFJDRGV0YWlsc2luUmlza1RyZWF0bWVudCgpe1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gdGhpcy5zZXRMaXN0KFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LFxuICAgICAgW3RoaXMuc2VsZWN0ZWRSQ10sXG4gICAgICAnaXRlbV9pZCdcbiAgICApO1xuICAgIHRoaXMubW9yZU9wdGlvbnMuUkMgPSB0cnVlO1xuICB9XG5cbiAgZ2V0T3JnRGV0YWlscygpIHtcbiAgICB0aGlzLm9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U/LmdldE9yZ0RldGFpbHNJbmZvKCk/LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jpc2tFbmFibGUgPSByZXM/LmVuYWJsZV9yaXNrY2xhc3MgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIGlmICghcmVzPy5lbmFibGVfcmlza2NsYXNzKSB7XG4gICAgICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ1JJU0tfQ0xBU1NJRklDQVRJT04nKTtcbiAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN1YnNjcmlwdGlvbkRldGFpbCgpIHtcbiAgICB0aGlzLm9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U/LmdldFN1YnNjcmlwdGlvbkRldGFpbHNJbmZvKCk/LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzID0gcmVzO1xuICAgICAgICB0aGlzLmhpZGVPcHRpb25Gcm9tTW9yZU9wdGlvbnMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGhpZGVPcHRpb25Gcm9tTW9yZU9wdGlvbnMoKSB7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uRGV0YWlsc1swXT8uYXNzZXNzbWVudF9mbGFnKSB7XG4gICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKCdBU1NFU1NNRU5UJyk7XG4gICAgfVxuXG4gICAgaWYodGhpcy5zdWJzY3JpcHRpb25EZXRhaWxzWzBdPy5hc3N1cmFuY2VfZmxhZyl7XG4gICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKCdBU1NVUkFOQ0UnKTtcbiAgICB9XG5cbiAgICB0aGlzLmhpZGRlbkxpc3QgPSB0aGlzLmhpZGRlbkxpc3Q/LmZpbHRlcihcbiAgICAgIChlbGUpID0+ICF2aXNpYmxlT3B0aW9ucy5pbmNsdWRlcyhlbGUpXG4gICAgKTtcbiAgICB0aGlzLmhpZGVFbGVtZW50c0Zyb21Nb3JlT3B0aW9ucy5lbWl0KHRoaXMuaGlkZGVuTGlzdCk7XG4gIH1cblxuICBhY3RpdmF0ZVNlbGVjdG9yKHR5cGU6IGFueSwgZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gZXZlbnQgPyB0eXBlIDogJyc7XG4gICAgaWYgKHRoaXMuc2lkZVNlbGVjdG9yRWxlbWVudHM/LmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdChldmVudCk7XG4gICAgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnY2hlY2twb2ludHMtbmV3JzpcbiAgICAgICAgdGhpcy5hdXRoU2VydmljZS5wcmV2aWV3UGFuZWwubmV4dChldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmMnOlxuICAgICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbm9ycyc6XG4gICAgICAgIHRoaXMuZ2V0QXNzaWdub3JzTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXRSZXNwb25zaWJpbGl0eU5hbWUoKSB7XG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfdHlwZSA9PT0gJ2NvbXBsaWFuY2VfYXVkaXQnKSB7XG4gICAgICBjb25zdCBhc3Nlc3NtZW50RGF0YSA9IHtcbiAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgdmFsdWU6ICdBdWRpdDogJyArIHRoaXMuYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfbmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBhc3Nlc3NtZW50X2lkOiB0aGlzLmFzc2Vzc21lbnREZXRhaWxzLmFpZCxcbiAgICAgICAgY2F0ZWdvcnlfaWQ6IHRoaXMuYXNzZXNzbWVudERldGFpbHMuY2F0ZWdvcnlbMF0/Ll9pZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2V0QXNzZXNzbWVudERhdGEoW3RoaXMuYXNzZXNzbWVudERldGFpbHNdLCBwYXlsb2FkLCAnYXNzZXNzbWVudCcpO1xuXG4gICAgICB0aGlzLndoYXRDaGFuZ2VkKGFzc2Vzc21lbnREYXRhKTtcbiAgICAgIHRoaXMuaGlkZGVuTGlzdC5wdXNoKCdDSEVDS1BPSU5UUycpO1xuICAgICAgdGhpcy5oaWRkZW5MaXN0LnB1c2goJ0NIRUNLUE9JTlRTX05FVycpO1xuICAgICAgdGhpcy5oaWRlRWxlbWVudHNGcm9tTW9yZU9wdGlvbnMuZW1pdCh0aGlzLmhpZGRlbkxpc3QpO1xuICAgIH1cbiAgfVxuXG4gIHdoYXRDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXNwb25zaWJpbGl0eS5uYW1lID0gZXZlbnQ/LnRhcmdldD8udmFsdWU7XG4gICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZS50cmltKCkgIT09ICcnKSB7XG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aGF0Jykge1xuICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNFZGl0V2hhdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2ZURlc2VsZWN0b3IoKSB7XG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9ICcnO1xuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgfVxuXG4gIGFkZE1vcmVJbmZvKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gdHJ1ZTtcbiAgICB0aGlzLm1vcmVPcHRpb25zW2V2ZW50LmNvZGVdID0gZXZlbnQuY2hlY2tlZDtcbiAgfVxuXG4gIG9uUmNUeXBlQ2hhbmdlKHNlbGVjdGVkVHlwZTogTnVtYmVyKSB7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSBzZWxlY3RlZFR5cGUgPz8gMTtcbiAgfVxuXG4gIGdldFJDTGlzdChwcm9ncmFtX2lkPzogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYgKHByb2dyYW1faWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XG4gICAgfVxuICAgIHRoaXMuY29tcGxpYW5jZUNvbW1vblNlcnZpY2U/LmdldFJjTGlzdEluZm8ocGFyYW1zKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSByZXM7XG4gICAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHModGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMsICdyY2lkJyk7XG4gICAgICAgIGNvbnN0IFJDID0gdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgIGlkcz8uaW5jbHVkZXMoZWxlbWVudC5yY2lkKVxuICAgICAgICApO1xuICAgICAgICBpZiAoUkM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjID0gUkM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCcpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCxcbiAgICAgICAgICAgIFt0aGlzLnNlbGVjdGVkUkNdLFxuICAgICAgICAgICAgJ3JjaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlJDID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJ1dHRvblRleHQ6ICdHbyB0byByaXNrIHRyZWF0bWVudCcsXG4gICAgICAgICAgICAgIGNsYXNzOiAnYmx1ZS1idG4nLFxuICAgICAgICAgICAgICBpZDogJ3ZpZXcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIC8vIFByZXZpb3VzbHkgdGhlcmUgd2FzIG9ubHkgUkMgd2FzIGVtaXR0aW5nIHdoaWNoIG1hZGUgdGhlIGNoZWNrZWQgb3B0aW9ucyB0byBkZSBjaGVjayBub3cgY2hlY2tpbmcgdGhlIGNvbmRpdGlvbiBhbmQgc2VuZGluZyBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcbiAgICAgICAgICBsZXQgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5tb3JlT3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRoaXMubW9yZU9wdGlvbnNba2V5XSkge1xuICAgICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRVc2VyRGV0YWlscygpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25CdXR0b25zPy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U/LmdldE9yZ1VzZXJJbmZvKCk/LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nID0gcmVzPy5ub3RpZmljYXRpb25fcGVuZGluZ19mbGFnO1xuICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1sxXS5idXR0b25UZXh0ID0gdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmdcbiAgICAgICAgICAgID8gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyBpbiBRdWV1ZSdcbiAgICAgICAgICAgIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyc7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRPcmdhbml6YXRpb25EZXRhaWxzKCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnRGV0YWlsc0luZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzRnJhbWV3b3JrQXZhaWxhYmxlID0gcmVzPy5lbmFibGVfcmVzcG9uc2liaWxpdHlfZnJhbWV3b3JrO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZ2V0Q2F0ZWdvcmllc0xpc3QoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXM7XG4gICAgICAgIHRoaXMuYWxsQ2F0ZWdvcmllcyA9IGNsb25lRGVlcChyZXMpO1xuICAgICAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2F0ZWdvcmllcy5vdGhlcnMubGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMucmVndWxhdGlvbnMubGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAyKSB7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMuc3RhbmRhcmRzLmxpc3QucHVzaChlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMykge1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLmludGVybmFsQ29udHJvbHMubGlzdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZmlsdGVyTGlzdHNBY2NvcmRpbmdUb1Byb2dyYW0ocHJvZ3JhbV9pZD86IHN0cmluZykge1xuICAgIHRoaXMudW5TdWJzY3JpYmVQcm9ncmFtLm5leHQoKTtcbiAgICB0aGlzLnVuU3Vic2NyaWJlUHJvZ3JhbS5jb21wbGV0ZSgpO1xuICAgIGlmIChwcm9ncmFtX2lkICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XG4gICAgICB0aGlzLmdldFBlb3BsZUxpc3RBZ2FpbnN0UElEKHByb2dyYW1faWQpO1xuICAgICAgdGhpcy5nZXRSQ0xpc3QocHJvZ3JhbV9pZCk7XG4gICAgICB0aGlzLmdldEdyb3Vwc0xpc3QocHJvZ3JhbV9pZCk7XG4gICAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2V0QXNzaWduZWVzTGlzdCgpO1xuICAgICAgdGhpcy5nZXRSQ0xpc3QoKTtcbiAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xuICAgICAgdGhpcy5nZXRBc3NpZ25vcnNMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UHJvZ3JhbURldGFpbHMocHJvZ3JhbUlkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMucHJvZ3JhbVNlcnZpY2UuZ2V0UHJvZ3JhbShwcm9ncmFtSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzPy5hc3Nlc3NtZW50ICYmXG4gICAgICAgIHJlcz8uYXNzZXNzbWVudD8ubGVuZ3RoICYmXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KT8ubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlBc3Nlc3NtZW50ID0gcmVzPy5hc3Nlc3NtZW50LmZpbHRlcihcbiAgICAgICAgICAoYXNzZXNzbWVudDogYW55KSA9PlxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkID09PVxuICAgICAgICAgICAgYXNzZXNzbWVudD8uY2F0ZWdvcnlfaWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNhdGVnb3J5QXNzZXNzbWVudD8ubGVuZ3RoICYmXG4gICAgICAgICAgY2F0ZWdvcnlBc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50SWRzPy5sZW5ndGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgaXNFeGlzdCA9IGNhdGVnb3J5QXNzZXNzbWVudFswXT8uYXNzZXNzbWVudElkcz8uaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKCFpc0V4aXN0KSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0ge1xuICAgICAgICAgICAgICBhc3Nlc3NtZW50X2lkOiAnJyxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IHtcbiAgICAgICAgICAgIGFzc2Vzc21lbnRfaWQ6ICcnLFxuICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6ICcnLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBnZXRMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbShwcm9ncmFtX2lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldFBlb3BsZUxpc3RBZ2FpbnN0UElEKHByb2dyYW1faWQpO1xuICAgIHRoaXMuZ2V0UkNMaXN0KHByb2dyYW1faWQpO1xuICAgIHRoaXMuZ2V0R3JvdXBzTGlzdChwcm9ncmFtX2lkKTtcbiAgICB0aGlzLmdldEFzc2lnbm9yc0xpc3QocHJvZ3JhbV9pZCk7XG4gIH1cblxuICBnZXRBc3NpZ25vcnNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcbiAgICB9XG4gICAgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZS5nZXRBc3NpZ25vcnNMaXN0KHBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYmVoYWxmT2ZVc2Vyc0xpc3QgPSByZXM7XG4gICAgICAgIGlmIChwcm9ncmFtX2lkKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVyID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmFzc2lnbm9yc0xpc3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgaWYgKHByb2dyYW1faWQpIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hMaXN0c1doaWxlUHJvZ3JhbVNlbGVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBnZXRBc3NpZ25lZXNMaXN0KHByb2dyYW1faWQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcbiAgICBpZiAocHJvZ3JhbV9pZCkge1xuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbV9pZHMnLCBwcm9ncmFtX2lkKTtcbiAgICB9XG4gICAgdGhpcy51c2VyTGlzdExvYWRlciA9IHRydWU7XG4gICAgdGhpcy5mZXRjaEFzc2lnbmVlKHByb2dyYW1faWQpO1xuICB9XG5cbiAgZmV0Y2hBc3NpZ25lZShwcm9ncmFtX2lkPzogc3RyaW5nKSB7XG4gICAgdGhpcy5vcmdhbml6YXRpb25Vc2VyU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2VycygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFsbFVzZXJzTGlzdCA9IHJlcy5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgIHVzZXIubWVtYmVyX25hbWUgPSB1c2VyLmVtcGxveWVlX25hbWU7XG4gICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocHJvZ3JhbV9pZCkge1xuICAgICAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXNzaWduZWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnVzZXJMaXN0TG9hZGVyID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnVzZXJMaXN0TG9hZGVyID0gZmFsc2U7XG4gICAgICAgIGlmIChwcm9ncmFtX2lkKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0UGVvcGxlTGlzdEFnYWluc3RQSUQocHJvZ3JhbV9pZDogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgaWYgKHByb2dyYW1faWQpIHtcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1faWRzJywgcHJvZ3JhbV9pZCk7XG4gICAgICB0aGlzLnVzZXJMaXN0TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5vcmdhbml6YXRpb25Vc2VyU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2VycygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldE9yZ2FuaXphdGlvblVzZXJMaXN0KHJlcyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9pZHMgfHxcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdD8ubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QsXG4gICAgICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgYWxsSWRzID0gW1xuICAgICAgICAgICAgICAuLi5uZXcgU2V0KGlkcyksXG4gICAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfaWRzXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgICBhbGxJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYXNzaWdub3JzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X2Fzc2lnbmVlX2lkcz8uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgZWxlbWVudD8ubXlfbWVtYmVyX2lkXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoYXNzaWdub3JzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZVByb2dyYW1Bc3NpZ25lZUdyb3VwKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X3Jldmlld2VycyB8fFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCB8fFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QsXG4gICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYWxsSWRzID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChpZHMpLFxuICAgICAgICAgICAgLi4ubmV3IFNldCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfcmV2aWV3ZXJzKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IHJldmlld2VycyA9IHRoaXMucmV2aWV3ZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgIGFsbElkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gY29uc3QgcmV2aWV3ZXJzID0gdGhpcy5yZXZpZXdlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfcmV2aWV3ZXJzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZXZpZXdlcnM/Lmxlbmd0aCB8fFxuICAgICAgICAgICAgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzICYmXG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gcmV2aWV3ZXJzO1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSByZXZpZXdlcnM7XG4gICAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSB0aGlzLmFzc2lnblVzZXJNZW1iZXJJZChcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLlJFVklFV0VSID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUHJvZ3JhbVJldmlld2VyR3JvdXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycyB8fFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCB8fFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QsXG4gICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgYWxsRGVmYXVsdENDSWRzID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChpZHMpLFxuICAgICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5jY19tZW1iZXJfZW1haWxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBvdmVyc2VlcnNDQyA9IHRoaXMub3ZlcnNlZXJzTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgICBhbGxEZWZhdWx0Q0NJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZClcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIGNvbnN0IG92ZXJzZWVycyA9IHRoaXMub3ZlcnNlZXJzTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X292ZXJzZWVycy5jY19lbWFpbC5pbmNsdWRlcyhlbGVtZW50Lm15X21lbWJlcl9pZCkpO1xuICAgICAgICAgIGNvbnN0IG5vdGlmeUxpc3RJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0LFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0ZhaWx1cmVJZHMgPSBbXG4gICAgICAgICAgICAuLi5uZXcgU2V0KG5vdGlmeUxpc3RJZHMpLFxuICAgICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfb3ZlcnNlZXJzPy5mYWlsdXJlX2NjX21lbWJlcl9lbWFpbFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdO1xuICAgICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDRmFpbHVyZSA9IHRoaXMub3ZlcnNlZXJzTGlzdD8uZmlsdGVyKFxuICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgYWxsRGVmYXVsdENDRmFpbHVyZUlkcz8uaW5jbHVkZXMoZWxlbWVudD8ubXlfbWVtYmVyX2lkKVxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gY29uc3Qgbm90aWZ5T3ZlcnNlZXJzID0gdGhpcy5vdmVyc2VlcnNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdLmRlZmF1bHRfb3ZlcnNlZXJzLmZhaWx1cmVfY2NfZW1haWwuaW5jbHVkZXMoZWxlbWVudC5teV9tZW1iZXJfaWQpKTtcbiAgICAgICAgICAvLyBpZiAob3ZlcnNlZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAvLyAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gb3ZlcnNlZXJzO1xuICAgICAgICAgIC8vICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vIGlmIChub3RpZnlPdmVyc2VlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgIC8vICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBub3RpZnlPdmVyc2VlcnM7XG4gICAgICAgICAgLy8gICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICBpZiAob3ZlcnNlZXJzQ0M/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBvdmVyc2VlcnNDQztcbiAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKFxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG92ZXJzZWVyc0NDRmFpbHVyZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IG92ZXJzZWVyc0NDRmFpbHVyZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQoXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3QgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3QgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVQcm9ncmFtT3ZlcnNlZXJHcm91cCgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9yZU9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodGhpcy5tb3JlT3B0aW9uc1trZXldKSB7XG4gICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMudXNlckxpc3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgdGhpcy51c2VyTGlzdExvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRPcmdhbml6YXRpb25Vc2VyTGlzdChyZXM6IGFueSkge1xuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IHJlcy5hc3NpZ25lZS5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH0pO1xuICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IHJlcy5vdmVyc2Vlci5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH0pO1xuICAgIHRoaXMucmV2aWV3ZXJzTGlzdCA9IHJlcy5yZXZpZXdlci5tYXAoKHVzZXI6IGFueSkgPT4ge1xuICAgICAgdXNlci5tZW1iZXJfbmFtZSA9IHVzZXIuZW1wbG95ZWVfbmFtZTtcbiAgICAgIHJldHVybiB1c2VyO1xuICAgIH0pO1xuICAgIHRoaXMucHJvZ3JhbVBlb3BsZUxpc3QgPSB7XG4gICAgICBhc3NpZ25lZXNMaXN0OiBbLi4ubmV3IFNldCh0aGlzLmFzc2lnbmVlc0xpc3QpXSxcbiAgICAgIHJldmlld2Vyc0xpc3Q6IFsuLi5uZXcgU2V0KHRoaXMucmV2aWV3ZXJzTGlzdCldLFxuICAgICAgb3ZlcnNlZXJzTGlzdDogWy4uLm5ldyBTZXQodGhpcy5vdmVyc2VlcnNMaXN0KV0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEdyb3Vwc0xpc3QocHJvZ3JhbV9pZD86IHN0cmluZykge1xuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgIGlmIChwcm9ncmFtX2lkKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwcm9ncmFtX2lkcycsIHByb2dyYW1faWQpO1xuICAgIH1cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZVxuICAgICAgLmdldE9yZ2FuaXphdGlvbkdyb3VwcyhwYXJhbXMpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51blN1YnNjcmliZVByb2dyYW0pKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlcyA/PyBbXTtcbiAgICAgICAgICBpZiAoIXByb2dyYW1faWQpIHtcbiAgICAgICAgICAgIHRoaXMuT3JnR3JvdXAgPSBkYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBncm91cHM6IGFueSA9IFtdO1xuICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBOYW1lOiBlbGVtZW50Lmdyb3VwX25hbWUsXG4gICAgICAgICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBncm91cHMucHVzaChvYmopO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcbiAgICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzICYmXG4gICAgICAgICAgICB0aGlzLk9yZ0dyb3VwPy5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgcHJvZ3JhbV9pZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoTGlzdHNXaGlsZVByb2dyYW1TZWxlY3RlZCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMgJiZcbiAgICAgICAgICAgIHByb2dyYW1faWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gZGF0YS5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXS5kZWZhdWx0X2Fzc2lnbmVlX2dyb3VwX2lkcz8uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5ncm91cF9pZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxldCBtZW1iZXJJZHM6IGFueVtdID0gW107XG4gICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzLmZvckVhY2goKGVhY2hHcm91cDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVhY2hHcm91cD8ubWVtYmVyX2lkcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBtZW1iZXJJZHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLm5ldyBTZXQobWVtYmVySWRzLmNvbmNhdChlYWNoR3JvdXA/Lm1lbWJlcl9pZHMpKSxcbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0LFxuICAgICAgICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsbElkcyA9IFsuLi5uZXcgU2V0KGlkcyksIC4uLm5ldyBTZXQobWVtYmVySWRzKV07XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzaWdub3JzID0gdGhpcy5hc3NpZ25lZXNMaXN0LmZpbHRlcigoZWxlbWVudDogYW55KSA9PlxuICAgICAgICAgICAgICAgICAgYWxsSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5teV9tZW1iZXJfaWQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoYXNzaWdub3JzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gYXNzaWdub3JzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NpZ25vcnMgPSB0aGlzLmFzc2lnbmVlc0xpc3QuZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgICAgICAgICBtZW1iZXJJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lm15X21lbWJlcl9pZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChhc3NpZ25vcnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSBhc3NpZ25vcnM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBnZXRFZGl0UmVzcG9uc2liaWxpdHlEZXRhaWxzKGlkOiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIHRoaXMucG9wdWxhdGVSZXNwb25zaWJpbGl0eURldGFpbHMoKTtcbiAgfVxuXG4gIHNldExpc3QobGlzdDogYW55W10sIGlkczogYW55W10sIGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XG4gICAgaWRzPy5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gbGlzdC5maW5kSW5kZXgoXG4gICAgICAgIChsaXN0RWxlbWVudDogYW55KSA9PiBsaXN0RWxlbWVudFtrZXldID09IGVsZW1lbnRcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGRhdGEucHVzaChsaXN0W2luZGV4XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm5JZHMobGlzdDogYW55W10sIGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGxpc3RcbiAgICAgID8ubWFwKChlbGUpID0+IHtcbiAgICAgICAgaWYgKGVsZVtrZXldKSB7XG4gICAgICAgICAgcmV0dXJuIGVsZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZWxlKSA9PiBlbGUpO1xuICB9XG5cbiAgcG9wdWxhdGVQcm9ncmFtQXNzaWduZWVHcm91cCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9hc3NpZ25lZV9ncm91cF9pZHMgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LFxuICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWxsSWRzID0gW1xuICAgICAgICAgIC4uLm5ldyBTZXQoaWRzKSxcbiAgICAgICAgICAuLi5uZXcgU2V0KFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgYXNzaWduZWVHcm91cHMgPSB0aGlzLmdyb3VwQXNzaWduZWVMaXN0Py5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICBhbGxJZHM/LmluY2x1ZGVzKGVsZW1lbnQ/Lmdyb3VwX2lkKVxuICAgICAgICApO1xuICAgICAgICBpZiAoYXNzaWduZWVHcm91cHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSBhc3NpZ25lZUdyb3VwcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBzID0gdGhpcy5ncm91cEFzc2lnbmVlTGlzdD8uZmlsdGVyKChlbGVtZW50OiBhbnkpID0+XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmRlZmF1bHRfYXNzaWduZWVfZ3JvdXBfaWRzPy5pbmNsdWRlcyhcbiAgICAgICAgICAgIGVsZW1lbnQ/Lmdyb3VwX2lkXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBpZiAoYXNzaWduZWVHcm91cHM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSBhc3NpZ25lZUdyb3VwcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZUdyb3Vwcy5saXN0ID0gW107XG4gICAgfVxuICB9XG5cbiAgcG9wdWxhdGVQcm9ncmFtT3ZlcnNlZXJHcm91cCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3VwcyB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVyc1xuICAgICAgICA/LmZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdD8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3QsXG4gICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBhbGxEZWZhdWx0Q0NHcm91cElkcyA9IFtcbiAgICAgICAgICAuLi5uZXcgU2V0KGlkcyksXG4gICAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0NHcm91cCA9IHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3Q/LmZpbHRlcihcbiAgICAgICAgICAoZWxlbWVudDogYW55KSA9PiBhbGxEZWZhdWx0Q0NHcm91cElkcz8uaW5jbHVkZXMoZWxlbWVudD8uZ3JvdXBfaWQpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG5vdGlmeUxpc3RJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubm90aWZ5TGlzdCxcbiAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFsbERlZmF1bHRDQ0ZhaWx1cmVHcm91cElkcyA9IFtcbiAgICAgICAgICAuLi5uZXcgU2V0KG5vdGlmeUxpc3RJZHMpLFxuICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uZGVmYXVsdF9vdmVyc2VlcnM/LmZhaWx1cmVfY2NfZW1haWxfZ3JvdXBzXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0NGYWlsdXJlR3JvdXAgPSB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0Py5maWx0ZXIoXG4gICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgIGFsbERlZmF1bHRDQ0ZhaWx1cmVHcm91cElkcz8uaW5jbHVkZXMoZWxlbWVudD8uZ3JvdXBfaWQpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvdmVyc2VlcnNDQ0dyb3VwPy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubGlzdCA9IG92ZXJzZWVyc0NDR3JvdXA7XG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLmxpc3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3ZlcnNlZXJzQ0NGYWlsdXJlR3JvdXA/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0ID1cbiAgICAgICAgICAgIG92ZXJzZWVyc0NDRmFpbHVyZUdyb3VwO1xuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0ID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG92ZXJzZWVyc0NDR3JvdXAgPSB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0Py5maWx0ZXIoXG4gICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzPy5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgZWxlbWVudD8uZ3JvdXBfaWRcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJzQ0NGYWlsdXJlR3JvdXAgPSB0aGlzLmdyb3VwT3ZlcnNlZXJMaXN0Py5maWx0ZXIoXG4gICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X292ZXJzZWVycz8uZmFpbHVyZV9jY19lbWFpbF9ncm91cHM/LmluY2x1ZGVzKFxuICAgICAgICAgICAgICBlbGVtZW50Py5ncm91cF9pZFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICBpZiAob3ZlcnNlZXJzQ0NHcm91cD8ubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLmxpc3QgPSBvdmVyc2VlcnNDQ0dyb3VwO1xuICAgICAgICAgIHRoaXMubW9yZU9wdGlvbnMuT1ZFUlNFRVIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubm90aWZ5TGlzdCA9XG4gICAgICAgICAgICBvdmVyc2VlcnNDQ0ZhaWx1cmVHcm91cDtcbiAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLk9WRVJTRUVSID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHMubGlzdCA9IFtdO1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzR3JvdXBzLm5vdGlmeUxpc3QgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwb3B1bGF0ZVByb2dyYW1SZXZpZXdlckdyb3VwKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtWzBdPy5kZWZhdWx0X3Jldmlld2VyX2dyb3VwX2lkcyB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGhcbiAgICApIHtcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QsXG4gICAgICAgICdncm91cF9pZCdcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxJZHMgPSBbXG4gICAgICAgIC4uLm5ldyBTZXQoaWRzKSxcbiAgICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtWzBdPy5kZWZhdWx0X3Jldmlld2VyX2dyb3VwX2lkc1xuICAgICAgICApLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJldmlld2Vyc0dyb3VwID0gdGhpcy5ncm91cFJldmlld2VyTGlzdC5maWx0ZXIoKGVsZW1lbnQ6IGFueSkgPT5cbiAgICAgICAgYWxsSWRzPy5pbmNsdWRlcyhlbGVtZW50Py5ncm91cF9pZClcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIHJldmlld2Vyc0dyb3VwPy5sZW5ndGggfHxcbiAgICAgICAgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzICYmXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3QgPSByZXZpZXdlcnNHcm91cDtcbiAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SRVZJRVdFUiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5ncm91cFJldmlld2Vycy5saXN0ID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3QgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwb3B1bGF0ZU92ZXJzZWVyRGF0YShyZXM6IGFueSkge1xuICAgIGxldCBvdmVyc2VlclVzZXJMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCBvdmVyc2VlclVzZXJOb3RpZnlMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCBvdmVyc2VlckVtcGxveWVlc0xpc3QgPSByZXM/LmNjX21lbWJlcl9lbWFpbFxuICAgICAgPyBPYmplY3Qua2V5cyhyZXM/LmNjX21lbWJlcl9lbWFpbCkubWFwKE51bWJlcilcbiAgICAgIDogW107XG4gICAgb3ZlcnNlZXJVc2VyTGlzdCA9XG4gICAgICBvdmVyc2VlckVtcGxveWVlc0xpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IG92ZXJzZWVyRW1wbG95ZWVzTGlzdC5maWx0ZXIoKGVtcGxveWVlSWRzOiBudW1iZXIpID0+XG4gICAgICAgICAgcmVzPy5leGlzdGluZ1VzZXJJZHM/LmNjRW1haWxNZW1iZXJJZHM/LmluY2x1ZGVzKGVtcGxveWVlSWRzKVxuICAgICAgICApXG4gICAgICAgIDogWy4uLm92ZXJzZWVyRW1wbG95ZWVzTGlzdF07XG4gICAgbGV0IG92ZXJzZWVyRW1wbG95ZWVOb3RpZnlMaXN0ID0gcmVzPy5mYWlsdXJlX2NjX21lbWJlcl9lbWFpbFxuICAgICAgPyBPYmplY3Qua2V5cyhyZXM/LmZhaWx1cmVfY2NfbWVtYmVyX2VtYWlsKS5tYXAoTnVtYmVyKVxuICAgICAgOiBbXTtcbiAgICBvdmVyc2VlclVzZXJOb3RpZnlMaXN0ID1cbiAgICAgIG92ZXJzZWVyRW1wbG95ZWVOb3RpZnlMaXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgIHJlcz8udXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gb3ZlcnNlZXJFbXBsb3llZU5vdGlmeUxpc3QuZmlsdGVyKChlbXBsb3llZUlkczogbnVtYmVyKSA9PlxuICAgICAgICAgIHJlcz8uZXhpc3RpbmdVc2VySWRzPy5mYWlsdXJlQ0NFbWFpbE1lbWJlcklkcz8uaW5jbHVkZXMoZW1wbG95ZWVJZHMpXG4gICAgICAgIClcbiAgICAgICAgOiBbLi4ub3ZlcnNlZXJFbXBsb3llZU5vdGlmeUxpc3RdO1xuXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ292ZXJzZWVycyddID0ge1xuICAgICAgbGlzdDogcmVzPy5jY19tZW1iZXJfZW1haWxcbiAgICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5vdmVyc2VlcnNMaXN0LCBvdmVyc2VlclVzZXJMaXN0LCAnZW1wbG95ZWVfaWQnKVxuICAgICAgICA6IFtdLFxuICAgICAgbm90aWZ5TGlzdDogcmVzPy5mYWlsdXJlX2NjX21lbWJlcl9lbWFpbFxuICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLm92ZXJzZWVyc0xpc3QsXG4gICAgICAgICAgb3ZlcnNlZXJVc2VyTm90aWZ5TGlzdCxcbiAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgIClcbiAgICAgICAgOiBbXSxcbiAgICB9O1xuXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ292ZXJzZWVyc0dyb3VwcyddID0ge1xuICAgICAgbGlzdDogcmVzPy51c2VyR3JvdXBJZHM/LmNjRW1haWxHcm91cElkc1xuICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLk9yZ0dyb3VwLFxuICAgICAgICAgIHJlcz8udXNlckdyb3VwSWRzPy5jY0VtYWlsR3JvdXBJZHMsXG4gICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICApXG4gICAgICAgIDogW10sXG4gICAgICBub3RpZnlMaXN0OiByZXM/LnVzZXJHcm91cElkcz8uZmFpbHVyZUNDRW1haWxHcm91cElkc1xuICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLk9yZ0dyb3VwLFxuICAgICAgICAgIHJlcz8udXNlckdyb3VwSWRzPy5mYWlsdXJlQ0NFbWFpbEdyb3VwSWRzLFxuICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgKVxuICAgICAgICA6IFtdLFxuICAgIH07XG4gIH1cblxuICBwb3B1bGF0ZVJldmlld2VyRGF0YShyZXM6IGFueSkge1xuICAgIGNvbnN0IHJldmlld2VyRGV0YWlscyA9IE9iamVjdC5rZXlzKHJlcz8ucmV2aWV3ZXJfYXJyKTtcbiAgICB0aGlzLmhhc1Jldmlld2VyID0gcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJEZXRhaWxzID0gcmVzPy51c2VyR3JvdXBJZHM/LnJldmlld2VyR3JvdXBJZHM/Lmxlbmd0aFxuICAgICAgPyBPYmplY3QuYXNzaWduKHJlcz8udXNlckdyb3VwSWRzPy5yZXZpZXdlckdyb3VwSWRzKVxuICAgICAgOiBbXTtcbiAgICBsZXQgcmV2aWV3ZXJfdXNlcnM6IGFueVtdID0gW107XG4gICAgcmV2aWV3ZXJfdXNlcnMgPVxuICAgICAgcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgIHJlcz8udXNlckdyb3VwSWRzPy5yZXZpZXdlckdyb3VwSWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8ucmV2aWV3ZXJzLmZpbHRlcigobWVtYmVySWQ6IGFueSkgPT5cbiAgICAgICAgICByZXM/LmV4aXN0aW5nVXNlcklkcz8ucmV2aWV3ZXJJZHM/LmluY2x1ZGVzKG1lbWJlcklkPy5tZW1iZXJfaWQpXG4gICAgICAgIClcbiAgICAgICAgOiByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy5yZXZpZXdlcnM7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ3Jldmlld2VycyddID0ge1xuICAgICAgc2VxdWVudGlhbFdvcmtmbG93OlxuICAgICAgICByZXM/LnJldmlld2VyX2Fycj8ubGV2ZWwxPy50eXBlID09ICdTRVFVRU5USUFMJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHJldmlld0ZyZXF1ZW5jeToge1xuICAgICAgICByZXZpZXdDb21wbGV0ZURheXM6XG4gICAgICAgICAgcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gcmVzPy5yZXZpZXdfYWZ0ZXJfZGF5cyA6IDIsXG4gICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6XG4gICAgICAgICAgcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gcmVzPy5yZXZpZXdfZmFpbGVkX2FmdGVyX2RheXMgOiAyLFxuICAgICAgfSxcbiAgICAgIGFjY2VwdGVkRGF0YTogcmV2aWV3ZXJEZXRhaWxzPy5sZW5ndGggPiAwID8gcmV2aWV3ZXJfdXNlcnMgOiBbXSxcbiAgICAgIGxpc3Q6XG4gICAgICAgIHJldmlld2VyRGV0YWlscz8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5zZXRSZXZpZXdlclBheWxvYWQoXG4gICAgICAgICAgICByZXZpZXdlcl91c2VycyxcbiAgICAgICAgICAgICdvYmplY3QnLFxuICAgICAgICAgICAgcmVzPy5yZXZpZXdlcl9hcnI/LmxldmVsMT8udHlwZVxuICAgICAgICAgIClcbiAgICAgICAgICA6IFtdLFxuICAgIH07XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm1bJ2dyb3VwUmV2aWV3ZXJzJ10gPSB7XG4gICAgICBzZXF1ZW50aWFsV29ya2Zsb3c6XG4gICAgICAgIHJlcz8ucmV2aWV3ZXJfYXJyPy5sZXZlbDE/LnR5cGUgPT0gJ1NFUVVFTlRJQUwnID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgIHJldmlld0NvbXBsZXRlRGF5czpcbiAgICAgICAgICByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyByZXM/LnJldmlld19hZnRlcl9kYXlzIDogMixcbiAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czpcbiAgICAgICAgICByZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDAgPyByZXM/LnJldmlld19mYWlsZWRfYWZ0ZXJfZGF5cyA6IDIsXG4gICAgICB9LFxuICAgICAgbGlzdDpcbiAgICAgICAgZ3JvdXBSZXZpZXdlckRldGFpbHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLk9yZ0dyb3VwLCBncm91cFJldmlld2VyRGV0YWlscywgJ2dyb3VwX2lkJylcbiAgICAgICAgICA6IFtdLFxuICAgIH07XG4gIH1cblxuICBwb3B1bGF0ZUFzc2lnbmVlRGF0YShyZXM6IGFueSkge1xuICAgIGxldCBBc3NpZ25lZUFueVVzZXJMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCBBc3NpZ25lZUFsbFVzZXJMaXN0OiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCBhc3NpZ25lZUFueU9uZUxpc3QgPVxuICAgICAgcmVzPy5hc3NpZ25lZF90b19tZW1iZXJfaWQgJiYgdGhpcy5pc0VudHJ1c3RcbiAgICAgICAgPyByZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZFxuICAgICAgICA6IFtdO1xuICAgIEFzc2lnbmVlQW55VXNlckxpc3QgPVxuICAgICAgcmVzPy5hc3NpZ25lZF90b19tZW1iZXJfaWQ/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQW55b25lR3JvdXBJZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyBhc3NpZ25lZUFueU9uZUxpc3QuZmlsdGVyKChlbXBsb3llZUlkczogbnVtYmVyKSA9PlxuICAgICAgICAgIHJlcz8uZXhpc3RpbmdVc2VySWRzPy5hc3NpZ25lZUFueW9uZUlkcz8uaW5jbHVkZXMoZW1wbG95ZWVJZHMpXG4gICAgICAgIClcbiAgICAgICAgOiBbLi4uYXNzaWduZWVBbnlPbmVMaXN0XTtcblxuICAgIEFzc2lnbmVlQWxsVXNlckxpc3QgPVxuICAgICAgcmVzPy5hc3NpZ25lZV9tZW1iZXJfaWQgJiYgIXRoaXMuaXNFbnRydXN0ID8gcmVzPy5hc3NpZ25lZV9tZW1iZXJfaWQgOiBbXTtcbiAgICBjb25zdCBhc3NpZ25lZFRvVXNlckRldGFpbHMgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICBbTnVtYmVyKHJlcz8uYXNzaWduZWVfbWVtYmVyX2lkKV0sXG4gICAgICAnZW1wbG95ZWVfaWQnXG4gICAgKTtcbiAgICBpZiAoYXNzaWduZWRUb1VzZXJEZXRhaWxzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG1lbWJlcl9pZCA9IGFzc2lnbmVkVG9Vc2VyRGV0YWlsc1swXT8ubXlfbWVtYmVyX2lkO1xuICAgICAgaWYgKHJlcz8uZXhpc3RpbmdVc2VySWRzPy5hc3NpZ25lZUFsbElkcz8uaW5jbHVkZXMobWVtYmVyX2lkKSkge1xuICAgICAgICBBc3NpZ25lZUFsbFVzZXJMaXN0ID0gcmVzPy5hc3NpZ25lZV9tZW1iZXJfaWQ7XG4gICAgICAgIHJlcy51c2VyR3JvdXBJZHNbJ2Fzc2lnbmVlQWxsR3JvdXBJZHMnXSA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChyZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbGxHcm91cElkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBBc3NpZ25lZUFsbFVzZXJMaXN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhc3NpZ25lZXMnXSA9IHtcbiAgICAgIHdob0NhbkNvbXBsZXRlOiByZXMuaXNHcm91cEFzc2lnblRvID8gJ0FOWV9PTkUnIDogJ0FMTCcsXG4gICAgICBsaXN0OlxuICAgICAgICByZXM/LmFzc2lnbmVkX3RvX21lbWJlcl9pZD8ubGVuZ3RoID09IDBcbiAgICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCxcbiAgICAgICAgICAgIFtOdW1iZXIoQXNzaWduZWVBbGxVc2VyTGlzdCldLFxuICAgICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICA6IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMuYXNzaWduZWVzTGlzdCxcbiAgICAgICAgICAgIEFzc2lnbmVlQW55VXNlckxpc3QsXG4gICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICksXG4gICAgfTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXNzaWduZWVHcm91cHMnXSA9IHtcbiAgICAgIHdob0NhbkNvbXBsZXRlOiByZXM/LmlzR3JvdXBBc3NpZ25UbyA/ICdBTllfT05FJyA6ICdBTEwnLFxuICAgICAgbGlzdDpcbiAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQW55b25lR3JvdXBJZHM/Lmxlbmd0aCA9PSAwXG4gICAgICAgICAgPyByZXM/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbGxHcm91cElkcz8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICAgIHRoaXMuT3JnR3JvdXAsXG4gICAgICAgICAgICAgIHJlcz8udXNlckdyb3VwSWRzPy5hc3NpZ25lZUFsbEdyb3VwSWRzLFxuICAgICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgICA6IFtdXG4gICAgICAgICAgOiB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLk9yZ0dyb3VwLFxuICAgICAgICAgICAgcmVzPy51c2VyR3JvdXBJZHM/LmFzc2lnbmVlQW55b25lR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKSxcbiAgICB9O1xuICAgIHRoaXMuYWxsR3JvdXBBc3NpZ25lZSA9XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICF0aGlzLmlzRW50cnVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGlzIGZ1bmN0aW9uIGlzIGZvciBnZXR0aW5nIHRoZSB1c2VycyBkYXRhIGJhc2VkIG9uIG1lbWJlcl9pZCBvZiB1c2VycyBvZiBzZWxlY3RlZCBVc2VyIEdyb3VwXG4gICAqIEBwYXJhbSB1c2VybGlzdCBjb250YWlucyB1c2VycyBkYXRhXG4gICAqIEBwYXJhbSBzZWxlY3RlZGdyb3VwcyBjb250YWlucyBzZWxlY3RlZCBVc2VyIEdyb3VwIGRhdGFcbiAgICogQHJldHVybnMgdXNlciBkYXRhIG9mIFNlbGVjdGVkIHVzZXIgZ3JvdXAuXG4gICAqL1xuICBnZXRHcm91cHNVc2VyRW1wbG95ZWVzSWQodXNlckxpc3Q6IGFueSwgc2VsZWN0ZWRHcm91cHM6IGFueSkge1xuICAgIGxldCBncm91cE1lbWJlcklkczogYW55ID0gW107XG4gICAgbGV0IGdyb3VwVXNlckVtcGxveWVlOiBhbnkgPSBbXTtcbiAgICBzZWxlY3RlZEdyb3Vwcz8uZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xuICAgICAgZ3JvdXBNZW1iZXJJZHMgPSBbLi4ubmV3IFNldChbLi4uZ3JvdXBNZW1iZXJJZHMsIC4uLmdyb3VwPy5tZW1iZXJfaWRzXSldO1xuICAgIH0pO1xuICAgIHVzZXJMaXN0Py5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGdyb3VwTWVtYmVySWRzPy5pbmNsdWRlcyhlbGU/Lm15X21lbWJlcl9pZCkpIHtcbiAgICAgICAgZ3JvdXBVc2VyRW1wbG95ZWUucHVzaChlbGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBncm91cFVzZXJFbXBsb3llZTtcbiAgfVxuXG4gIHNldFJldmlld2VyUGF5bG9hZChcbiAgICBpZHM6IGFueVtdLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhY2NlcHRlZERhdGE/OiBBcnJheTxhbnk+LFxuICAgIHJldmlld2VyVHlwZT86IHN0cmluZ1xuICApIHtcbiAgICBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGlkT2JqQXJyYXkgPSB0aGlzLnJldHVybklkcyhpZHMsICd1aWQnKTtcbiAgICAgIHJldHVybiB0aGlzLnNldExpc3QodGhpcy5hbGxVc2Vyc0xpc3QsIGlkT2JqQXJyYXksICd1aWQnKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaXN0Jykge1xuICAgICAgY29uc3QgcGF5TG9hZDogYW55ID0gW107XG4gICAgICBjb25zdCBpZHNMaXN0ID0gdGhpcy5yZXR1cm5JZHMoaWRzLCAndWlkJyk7XG4gICAgICBpZHNMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBsZXQgaW5kZXggPSAtMTtcbiAgICAgICAgaWYgKChhY2NlcHRlZERhdGEgPz8gW10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaW5kZXggPVxuICAgICAgICAgICAgYWNjZXB0ZWREYXRhPy5maW5kSW5kZXgoKGVsZSkgPT4gZWxlLm1lbWJlcl9pZCA9PT0gZWxlbWVudCkgPz8gLTE7XG4gICAgICAgIH1cbiAgICAgIFxuICAgICAgICBwYXlMb2FkLnB1c2goeyBtZW1iZXJfaWQ6IGVsZW1lbnQgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXlMb2FkO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCkge1xuICAgIGNvbnN0IGVkaXRMb2FkZXIgPVxuICAgICAgdGhpcy5tb2RlID09PSAnRURJVCdcbiAgICAgICAgPyB0aGlzLnJjTGlzdExvYWRlZCAmJlxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgJiZcbiAgICAgICAgdGhpcy5hc3NpZ25vcnNMaXN0TG9hZGVkIFxuICAgICAgICA6IHRydWU7XG4gICAgaWYgKHRoaXMuY2F0ZWdvcmllc0xpc3RMb2FkZWQgJiYgdGhpcy5hc3NpZ25lZXNMaXN0TG9hZGVkICYmIGVkaXRMb2FkZXIpIHtcbiAgICAgIGlmICh0aGlzLmZyYW1ld29ya0RldGFpbHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hc3NpZ25Gcm9tRnJhbWV3b3JrKHRoaXMuZnJhbWV3b3JrRGV0YWlsc1swXSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xuICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdldEVkaXRSZXNwb25zaWJpbGl0eURldGFpbHModGhpcy5yZXNwb25zaWJpbGl0eUlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcm9ncmFtKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbS5wdXNoKHRoaXMuc2VsZWN0ZWRQcm9ncmFtKTtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5wcm9ncmFtX3NlbGVjdGVkX2lkcy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0uY2F0ZWdvcnlfaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5jYXRlZ29yeV9pZD8udG9TdHJpbmcoKTtcbiAgICAgICAgICBpZiAodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5kZWZhdWx0X2Fzc2lnbmVlX3R5cGUgPT0gJ0FOWU9ORSdcbiAgICAgICAgICAgICAgICA/ICdBTllfT05FJ1xuICAgICAgICAgICAgICAgIDogJ0FMTCc7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID1cbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/LmRlZmF1bHRfcmV2aWV3ZXJzX3R5cGUgPT0gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPSB0aGlzXG4gICAgICAgICAgICAgIC5zZWxlY3RlZFByb2dyYW0/LmV2aWRlbmNlX3VwbG9hZF9mbGFnXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwcm9ncmFtQ3VzdG9tVGFncyA9IHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5jdXN0b21fdGFnc1xuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHRoaXMuc2VsZWN0ZWRQcm9ncmFtLmN1c3RvbV90YWdzKVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICBwcm9ncmFtQ3VzdG9tVGFncy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9IEpTT04ucGFyc2UodGFnKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XG4gICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5QUk9HUkFNID0gdHJ1ZTtcbiAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUFJPR1JBTScpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5ldmlkZW5jZV91cGxvYWRfZmxhZyAmJlxuICAgICAgICAgICAgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdGT1JNQVRFX0VWSURFTkNFJyk7XG4gICAgICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5faWQpO1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Fzc2lnbm9ycyc6XG4gICAgICAgIGlmICh0aGlzLmludmFsaWRUeXBlID09PSAnd2hvbScpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hc3NpZ25vcnNMaXN0LFxuICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zLm1lbWJlcl9pZF0sXG4gICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc3NpZ25lZXMnOlxuICAgICAgICBpZiAodGhpcy5pbnZhbGlkVHlwZSA9PT0gJ3dobycpIHtcbiAgICAgICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmlzRW50cnVzdCAmJlxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0LFxuICAgICAgICAgICAgW3NlbGVjdGVkSXRlbXMuZW1wbG95ZWVfaWRdLFxuICAgICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUdyb3VwQXNzaWduZWVEYXRhKHNlbGVjdGVkSXRlbXMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5hc3NpZ25lZXNMaXN0LFxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JjJzpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgJ2l0ZW1faWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmNTZWxlY3RlZC5lbWl0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPiAwKTtcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhdWRpdF9jYXRlZ29yeV9kZXRhaWxzJ11bJ2NhdGVnb3J5X2lkJ10gPSAwO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0T3RoZXJHUkNUYWJDb3VudCh7IHJjX2lkczogJycgfSk7XG4gICAgICAgIHRoaXMuZ2V0T3RoZXJHUkNPYmplY3RzKHsgcmNfaWRzOiAnJywgdHlwZTogdGhpcy5zZWxlY3RlZEdSQ1RhYiB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhZyA9XG4gICAgICAgICAgICBlbGVtZW50LmN1c3RvbV90YWdzICE9PSAnJyAmJlxuICAgICAgICAgICAgICBlbGVtZW50LmN1c3RvbV90YWdzICE9PSAnbnVsbCcgJiZcbiAgICAgICAgICAgICAgZWxlbWVudC5jdXN0b21fdGFncyAhPSAnW10nXG4gICAgICAgICAgICAgID8gSlNPTi5wYXJzZShlbGVtZW50LmN1c3RvbV90YWdzKVxuICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIGlmICh0YWc/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ19uYW1lID09IHRhZ0RhdGEudGFnX25hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5wdXNoKHRhZ0RhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Byb2dyYW0nOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saW5rZWRQcm9ncmFtID0gc2VsZWN0ZWRJdGVtcz8ubGlua2VkUHJvZ3JhbTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtICYmXG4gICAgICAgICAgIShcbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucHJvZ3JhbVR5cGUgPT09IDAgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1bmNhdGVnb3JpemVkJykgfHxcbiAgICAgICAgICAgICF0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvblxuICAgICAgICAgICkgJiZcbiAgICAgICAgICAhdGhpcy5mZWF0dXJlLmlzRmVhdHVyZUVuYWJsZWQoJ2ZmX2RlcHJlY2F0ZV9wcmltYXJ5X3Byb2dyYW1fZmxhZycpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gc2VsZWN0ZWRJdGVtcy5jYXRlZ29yaWVzXG4gICAgICAgICAgICA/IHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllc1xuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICBsZXQgY2F0ZWdvcnlJZCA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZCArICcsJyArIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQ/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzKSxcbiAgICAgICAgICAgIC4uLm5ldyBTZXQoW3NlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXSksXG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBwcm9ncmFtQ3VzdG9tVGFncyA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmN1c3RvbV90YWdzXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIHByb2dyYW1DdXN0b21UYWdzPy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSh0YWcpIDogdGFnO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2Vzc21lbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50KT8ubGVuZ3RoXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtLl9pZClcbiAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeSA9IHNlbGVjdGVkSXRlbXMuY2F0ZWdvcmllc1xuICAgICAgICAgICAgPyBzZWxlY3RlZEl0ZW1zLmNhdGVnb3JpZXNcbiAgICAgICAgICAgIDogW107XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IFtdO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID0gJyc7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbV9zZWxlY3RlZF9pZHMgPSBbXTtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gW107XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbSA9IHNlbGVjdGVkSXRlbXMucHJvZ3JhbVxuICAgICAgICAgICAgPyBbc2VsZWN0ZWRJdGVtcy5wcm9ncmFtXVxuICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICBsZXQgY2F0ZWdvcnlJZCA9IHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkSXRlbXM/LmNhdGVnb3JpZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnlfaWQgPVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5jYXRlZ29yeV9pZCArICcsJyArIGNhdGVnb3J5SWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5X2lkID1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWQ/LnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW1fc2VsZWN0ZWRfaWRzID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yaWVzKSxcbiAgICAgICAgICAgIC4uLm5ldyBTZXQoW3NlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXSksXG4gICAgICAgICAgXTtcbiAgICAgICAgICBjb25zdCBwcm9ncmFtQ3VzdG9tVGFncyA9IHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmN1c3RvbV90YWdzXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uY3VzdG9tX3RhZ3MpXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAgIHByb2dyYW1DdXN0b21UYWdzPy5mb3JFYWNoKCh0YWc6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9IHR5cGVvZiB0YWcgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZSh0YWcpIDogdGFnO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnByb2dyYW0/LmRlZmF1bHRfYXNzaWduZWVfdHlwZSA9PSAnQU5ZT05FJ1xuICAgICAgICAgICAgICAgID8gJ0FOWV9PTkUnXG4gICAgICAgICAgICAgICAgOiAnQUxMJztcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPVxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5kZWZhdWx0X3Jldmlld2Vyc190eXBlID09ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkID1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtcz8ucHJvZ3JhbT8uZXZpZGVuY2VfdXBsb2FkX2ZsYWcpIHtcbiAgICAgICAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucHJvZ3JhbVR5cGUgPT09IDAgJiZcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1bmNhdGVnb3JpemVkJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5wcm9ncmFtPy5faWQgJiZcbiAgICAgICAgICAgICAgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKHNlbGVjdGVkSXRlbXMucHJvZ3JhbS5faWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJMaXN0c0FjY29yZGluZ1RvUHJvZ3JhbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICB0aGlzLnNhdmVHcm91cFJldmlld2VyRGF0YShzZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMucmV2aWV3ZXJzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3ZlcnNlZXInOlxuICAgICAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgICAgICB0aGlzLnNhdmVPdmVyc2VlckRhdGEoc2VsZWN0ZWRJdGVtcywgJ292ZXJzZWVyTGlzdCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5saXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJzZWVyTm90aWZ5JzpcbiAgICAgICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICAgICAgdGhpcy5zYXZlT3ZlcnNlZXJEYXRhKHNlbGVjdGVkSXRlbXMsICdvdmVyc2Vlck5vdGlmeUxpc3QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMuYWxsVXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc3N1cmFuY2UnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3QsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnY2F0ZWdvcnlfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVxdWlyZXNfYXVkaXQnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc3VyYW5jZVJlcXVpcmVzQXVkaXRMaXN0LFxuICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yeV9pZF0sXG4gICAgICAgICAgJ2NhdGVnb3J5X2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybVsnYXVkaXRfY2F0ZWdvcnlfZGV0YWlscyddWydjYXRlZ29yeV9pZCddID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5jYXRlZ29yeV9pZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzID0gc2VsZWN0ZWRJdGVtcz8uY2hlY2twb2ludERldGFpbHM7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbiA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uY2hlY2twb2ludEluc3RydWN0aW9uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhbGN1bGF0ZWRyaXNrJzpcbiAgICAgICAgY29uc3Qgcmlza0NsYXNzID0gWydsb3cnLCAnbG93X21lZGl1bScsICdtZWRpdW1faGlnaCcsICdoaWdoJ107XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJpc2tDbGFzcyA9IHJpc2tDbGFzc1tzZWxlY3RlZEl0ZW1zPy5yaXNrQ2xhc3NdO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrTWF0cml4ID0gc2VsZWN0ZWRJdGVtcz8ucmlza01hdHJpeDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmb3JtYXRlX2V2aWRlbmNlJzpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0UmVxdWlyZWQgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmlzRm9ybWF0ZVVwbG9hZGVkID8/IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRGaWxlcyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMubWFwKChmaWxlczogYW55KSA9PiAge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZmlsZVBhdGg6IGZpbGVzLmZpbGVwYXRoLFxuICAgICAgICAgICAgICBuYW1lOiBmaWxlcy5maWxlX25hbWUsXG4gICAgICAgICAgICAgIHR5cGU6IGZpbGVzLnR5cGUsXG4gICAgICAgICAgICAgIGZpZDogZmlsZXM/LmZpZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pID8/IFtdO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRMaW5rcyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8ubGlua3MgPz8gW107XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmlzRXZpZGVuY2VSZXF1aXJlZCA/PyBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZXZpZXdGcmVxdWVuY3knOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5ID0ge1xuICAgICAgICAgIHJldmlld0NvbXBsZXRlRGF5czogc2VsZWN0ZWRJdGVtcy5jb21wbGV0ZURheXMsXG4gICAgICAgICAgcmV2aWV3Tk90Q29tcGxldGVkRGF5czogc2VsZWN0ZWRJdGVtcy5ub3RDb21wbGV0ZWQsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnR1JDX09CSkVDVFMnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zZWxlY3RlZEdSQ09iamVjdHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB0aGlzLnNldE90aGVyR1JDVHlwZXNGb3JtYXRlKCk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBwcm9ncmFtIGlzIHNlbGVjdGVkIGFuZCB0aGUgdXNlciBoYXMgZnVsbCBwZXJtaXNzaW9uLCByZWZyZXNoIHRoZSBsaXN0cyB3aGlsZSB0aGUgcHJvZ3JhbVxuICAgKiBpcyBzZWxlY3RlZC4gT3RoZXJ3aXNlLCByZWZyZXNoIGFsbCBsaXN0cy5cbiAgICogPC9jb2RlPlxuICAgKi9cbiAgY2FsbFJlZnJlc2hMaXN0KCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5vcmdEZXRhaWxzPy5oYXNQcm9ncmFtRnVsbFBlcm1pc3Npb25cbiAgICApIHtcbiAgICAgIHRoaXMucmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUodHlwZTogYW55LCBldmVudD86IGFueSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncmMnOlxuICAgICAgICBjb25zdCByY0luZGV4ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMuZmluZEluZGV4KFxuICAgICAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYy5zcGxpY2UocmNJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucmNTZWxlY3RlZC5lbWl0KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPiAwKTtcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJjPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtWydhdWRpdF9jYXRlZ29yeV9kZXRhaWxzJ11bJ2NhdGVnb3J5X2lkJ10gPSAwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0T3RoZXJHUkNUYWJDb3VudCh7IHJjX2lkczogJycgfSk7XG4gICAgICAgIHRoaXMuZ2V0T3RoZXJHUkNPYmplY3RzKHsgcmNfaWRzOiAnJywgdHlwZTogdGhpcy5zZWxlY3RlZEdSQ1RhYiB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdhc3NpZ25vcnMnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCA9IFtdO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3QuZmluZEluZGV4KFxuICAgICAgICAgIChvd25lcjogYW55KSA9PiBvd25lci5lbXBsb3llZV9pZCA9PSBldmVudC5lbXBsb3llZV9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMubGlzdC5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyb3VwYXNzaWduZWVzJzpcbiAgICAgICAgY29uc3QgZ3JvdXBJbmRleCA9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChncm91cDogYW55KSA9PiBncm91cC5ncm91cF9pZCA9PSBldmVudC5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3Quc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXZpZXdlcic6XG4gICAgICAgIGNvbnN0IHJldmlld2VySW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0LnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5jYWxsUmVmcmVzaExpc3QoKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dyb3VwUmV2aWV3ZXInOlxuICAgICAgICBjb25zdCBncm91cFJldmlld2VySW5kZXggPVxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICAocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXIuZ3JvdXBfaWQgPT0gZXZlbnQuZ3JvdXBfaWRcbiAgICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5ncm91cFJldmlld2Vycy5saXN0LnNwbGljZShcbiAgICAgICAgICBncm91cFJldmlld2VySW5kZXgsXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJzZWVyJzpcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJJbmRleCA9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXIuZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcbiAgICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdC5zcGxpY2Uob3ZlcnNlZXJJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvdmVyc2Vlckdyb3VwJzpcbiAgICAgICAgY29uc3Qgb3ZlcnNlZXJHcm91cEluZGV4ID1cbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0LmZpbmRJbmRleChcbiAgICAgICAgICAgIChvdmVyc2VlcjogYW55KSA9PiBvdmVyc2Vlci5ncm91cF9pZCA9PSBldmVudC5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5saXN0LnNwbGljZShcbiAgICAgICAgICBvdmVyc2Vlckdyb3VwSW5kZXgsXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ292ZXJzZWVyTm90aWZ5TGlzdCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVyTm90aWZ5SW5kZXggPVxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3QuZmluZEluZGV4KFxuICAgICAgICAgICAgKG92ZXJzZWVyTjogYW55KSA9PiBvdmVyc2Vlck4uZW1wbG95ZWVfaWQgPT0gZXZlbnQuZW1wbG95ZWVfaWRcbiAgICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubm90aWZ5TGlzdC5zcGxpY2UoXG4gICAgICAgICAgb3ZlcnNlZXJOb3RpZnlJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2FsbFJlZnJlc2hMaXN0KCk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvdmVyc2Vlckdyb3VwTm90aWZ5TGlzdCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVyR3JvdXBOb3RpZnlJbmRleCA9XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICAob3ZlcnNlZXJOOiBhbnkpID0+IG92ZXJzZWVyTi5ncm91cF9pZCA9PSBldmVudC5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwcy5ub3RpZnlMaXN0LnNwbGljZShcbiAgICAgICAgICBvdmVyc2Vlckdyb3VwTm90aWZ5SW5kZXgsXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNhbGxSZWZyZXNoTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5LmZpbmRJbmRleChcbiAgICAgICAgICAoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xuICAgICAgICBjb25zdCB0YWcgPSBKU09OLnBhcnNlKGV2ZW50LmN1c3RvbV90YWdzKTtcbiAgICAgICAgaWYgKHRhZz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZy5mb3JFYWNoKCh0YWdEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4Q1QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgKHRhZ0VsZW1lbnQ6IGFueSkgPT4gdGFnRWxlbWVudC50YWdfbmFtZSA9PSB0YWdEYXRhLnRhZ19uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4Q1QgIT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncy5zcGxpY2UoaW5kZXhDVCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5Py5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YWcgPSBKU09OLnBhcnNlKGVsZW1lbnQuY3VzdG9tX3RhZ3MpO1xuICAgICAgICAgICAgaWYgKHRhZz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnX25hbWUgPT0gdGFnRGF0YS50YWdfbmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzLnB1c2godGFnRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Byb2dyYW0nOlxuICAgICAgICB0aGlzLmNoZWNrRGVmYXVsdFByb2dyYW1PblJlbW92ZShldmVudCk7XG4gICAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNhdGVnb3J5ID0gW107XG4gICAgICAgIC8vIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnByb2dyYW0gPSBbXTtcblxuICAgICAgICAvLyB0aGlzLmZpbHRlckxpc3RzQWNjb3JkaW5nVG9Qcm9ncmFtKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVxdWlyZXNfYXVkaXQnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXF1aXJlc0F1ZGl0TGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hdWRpdF9jYXRlZ29yeV9kZXRhaWxzID0ge1xuICAgICAgICAgIGNhdGVnb3J5X2lkOiAwLFxuICAgICAgICAgIHNhbXBsZTogMCxcbiAgICAgICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgICAgIGZyZXF1ZW5jeV9wYXR0ZXJuOiAnJyxcbiAgICAgICAgICBmcmVxdWVuY3lfdGltZTogJycsXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXNzdXJhbmNlJzpcbiAgICAgICAgY29uc3QgYXNzdXJhbmNlSW5kZXggPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0LmZpbmRJbmRleChcbiAgICAgICAgICAoYXNzdXJhbmNlOiBhbnkpID0+IGFzc3VyYW5jZS5jYXRlZ29yeV9pZCA9PSBhc3N1cmFuY2UuY2F0ZWdvcnlfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzdXJhbmNlTGlzdC5zcGxpY2UoYXNzdXJhbmNlSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NoZWNrcG9pbnQnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cy5zcGxpY2UoZXZlbnQsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2Vzc21lbnQnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0ge1xuICAgICAgICAgIGNhdGVnb3J5X2lkOiAnJyxcbiAgICAgICAgICBhc3Nlc3NtZW50X2lkOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICduZXctY2hlY2twb2ludHMnOlxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5uZXdfY2hlY2twb2ludHMgPSB7fTtcbiAgICAgICAgdGhpcy5jaGVja3BvaW50Q291bnQgPSAwO1xuICAgICAgICB0aGlzLmNoZWNrcG9pbnRDb3VudFVwZGF0ZWQuZW1pdCh0aGlzLmNoZWNrcG9pbnRDb3VudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnR1JDX09CSkVDVFMnOlxuICAgICAgICB0aGlzLnJlbW92ZU90aGVyR1JDT2JqZWN0cyhldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVHcm91cEFzc2lnbmVlRGF0YShzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcbiAgICBsZXQgdXNlck9iajogYW55O1xuICAgIHVzZXJPYmogPSBzZWxlY3RlZEl0ZW1zPy5sZW5ndGggPyBzZWxlY3RlZEl0ZW1zIDogc2VsZWN0ZWRJdGVtcz8udXNlcnM7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLmxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICB1c2VyT2JqLFxuICAgICAgJ215X21lbWJlcl9pZCdcbiAgICApO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlR3JvdXBzLmxpc3QgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLk9yZ0dyb3VwLFxuICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLFxuICAgICAgJ2dyb3VwX2lkJ1xuICAgICk7XG4gIH1cblxuICBzYXZlR3JvdXBSZXZpZXdlckRhdGEoc2VsZWN0ZWRJdGVtczogYW55KSB7XG4gICAgbGV0IHVzZXJPYmo6IGFueSA9IFtdO1xuICAgIHNlbGVjdGVkSXRlbXMudXNlcnMuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgIHVzZXJPYmoucHVzaChlbGUuZW1wbG95ZWVfaWQpO1xuICAgIH0pO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgdGhpcy5yZXZpZXdlcnNMaXN0LFxuICAgICAgdXNlck9iaixcbiAgICAgICdlbXBsb3llZV9pZCdcbiAgICApO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzID0ge1xuICAgICAgbGlzdDogc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzPy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzIDogW10sXG4gICAgfTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93ID1cbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdztcbiAgfVxuXG4gIHNhdmVPdmVyc2VlckRhdGEoc2VsZWN0ZWRJdGVtczogYW55LCB0eXBlOiBhbnkpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ292ZXJzZWVyTGlzdCc6XG4gICAgICAgIGxldCBvdmVyc2VlcnNlbGVjdGVkbGlzdCA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMudXNlcnMsXG4gICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLm92ZXJzZWVyc0xpc3QsXG4gICAgICAgICAgb3ZlcnNlZXJzZWxlY3RlZGxpc3QsXG4gICAgICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnNHcm91cHNbJ2xpc3QnXSA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzPy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzIDogW107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3ZlcnNlZXJOb3RpZnlMaXN0JzpcbiAgICAgICAgbGV0IG92ZXJzZWVyc2VsZWN0ZWROb3RpZnlsaXN0ID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcy51c2VycyxcbiAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0ID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgICBvdmVyc2VlcnNlbGVjdGVkTm90aWZ5bGlzdCxcbiAgICAgICAgICAnZW1wbG95ZWVfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVyc0dyb3Vwc1snbm90aWZ5TGlzdCddID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5ncm91cHM/Lmxlbmd0aCA+IDAgPyBzZWxlY3RlZEl0ZW1zPy5ncm91cHMgOiBbXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZW50cnVzdEZyYW1ld29yayhldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNldCgpO1xuICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xuXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkgPSB7XG4gICAgICBuYW1lOiBldmVudC5yZXBvcnRfbmFtZSxcbiAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiBldmVudC5rZXlfY29tcGxpYW5jZSA/IHRydWUgOiBmYWxzZSxcbiAgICB9O1xuICAgIGNvbnN0IG5ld1N0YXJ0RGF0ZSA9XG4gICAgICBldmVudC5zdGFydF9kYXRlIHx8IGV2ZW50LnN0YXJ0X2RhdGUgIT0gbnVsbCB8fCBldmVudC5zdGFydF9kYXRlICE9PSAnJ1xuICAgICAgICA/IG5ldyBEYXRlKGV2ZW50LnN0YXJ0X2RhdGUgKiAxMDAwKVxuICAgICAgICA6IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcHZ0VGVtcGxhdGUgPVxuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RlbXBsYXRlICYmIGV2ZW50LmZyZXF1ZW5jeV90ZW1wbGF0ZSAhPT0gJydcbiAgICAgICAgPyBldmVudC5mcmVxdWVuY3lfdGVtcGxhdGVcbiAgICAgICAgOiBldmVudC5mcmVxdWVuY3k7XG4gICAgY29uc3QgZnJlcXVlbmN5RGV0YWlsc09iamVjdDogYW55ID0gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNob3J0SGFuZF9mcmVxQ2FsKFxuICAgICAgcHZ0VGVtcGxhdGUsXG4gICAgICBuZXdTdGFydERhdGUuZ2V0RGF0ZSgpLFxuICAgICAgbmV3U3RhcnREYXRlLmdldE1vbnRoKCksXG4gICAgICBuZXdTdGFydERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuO1xuICAgIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5X2RldGFpbHM7XG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSBERUZBVUxUXzI0SFI7XG4gICAgZXZlbnQucmVtaW5kZXJfYmVmb3JlX2RheXMgPSBldmVudC5yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGVcbiAgICAgID8gZXZlbnQucmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXG4gICAgICA6IDI7XG4gICAgZXZlbnQuZmFpbGVkX2FmdGVyX2RheXMgPSBldmVudC5tYXJrX2ZhaWxlZF9hZnRlclxuICAgICAgPyBldmVudC5tYXJrX2ZhaWxlZF9hZnRlclxuICAgICAgOiAyO1xuICAgIGV2ZW50LmxpZmVjeWNsZV9kZXRhaWxzID0gJzAwMDAtMDAtMDB+fjAnO1xuICAgIGV2ZW50LnN0YXJ0X29mX2RheV91dGMgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZnJhbWV3b3JrU3RhcnREYXRlKGV2ZW50KTtcbiAgICBldmVudC5vbl9jb21wbGV0aW9uX29mID0gW107XG4gICAgZXZlbnQuZG9tX3V0YyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPVxuICAgICAgZnJlcXVlbmN5RGV0YWlsc09iamVjdC5jb250aW51b3VzX2ZhaWxlZF9kYXlzO1xuXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID1cbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV9kZXRhaWxzO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeV90aW1lID0gREVGQVVMVF8yNEhSO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzID1cbiAgICAgIGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA/IGV2ZW50LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA6IDI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZmFpbGVkX2FmdGVyX2RheXMgPSBldmVudC5tYXJrX2ZhaWxlZF9hZnRlclxuICAgICAgPyBldmVudC5tYXJrX2ZhaWxlZF9hZnRlclxuICAgICAgOiAyO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmxpZmVjeWNsZURldGFpbHMgPSAnMDAwMC0wMC0wMH5+MCc7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc3RhcnRfb2ZfZGF5X3V0YyA9IHRoaXMuZnJlcXVlbmN5U2VydmljZVxuICAgICAgLmZyYW1ld29ya1N0YXJ0RGF0ZShldmVudClcbiAgICAgIC50b0ZpeGVkKClcbiAgICAgIC50b1N0cmluZygpO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5kb21fdXRjID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPVxuICAgICAgZXZlbnQucmVtYXJrcy50cmltKCkgIT0gJycgPyBldmVudC5yZW1hcmtzIDogJyc7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncyA9XG4gICAgICBldmVudC5jdXN0b21fdGFncyAmJlxuICAgICAgICBldmVudC5jdXN0b21fdGFncyAhPT0gbnVsbCAmJlxuICAgICAgICBldmVudC5jdXN0b21fdGFncyAhPT0gJ251bGwnICYmXG4gICAgICAgIGV2ZW50LmN1c3RvbV90YWdzICE9PSAnJ1xuICAgICAgICA/IEpTT04ucGFyc2UoZXZlbnQuY3VzdG9tX3RhZ3MpXG4gICAgICAgIDogW107XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZXZlbnQuY29udHJvbF9vYmplY3RpdmVcbiAgICAgID8gZXZlbnQuY29udHJvbF9vYmplY3RpdmVcbiAgICAgIDogJyc7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnkgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmFsbENhdGVnb3JpZXMsXG4gICAgICBbZXZlbnQuY2F0ZWdvcnlfaWRdLFxuICAgICAgJ2NhdGVnb3J5X2lkJ1xuICAgICk7IC8vXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnJldmlld0ZyZXF1ZW5jeS5yZXZpZXdDb21wbGV0ZURheXMgPSAyO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cyA9IDI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmMgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QuZmluZChcbiAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PT0gZXZlbnQuZW50aXR5X2lkXG4gICAgKVxuICAgICAgPyBbXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdC5maW5kKFxuICAgICAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PT0gZXZlbnQuZW50aXR5X2lkXG4gICAgICAgICksXG4gICAgICBdXG4gICAgICA6IFtdO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJpc2tDbGFzcyA9IHRoaXMuaXNSaXNrRW5hYmxlID8gJ2xvdycgOiAnbG93X21lZGl1bSc7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucHJpdmF0ZV9saWJyYXJ5X2lkID0gZXZlbnQucmVwb3J0X2lkO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jbGFzc2lmaWNhdGlvbiA9IHRoaXMuaXNSaXNrRW5hYmxlID8gMSA6IDI7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY29udGludW91c19mYWlsZWRfZGF5cyA9XG4gICAgICBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc3RhcnREYXRlID1cbiAgICAgIHRoaXMuZnJlcXVlbmN5U2VydmljZS5mcmFtZXdvcmtTdGFydERhdGUoZXZlbnQpO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlID0ge1xuICAgICAgZXZpZGVuY2VSZXF1aXJlZDogZXZlbnQucmVwb3J0X3VwbG9hZF9mbGFnID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgZm9ybWF0RmlsZXM6IGV2ZW50LnJlcG9ydF9mb3JtYXQsXG4gICAgICBmb3JtYXRMaW5rczpcbiAgICAgICAgIWV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayB8fCBldmVudC5yZXBvcnRfZm9ybWF0X2xpbmsgPT0gJydcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBbZXZlbnQucmVwb3J0X2Zvcm1hdF9saW5rXSxcbiAgICAgIGZvcm1hdFJlcXVpcmVkOlxuICAgICAgICBldmVudC5yZXBvcnRfZm9ybWF0Py5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgKGV2ZW50LnJlcG9ydF9mb3JtYXRfbGluayAmJiBldmVudC5yZXBvcnRfZm9ybWF0X2xpbmsgIT0gJycpXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB7XG4gICAgICBjYXRlZ29yeV9pZDogMCxcbiAgICAgIHNhbXBsZTogNSxcbiAgICAgIHBlcmNlbnRhZ2U6IDMwLFxuICAgICAgZnJlcXVlbmN5X3BhdHRlcm46ICcxfjB+M34xJyxcbiAgICAgIGZyZXF1ZW5jeV90aW1lOiBERUZBVUxUXzI0SFIsXG4gICAgfTtcblxuICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gREVGQVVMVF9USU1FO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzICE9PSAnJyAmJlxuICAgICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgIT09ICc1fjB+MH4wJ1xuICAgICkge1xuICAgICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5ID0gJyc7XG4gICAgfVxuXG4gICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSBERUZBVUxUXzI0SFI7XG4gICAgZXZlbnQucGxhY2Vob2xkZXIgPSB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGV2ZW50KTtcbiAgICBjb25zdCBjaGVja2VkTW9yZU9wdGlvbnMgPSBbXTtcblxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgIT09ICcnKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLk9CSkVDVElWRSA9IHRydWU7XG4gICAgfVxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5SSVNLX0NMQVNTSUZJQ0FUSU9OID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY2F0ZWdvcnk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdDQVRFR09SWScpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5DQVRFR09SWSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmZvcm1hdEFuZEV2aWRlbmNlPy5ldmlkZW5jZVJlcXVpcmVkIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZm9ybWF0QW5kRXZpZGVuY2U/LmZvcm1hdFJlcXVpcmVkXG4gICAgKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnRk9STUFURV9FVklERU5DRScpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5GT1JNQVRFX0VWSURFTkNFID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmVudGl0eV9pZCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SQyA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbi5lbWl0KGNoZWNrZWRNb3JlT3B0aW9ucyk7XG4gICAgLy8gIGV2ZW50LnBsYWNlaG9sZGVyXG4gIH1cblxuICBhc3NpZ25Gcm9tRnJhbWV3b3JrKGZyZXFPYmo6IGFueSkge1xuICAgIGlmIChmcmVxT2JqLmRhdGEpIHtcbiAgICAgIC8vIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xuICAgICAgY29uc3QgbmV3U3RhcnREYXRlID0gbmV3IERhdGUoKTtcblxuICAgICAgY29uc3QgZnJlcXVlbmN5RGV0YWlsc09iamVjdDogYW55ID1cbiAgICAgICAgdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnNob3J0SGFuZF9mcmVxQ2FsKFxuICAgICAgICAgIGZyZXFPYmouZGF0YS5mcmVxdWVuY3ksXG4gICAgICAgICAgbmV3U3RhcnREYXRlLmdldERhdGUoKSxcbiAgICAgICAgICBuZXdTdGFydERhdGUuZ2V0TW9udGgoKSxcbiAgICAgICAgICBuZXdTdGFydERhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgZXZlbnQ6IGFueSA9IHt9O1xuICAgICAgZXZlbnQuZnJlcXVlbmN5X2RldGFpbHMgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuO1xuICAgICAgZXZlbnQuZnJlcXVlbmN5X3RpbWUgPSBERUZBVUxUXzI0SFI7XG4gICAgICBldmVudC5yZW1pbmRlcl9iZWZvcmVfZGF5cyA9IDI7XG4gICAgICBldmVudC5mYWlsZWRfYWZ0ZXJfZGF5cyA9IDI7XG4gICAgICBldmVudC5saWZlY3ljbGVfZGV0YWlscyA9ICcwMDAwLTAwLTAwfn4wJztcbiAgICAgIGV2ZW50LnN0YXJ0X29mX2RheV91dGMgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgIGV2ZW50Lm9uX2NvbXBsZXRpb25fb2YgPSBbXTtcbiAgICAgIGV2ZW50LmRvbV91dGMgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPVxuICAgICAgICBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0LmNvbnRpbnVvdXNfZmFpbGVkX2RheXM7XG4gICAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGV2ZW50KTtcbiAgICAgIGV2ZW50LnBsYWNlaG9sZGVyID0gdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlcjtcbiAgICAgIGV2ZW50LmZyZXF1ZW5jeV90aW1lID0gREVGQVVMVF9USU1FO1xuICAgICAgdGhpcy5mcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50KTtcblxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSA9IGZyZXFPYmouZGF0YS5uYW1lID8/ICcnO1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlID0gZnJlcU9iai5kYXRhLm9iamVjdGl2ZXMgPz8gJyc7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPSBmcmVxdWVuY3lEZXRhaWxzT2JqZWN0Py5wYXR0ZXJuID8/ICcnO1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc3RhcnREYXRlID0gZXZlbnQuc3RhcnRfb2ZfZGF5X3V0YztcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlbWluZGVyX2JlZm9yZV9kYXlzID0gZXZlbnQucmVtaW5kZXJfYmVmb3JlX2RheXM7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jb250aW51b3VzX2ZhaWxlZF9kYXlzID1cbiAgICAgICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cztcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF9hZnRlcl9kYXlzID0gZXZlbnQuZmFpbGVkX2FmdGVyX2RheXM7XG4gICAgICB0aGlzLnNlbGVjdGVkRnJhbWV3b3JrVmFsdWVzID0gZnJlcU9iai5zZWxlY3RlZEZyYW1ld29ya0RhdGEgPz8gdW5kZWZpbmVkO1xuICAgICAgaWYgKGZyZXFPYmo/LmRhdGE/LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID0gZnJlcU9iaj8uZGF0YT8uZGVzY3JpcHRpb247XG4gICAgICB9XG4gICAgICBpZiAoZnJlcU9iaj8uZGF0YT8ub2JqZWN0aXZlcykge1xuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgPSBmcmVxT2JqLmRhdGEub2JqZWN0aXZlcyA/PyAnJztcbiAgICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PQkpFQ1RJVkUgPSB0cnVlO1xuICAgICAgICBsZXQgY2hlY2tlZE1vcmVPcHRpb25zID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMubW9yZU9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAodGhpcy5tb3JlT3B0aW9uc1trZXldKSB7XG4gICAgICAgICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaChrZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoY2hlY2tlZE1vcmVPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBsaXN0IHVzZXJsaXN0IGZvciBsaXN0aW5nIHVzZXJzXG4gICAqIEByZXR1cm5zIGFzc2lnbiB1c2VyJ3MgbXlfbWVtYmVyX2lkICB0byBtZW1iZXJfaWQgZGF0YVxuICAgKi9cbiAgYXNzaWduVXNlck1lbWJlcklkKGxpc3Q6IGFueSkge1xuICAgIGNvbnN0IHVzZXJPYmogPSBbLi4ubGlzdF07XG4gICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICB1c2VyLm1lbWJlcl9pZCA9IHVzZXI/Lm15X21lbWJlcl9pZDtcbiAgICB9KTtcbiAgICBsaXN0ID0gWy4uLnVzZXJPYmpdO1xuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgcmVmcmVzaEFsbExpc3RzKCkge1xuICAgIGxldCBhc3NpZ25vckFuZEFzc2lnbmVlc0lkczogYW55ID0gW107XG4gICAgbGV0IGFsbFVzZXJzSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgYXNzaWduZWVHcm91cElkczogYW55ID0gW107XG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgYXNzaWduZWVJZHM6IGFueSA9IFtdO1xuICAgIGxldCBncm91cFJldmlld2VySWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZ3JvdXBPdmVyc2VlcklkczogYW55ID0gW107XG4gICAgdGhpcy5yZXZpZXdlcklkcyA9IFtdO1xuICAgIHRoaXMuYXNzaWdub3JJZCA9IFtdO1xuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbXTtcbiAgICB0aGlzLmFzc2lnbmVlSWRzID0gW107XG5cbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLmFsbFVzZXJzTGlzdCk7XG4gICAgY29uc3QgYWxsR3JvdXBzID0gY2xvbmVEZWVwKHRoaXMuT3JnR3JvdXApO1xuICAgIGNvbnN0IGJlaGFsZlVzZXJzID0gY2xvbmVEZWVwKHRoaXMuYmVoYWxmT2ZVc2Vyc0xpc3QpO1xuXG4gICAgY29uc3QgYXNzaWdub3JzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3QpO1xuICAgIGNvbnN0IGFzc2lnbmVlcyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0KTtcblxuICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBMaXN0ID0gY2xvbmVEZWVwKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0XG4gICAgKTtcbiAgICBjb25zdCByZXZpZXdlcnMgPSBjbG9uZURlZXAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLmxpc3QpO1xuICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJzTGlzdCA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QpXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IG92ZXJzZWVyTGlzdCA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0KTtcbiAgICBjb25zdCBncm91cE92ZXJzZWVyTGlzdCA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0KVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0XG4gICAgKTtcbiAgICBjb25zdCBncm91cE5vdGlmeU92ZXJzZWVycyA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0KVxuICAgICAgOiBbXTtcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyLm1lbWJlcl9pZCk7XG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh1c2VyLm1lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgYXNzaWduZWVzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICAgIGFzc2lnbmVlSWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICAgIHRoaXMuYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoID09IDApIHtcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godGhpcy5tZW1iZXJJZCk7XG4gICAgICB0aGlzLmFzc2lnbm9ySWQucHVzaCh0aGlzLm1lbWJlcklkKTtcbiAgICB9XG4gICAgYWxsVXNlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYWxsVXNlcnNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgIH0pO1xuICAgIGFzc2lnbmVlR3JvdXBMaXN0Py5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBhc3NpZ25lZUdyb3VwSWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcbiAgICB9KTtcblxuICAgIHJldmlld2Vycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICByZXZpZXdlcnNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5yZXZpZXdlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgZ3JvdXBSZXZpZXdlcnNMaXN0Py5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBncm91cFJldmlld2VySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcbiAgICB9KTtcbiAgICBncm91cE92ZXJzZWVyTGlzdD8uZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xuICAgICAgZ3JvdXBPdmVyc2Vlcklkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XG4gICAgfSk7XG4gICAgZ3JvdXBOb3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGdyb3VwT3ZlcnNlZXJJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xuICAgIH0pO1xuICAgIG92ZXJzZWVyTGlzdD8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICBvdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgICB0aGlzLm92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBub3RpZnlPdmVyc2VlcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5vdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG5cbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzKV07XG4gICAgYWxsVXNlcnNJZHMgPSBbLi4ubmV3IFNldChhbGxVc2Vyc0lkcyldO1xuICAgIGFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVJZHMpXTtcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XG4gICAgdGhpcy5hc3NpZ25vcklkID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25vcklkKV07XG4gICAgdGhpcy5hc3NpZ25lZUlkcyA9IFsuLi5uZXcgU2V0KHRoaXMuYXNzaWduZWVJZHMpXTtcbiAgICB0aGlzLnJldmlld2VySWRzID0gWy4uLm5ldyBTZXQodGhpcy5yZXZpZXdlcklkcyldO1xuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLm92ZXJzZWVySWRzKV07XG5cbiAgICBhc3NpZ25lZUdyb3VwSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVHcm91cElkcyldO1xuICAgIGdyb3VwUmV2aWV3ZXJJZHMgPSBbLi4ubmV3IFNldChncm91cFJldmlld2VySWRzKV07XG4gICAgZ3JvdXBPdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KGdyb3VwT3ZlcnNlZXJJZHMpXTtcbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PiAhb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5hc3NpZ25lZXNMaXN0ID0gYWxsVXNlcnM7XG4gICAgdGhpcy5yZXZpZXdlcnNMaXN0ID0gYWxsVXNlcnM7XG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnM7XG5cbiAgICB0aGlzLmRpc2FibGVMaXN0KFxuICAgICAgYWxsVXNlcnMsXG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyxcbiAgICAgIGFzc2lnbmVlSWRzLFxuICAgICAgcmV2aWV3ZXJzSWRzLFxuICAgICAgb3ZlcnNlZXJJZHNcbiAgICApO1xuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgdGhpcy5ncm91cEFzc2lnbmVlTGlzdCA9IGFsbEdyb3Vwcy5maWx0ZXIoXG4gICAgICAgIChncm91cDogYW55KSA9PlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8XG4gICAgICAgICAgICBncm91cE92ZXJzZWVySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucmV2aWV3ZXJNZW1iZXJJZHNMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5hbGxVc2Vyc0xpc3QpO1xuICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQodGhpcy5hbGxVc2Vyc0xpc3QpO1xuICAgICAgdGhpcy5ncm91cFJldmlld2VyTGlzdCA9IGFsbEdyb3Vwcy5maWx0ZXIoXG4gICAgICAgIChncm91cDogYW55KSA9PlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBncm91cE92ZXJzZWVySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpIHx8XG4gICAgICAgICAgICBhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpXG4gICAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3QgPSBhbGxHcm91cHMuZmlsdGVyKFxuICAgICAgICAoZ3JvdXA6IGFueSkgPT5cbiAgICAgICAgICAhKFxuICAgICAgICAgICAgYXNzaWduZWVHcm91cElkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fFxuICAgICAgICAgICAgZ3JvdXBSZXZpZXdlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKVxuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZUxpc3QoXG4gICAgYWxsVXNlcnM6IGFueSxcbiAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkczogYW55LFxuICAgIGFzc2lnbmVlSWRzOiBhbnksXG4gICAgcmV2aWV3ZXJzSWRzOiBhbnksXG4gICAgb3ZlcnNlZXJJZHM6IGFueVxuICApIHtcbiAgICBsZXQgZGlzYWJsZUFzc2lnbmVlTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgIHJldmlld2Vyc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlQXNzaWduZWVJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgIGRpc2FibGVBc3NpZ25lZUxpc3QsXG4gICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlUmFkaW9Bc3NpZ25lZSA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgZGlzYWJsZUFzc2lnbmVlTGlzdCxcbiAgICAgICdlbXBsb3llZV9pZCdcbiAgICApO1xuICAgIGxldCBkaXNhYmxlUmV2aWV3ZXJMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHxcbiAgICAgICAgYXNzaWduZWVJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZClcbiAgICApO1xuICAgIHRoaXMuZGlzYWJsZVJldmlld2VySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICBkaXNhYmxlUmV2aWV3ZXJMaXN0LFxuICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICk7XG4gICAgbGV0IGRpc2FibGVPdmVyc2Vlckxpc3QgPSBhbGxVc2Vycy5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZClcbiAgICApO1xuICAgIHRoaXMuZGlzYWJsZU92ZXJzZWVySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICBkaXNhYmxlT3ZlcnNlZXJMaXN0LFxuICAgICAgJ2VtcGxveWVlX2lkJ1xuICAgICk7XG4gICAgaWYgKHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzKSB7XG4gICAgICBsZXQgZGlzYWJsZVJldmlld2VyTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgICBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICAgIGFzc2lnbmVlSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5kaXNhYmxlUmV2aWV3ZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgZGlzYWJsZVJldmlld2VyTGlzdCxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgICBsZXQgZGlzYWJsZU92ZXJzZWVyc0xpc3QgPSBhbGxVc2Vycy5maWx0ZXIoXG4gICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHxcbiAgICAgICAgICByZXZpZXdlcnNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZClcbiAgICAgICk7XG4gICAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICBkaXNhYmxlT3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaExpc3RzV2hpbGVQcm9ncmFtU2VsZWN0ZWQoKSB7XG4gICAgbGV0IGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgcmV2aWV3ZXJzSWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgb3ZlcnNlZXJJZHM6IGFueSA9IFtdO1xuICAgIGxldCBhc3NpZ25lZUlkczogYW55ID0gW107XG4gICAgbGV0IGFzc2lnbmVlR3JvdXBJZHM6IGFueSA9IFtdO1xuICAgIGxldCBncm91cFJldmlld2VySWRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZ3JvdXBPdmVyc2VlcklkczogYW55ID0gW107XG4gICAgdGhpcy5yZXZpZXdlcklkcyA9IFtdO1xuICAgIHRoaXMuYXNzaWdub3JJZCA9IFtdO1xuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbXTtcbiAgICB0aGlzLmFzc2lnbmVlSWRzID0gW107XG4gICAgY29uc3QgYmVoYWxmVXNlcnMgPSBjbG9uZURlZXAodGhpcy5iZWhhbGZPZlVzZXJzTGlzdCk7XG4gICAgY29uc3QgYWxsR3JvdXBzID0gY2xvbmVEZWVwKHRoaXMuT3JnR3JvdXApO1xuICAgIGNvbnN0IGFzc2lnbm9ycyA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMubGlzdCk7XG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3QpO1xuICAgIGNvbnN0IGFzc2lnbmVlR3JvdXBMaXN0ID0gdGhpcy5mZWF0dXJlRmxhZ19ncm91cHNcbiAgICAgID8gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdClcbiAgICAgIDogW107XG4gICAgY29uc3QgcmV2aWV3ZXJzID0gY2xvbmVEZWVwKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3QpO1xuICAgIGNvbnN0IGdyb3VwUmV2aWV3ZXJzTGlzdCA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3QpXG4gICAgICA6IFtdO1xuICAgIGNvbnN0IG92ZXJzZWVyTGlzdCA9IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0KTtcbiAgICBjb25zdCBncm91cE92ZXJzZWVyTGlzdCA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0KVxuICAgICAgOiBbXTtcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAoXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0XG4gICAgKTtcbiAgICBjb25zdCBncm91cE5vdGlmeU92ZXJzZWVycyA9IHRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzXG4gICAgICA/IGNsb25lRGVlcCh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0KVxuICAgICAgOiBbXTtcbiAgICBhc3NpZ25vcnM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hc3NpZ25vcklkLnB1c2godXNlcj8ubWVtYmVyX2lkKTtcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLnB1c2godXNlcj8ubWVtYmVyX2lkKTtcbiAgICB9KTtcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgYXNzaWduZWVJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5hc3NpZ25lZUlkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICBhc3NpZ25vckFuZEFzc2lnbmVlc0lkcy5wdXNoKHRoaXMubWVtYmVySWQpO1xuICAgICAgdGhpcy5hc3NpZ25vcklkLnB1c2godGhpcy5tZW1iZXJJZCk7XG4gICAgfVxuXG4gICAgYXNzaWduZWVHcm91cExpc3Q/LmZvckVhY2goKGdyb3VwOiBhbnkpID0+IHtcbiAgICAgIGFzc2lnbmVlR3JvdXBJZHMucHVzaChncm91cD8uZ3JvdXBfaWQpO1xuICAgIH0pO1xuICAgIHJldmlld2Vycz8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICByZXZpZXdlcnNJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5yZXZpZXdlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgZ3JvdXBSZXZpZXdlcnNMaXN0Py5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBncm91cFJldmlld2VySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcbiAgICB9KTtcbiAgICBvdmVyc2Vlckxpc3Q/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgb3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgICAgdGhpcy5vdmVyc2Vlcklkcy5wdXNoKHVzZXI/Lm15X21lbWJlcl9pZCk7XG4gICAgfSk7XG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlcj8ubXlfbWVtYmVyX2lkKTtcbiAgICAgIHRoaXMub3ZlcnNlZXJJZHMucHVzaCh1c2VyPy5teV9tZW1iZXJfaWQpO1xuICAgIH0pO1xuICAgIGdyb3VwT3ZlcnNlZXJMaXN0Py5mb3JFYWNoKChncm91cDogYW55KSA9PiB7XG4gICAgICBncm91cE92ZXJzZWVySWRzLnB1c2goZ3JvdXA/Lmdyb3VwX2lkKTtcbiAgICB9KTtcbiAgICBncm91cE5vdGlmeU92ZXJzZWVycz8uZm9yRWFjaCgoZ3JvdXA6IGFueSkgPT4ge1xuICAgICAgZ3JvdXBPdmVyc2Vlcklkcy5wdXNoKGdyb3VwPy5ncm91cF9pZCk7XG4gICAgfSk7XG4gICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25vckFuZEFzc2lnbmVlc0lkcyldO1xuICAgIGFzc2lnbmVlSWRzID0gWy4uLm5ldyBTZXQoYXNzaWduZWVJZHMpXTtcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XG4gICAgYXNzaWduZWVHcm91cElkcyA9IFsuLi5uZXcgU2V0KGFzc2lnbmVlR3JvdXBJZHMpXTtcbiAgICBncm91cFJldmlld2VySWRzID0gWy4uLm5ldyBTZXQoZ3JvdXBSZXZpZXdlcklkcyldO1xuICAgIGdyb3VwT3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldChncm91cE92ZXJzZWVySWRzKV07XG4gICAgdGhpcy5hc3NpZ25vcklkID0gWy4uLm5ldyBTZXQodGhpcy5hc3NpZ25vcklkKV07XG4gICAgdGhpcy5hc3NpZ25lZUlkcyA9IFsuLi5uZXcgU2V0KHRoaXMuYXNzaWduZWVJZHMpXTtcbiAgICB0aGlzLnJldmlld2VySWRzID0gWy4uLm5ldyBTZXQodGhpcy5yZXZpZXdlcklkcyldO1xuICAgIHRoaXMub3ZlcnNlZXJJZHMgPSBbLi4ubmV3IFNldCh0aGlzLm92ZXJzZWVySWRzKV07XG5cbiAgICB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PiAhb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5hc3NpZ25lZXNMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdD8uYXNzaWduZWVzTGlzdDtcbiAgICB0aGlzLnJldmlld2Vyc0xpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5yZXZpZXdlcnNMaXN0O1xuICAgIHRoaXMub3ZlcnNlZXJzTGlzdCA9IHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Q/Lm92ZXJzZWVyc0xpc3Q7XG5cbiAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgIHRoaXMuZ3JvdXBBc3NpZ25lZUxpc3QgPVxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5hc3NpZ25lZV9ncm91cF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRoaXMucHJvZ3JhbUdyb3VwTGlzdChcbiAgICAgICAgICAgIGFsbEdyb3VwcyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5hc3NpZ25lZV9ncm91cF9pZHNcbiAgICAgICAgICApXG4gICAgICAgICAgOiBhbGxHcm91cHMuZmlsdGVyKFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgZ3JvdXBSZXZpZXdlcklkcz8uaW5jbHVkZXMoZ3JvdXA/Lmdyb3VwX2lkKSB8fFxuICAgICAgICAgICAgICAgIGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICB0aGlzLnJldmlld2VyTWVtYmVySWRzTGlzdCA9IHRoaXMuYXNzaWduVXNlck1lbWJlcklkKFxuICAgICAgICB0aGlzLnByb2dyYW1QZW9wbGVMaXN0LnJldmlld2Vyc0xpc3RcbiAgICAgICk7XG4gICAgICB0aGlzLmdyb3VwUmV2aWV3ZXJMaXN0ID1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0gJiZcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucmV2aWV3ZXJfZ3JvdXBfaWRzPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0aGlzLnByb2dyYW1Hcm91cExpc3QoXG4gICAgICAgICAgICBhbGxHcm91cHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8ucmV2aWV3ZXJfZ3JvdXBfaWRzXG4gICAgICAgICAgKVxuICAgICAgICAgIDogYWxsR3JvdXBzLmZpbHRlcihcbiAgICAgICAgICAgIChncm91cDogYW55KSA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGdyb3VwT3ZlcnNlZXJJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHxcbiAgICAgICAgICAgICAgICBhc3NpZ25lZUdyb3VwSWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gdGhpcy5hc3NpZ25Vc2VyTWVtYmVySWQoXG4gICAgICAgIHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Qub3ZlcnNlZXJzTGlzdFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JvdXBPdmVyc2Vlckxpc3QgPVxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJlxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm9ncmFtPy5vdmVyc2VlcnM/LmNjX2VtYWlsX2dyb3Vwcz8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5wcm9ncmFtR3JvdXBMaXN0KFxuICAgICAgICAgICAgYWxsR3JvdXBzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW0/Lm92ZXJzZWVycz8uY2NfZW1haWxfZ3JvdXBzXG4gICAgICAgICAgKVxuICAgICAgICAgIDogYWxsR3JvdXBzLmZpbHRlcihcbiAgICAgICAgICAgIChncm91cDogYW55KSA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGFzc2lnbmVlR3JvdXBJZHM/LmluY2x1ZGVzKGdyb3VwPy5ncm91cF9pZCkgfHxcbiAgICAgICAgICAgICAgICBncm91cFJldmlld2VySWRzPy5pbmNsdWRlcyhncm91cD8uZ3JvdXBfaWQpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgIH1cbiAgICB0aGlzLmRpc2FibGVQcm9ncmFtTGlzdChcbiAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzLFxuICAgICAgYXNzaWduZWVJZHMsXG4gICAgICByZXZpZXdlcnNJZHMsXG4gICAgICBvdmVyc2Vlcklkc1xuICAgICk7XG4gIH1cblxuICBwcm9ncmFtR3JvdXBMaXN0KGFsbEdyb3VwczogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIC8vIGFyZ3NbMF1cbiAgICBsZXQgYXNzaWduZWVQcm9ncmFtOiBhbnkgPSBbXTtcbiAgICBsZXQgZ3JvdXBJZHMgPSBhcmdzWzBdO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJvZ3JhbSAmJiB0aGlzLnNlbGVjdGVkUHJvZ3JhbT8uYXNzaWduZWVfZ3JvdXBfaWRzKSB7XG4gICAgICBhc3NpZ25lZVByb2dyYW0gPSBhbGxHcm91cHMuZmlsdGVyKChncm91cDogYW55KSA9PlxuICAgICAgICBncm91cElkcy5pbmNsdWRlcyhncm91cC5ncm91cF9pZClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBhc3NpZ25lZVByb2dyYW07XG4gIH1cblxuICBkaXNhYmxlUHJvZ3JhbUxpc3QoXG4gICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM6IGFueSxcbiAgICBhc3NpZ25lZUlkczogYW55LFxuICAgIHJldmlld2Vyc0lkczogYW55LFxuICAgIG92ZXJzZWVySWRzOiBhbnlcbiAgKSB7XG4gICAgbGV0IGRpc2FibGVBc3NpZ25lZUxpc3QgPSB0aGlzLnByb2dyYW1QZW9wbGVMaXN0Py5hc3NpZ25lZXNMaXN0LmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgIHJldmlld2Vyc0lkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlQXNzaWduZWVJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgIGRpc2FibGVBc3NpZ25lZUxpc3QsXG4gICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlUmFkaW9Bc3NpZ25lZSA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgZGlzYWJsZUFzc2lnbmVlTGlzdCxcbiAgICAgICdlbXBsb3llZV9pZCdcbiAgICApO1xuICAgIGxldCBkaXNhYmxlUmV2aWV3ZXJMaXN0ID0gdGhpcy5wcm9ncmFtUGVvcGxlTGlzdD8ucmV2aWV3ZXJzTGlzdC5maWx0ZXIoXG4gICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICBvdmVyc2Vlcklkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKSB8fFxuICAgICAgICBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICk7XG4gICAgdGhpcy5kaXNhYmxlUmV2aWV3ZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgIGRpc2FibGVSZXZpZXdlckxpc3QsXG4gICAgICAnZW1wbG95ZWVfaWQnXG4gICAgKTtcbiAgICBsZXQgZGlzYWJsZU92ZXJzZWVyTGlzdCA9IHRoaXMucHJvZ3JhbVBlb3BsZUxpc3Q/Lm92ZXJzZWVyc0xpc3QuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgYXNzaWdub3JBbmRBc3NpZ25lZXNJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHxcbiAgICAgICAgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgKTtcbiAgICB0aGlzLmRpc2FibGVPdmVyc2VlcklkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgZGlzYWJsZU92ZXJzZWVyTGlzdCxcbiAgICAgICdlbXBsb3llZV9pZCdcbiAgICApO1xuICAgIGlmICh0aGlzLmZlYXR1cmVGbGFnX2dyb3Vwcykge1xuICAgICAgbGV0IGRpc2FibGVSZXZpZXdlckxpc3QgPSB0aGlzLnJldmlld2VyTWVtYmVySWRzTGlzdC5maWx0ZXIoXG4gICAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICAgb3ZlcnNlZXJJZHM/LmluY2x1ZGVzKHVzZXI/Lm15X21lbWJlcl9pZCkgfHxcbiAgICAgICAgICBhc3NpZ25lZUlkcz8uaW5jbHVkZXModXNlcj8ubXlfbWVtYmVyX2lkKVxuICAgICAgKTtcbiAgICAgIHRoaXMuZGlzYWJsZVJldmlld2VySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIGRpc2FibGVSZXZpZXdlckxpc3QsXG4gICAgICAgICdtZW1iZXJfaWQnXG4gICAgICApO1xuICAgICAgbGV0IGRpc2FibGVPdmVyc2Vlckxpc3QgPSB0aGlzLm92ZXJzZWVyc0xpc3QuZmlsdGVyKFxuICAgICAgICAodXNlcjogYW55KSA9PlxuICAgICAgICAgIGFzc2lnbm9yQW5kQXNzaWduZWVzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpIHx8XG4gICAgICAgICAgcmV2aWV3ZXJzSWRzPy5pbmNsdWRlcyh1c2VyPy5teV9tZW1iZXJfaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5kaXNhYmxlT3ZlcnNlZXJJZHMgPSB0aGlzLnJldHVybklkcyhcbiAgICAgICAgZGlzYWJsZU92ZXJzZWVyTGlzdCxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBmb3JtIGlzIHZhbGlkLCB0aGVuIGlmIHRoZSBtb2RlIGlzIEVESVQsIHRoZW4gc2V0IHRoZSBvcmdhbml6YXRpb25JZCBhbmQgbWVtYmVySWQgdG8gdGhlXG4gICAqIGF1dGhTZXJ2aWNlIHZhbHVlcywgYW5kIHRoZW4gY2FsbCB0aGUgZW50cnVzdFJlc3BvbnNpYmlsaXR5IGZ1bmN0aW9uIHdpdGggdGhlIHJlc3BvbnNpYmlsaXR5Rm9ybSBhc1xuICAgKiBhIHBhcmFtZXRlci5cbiAgICpcbiAgICogSWYgdGhlIG1vZGUgaXMgbm90IEVESVQsIHRoZW4gY2FsbCB0aGUgZW50cnVzdFJlc3BvbnNpYmlsaXR5IGZ1bmN0aW9uIHdpdGggdGhlIHJlc3BvbnNpYmlsaXR5Rm9ybVxuICAgKiBhcyBhIHBhcmFtZXRlci5cbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlLlxuICAgKi9cbiAgc3VibWl0UmVzcG9uc2liaWxpdHkoKSB7XG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUmVzcG9uc2liaWxpdHkoKTtcbiAgICBpZiAoIXZhbGlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnICYmICF0aGlzLmlzRHVwbGljYXRlKSB7XG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25JZCgpO1xuICAgICAgdGhpcy5tZW1iZXJJZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0TWVtYmVySWQoKTtcbiAgICAgIHRoaXMuZW50cnVzdFJlc3BvbnNpYmlsaXR5KHRoaXMucmVzcG9uc2liaWxpdHlGb3JtKTtcbiAgICAgIC8vIGVkaXQgY29uZGl0aW9uc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVudHJ1c3RSZXNwb25zaWJpbGl0eSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIGVtcHR5LCBvciB0aGUgZnJlcXVlbmN5IGlzIGVtcHR5LCBvciB0aGUgYXNzaWduZWVzIGxpc3QgaXMgZW1wdHksXG4gICAqIHRoZW4gcmV0dXJuIGZhbHNlLiBPdGhlcndpc2UsIHJldHVybiB0cnVlLlxuICAgKi9cbiAgdmFsaWRhdGVSZXNwb25zaWJpbGl0eSgpIHtcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmVuYWJsZSAmJlxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3Q/Lmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICd3aG9tJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUudHJpbSgpID09ICcnXG4gICAgKSB7XG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3doYXQnO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdCB8fFxuICAgICAgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICghdGhpcy5mZWF0dXJlRmxhZ19ncm91cHMgfHxcbiAgICAgICAgICAoKCF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3QgfHxcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID09IDApICYmXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcykpKVxuICAgICkge1xuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICd3aG8nO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5IHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT0gJycgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJycgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9PT0gJzV+MH4wfjAnXG4gICAgKSB7XG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJ3doZW4nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludmFsaWRUeXBlID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIXRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUudHJpbSgpID09ICcnIHx8XG4gICAgICAhdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZnJlcXVlbmN5IHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICcnIHx8XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mcmVxdWVuY3kgPT09ICc1fjB+MH4wJyB8fFxuICAgICAgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0Py5sZW5ndGggPT0gMCAmJlxuICAgICAgICAoIXRoaXMuZmVhdHVyZUZsYWdfZ3JvdXBzIHx8XG4gICAgICAgICAgKCghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdCB8fFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVHcm91cHMubGlzdD8ubGVuZ3RoID09IDApICYmXG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVGbGFnX2dyb3VwcykpKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBlbnRydXN0UmVzcG9uc2liaWxpdHkoZW50cnVzdEZvcm06IGFueSkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5lbnRydXN0TG9hZGVyID0gdHJ1ZTtcbiAgICBsZXQgc3RhcnREYXRlID0gbW9tZW50KHBhcnNlSW50KGVudHJ1c3RGb3JtLnN0YXJ0RGF0ZSkgKiAxMDAwKS5mb3JtYXQoXG4gICAgICAnWVlZWS1NTS1ERCBISDptbTpzcydcbiAgICApO1xuICAgIHN0YXJ0RGF0ZSA9IG1vbWVudChzdGFydERhdGUuc3BsaXQoJyAnKVswXSArICcgMDA6MDA6MDAnKS5mb3JtYXQoXG4gICAgICAnWVlZWS1NTS1ERCBISDptbTpzcydcbiAgICApO1xuICAgIGNvbnN0IHJjRGV0YWlscyA9XG4gICAgICBlbnRydXN0Rm9ybS5yYz8ubGVuZ3RoID4gMFxuICAgICAgICA/IGVudHJ1c3RGb3JtLnJjLm1hcCgocmM6IGFueSk6IGFueSA9PiB7XG4gICAgICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmNEZXRhaWxzQXJyID0ge1xuICAgICAgICAgICAgICAgIHBhcmVudF9yY19pZHM6IHJjLnBhcmVudF9yY19pZHMsXG4gICAgICAgICAgICAgICAgcmNfaWQ6IHJjLnJjaWQsXG4gICAgICAgICAgICAgICAgY2hpbGRfcmNfaWRzOiByYz8uaXRlbV9jaGlsZF9pZHMsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHJldHVybiByY0RldGFpbHNBcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBbXTtcbiAgICBjb25zdCByY0RldGFpbHNJZEFyciA9XG4gICAgICBlbnRydXN0Rm9ybS5yYz8ubGVuZ3RoID4gMFxuICAgICAgICA/IGVudHJ1c3RGb3JtLnJjLm1hcCgocmM6IGFueSk6IGFueSA9PiB7XG4gICAgICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJjLnJjaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBbXTtcblxuICAgIGNvbnN0IG1vcmVPcHRpb25zID0gdGhpcy5tb3JlT3B0aW9ucztcblxuICAgIGNvbnN0IGNoZWNrQ29udGludW91c0ZhaWxlZFZhbHVlID0gKGRldGFpbHM6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgZnJlcXVlbmN5VHlwZSA9IHBhcnNlSW50KGRldGFpbHMuc3BsaXQoJ34nKVswXSk7XG4gICAgICBpZiAoZnJlcXVlbmN5VHlwZSA9PT0gMSB8fCBmcmVxdWVuY3lUeXBlID09PSAyIHx8IGZyZXF1ZW5jeVR5cGUgPT09IDMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGxldCBsaW5rZWRQcm9ncmFtSWRzOiBhbnlbXSA9IFtdO1xuICAgIGxldCBsaW5rZWRDYXRlZ29yeUlkczogYW55W10gPSBbXTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1bMF0/LmNhdGVnb3J5X2lkICE9PSBlbGU/LmNhdGVnb3J5X2lkXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHtcbiAgICAgICAgICBwcm9ncmFtSWQ6IGVsZT8uY2F0ZWdvcnlfaWQsXG4gICAgICAgICAgcHJvZ3JhbU9iamVjdElkOiBlbGU/Ll9pZCxcbiAgICAgICAgICBzdWJQcm9ncmFtSWRzOiBlbGU/LmNoaWxkX2lkPy5maWx0ZXIoKGVsOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeT8uaW5jbHVkZXMoZWwpO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBsaW5rZWRQcm9ncmFtSWRzPy5wdXNoKHByb2dyYW0pO1xuICAgICAgICBsaW5rZWRDYXRlZ29yeUlkcz8ucHVzaChlbGU/LmNhdGVnb3J5X2lkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCBjYXRlZ29yeUlkc0V4Y2VwdERlZmF1bHQ6IGFueSA9IFtdO1xuICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5jYXRlZ29yeSkge1xuICAgICAgY2F0ZWdvcnlJZHNFeGNlcHREZWZhdWx0ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5Py5maWx0ZXIoXG4gICAgICAgIChlbDogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGVsICE9PSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWQgJiZcbiAgICAgICAgICAgICF0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVswXT8uY2hpbGRfaWQ/LmluY2x1ZGVzKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICkgXG4gICAgfVxuICAgIHRoaXMuY29tYmluZVVzZXJBbmRVc2VyR3JvdXBNZW1iZXJzKFxuICAgICAgdGhpcy5tb2RlID09PSAnRURJVCcgJiZcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9PT0gJ0FMTCcgJiZcbiAgICAgIHRoaXMucmF3UmVzcG9uc2liaWxpdHk/LnVzZXJHcm91cElkcz8uYXNzaWduZWVBbGxHcm91cElkcz8ubGVuZ3RoXG4gICAgKTtcblxuICAgIGNvbnN0IHJlbWFya3MgPVxuICAgICAgZW50cnVzdEZvcm0uZGVzY3JpcHRpb24ucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgPyBlbnRydXN0Rm9ybS5kZXNjcmlwdGlvblxuICAgICAgICA6ICcnO1xuICAgIGNvbnN0IG9iamVjdGl2ZSA9XG4gICAgICBlbnRydXN0Rm9ybS5vYmplY3RpdmUucmVwbGFjZSgvXFwmbmJzcDsvZywgJycpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgPyBlbnRydXN0Rm9ybS5vYmplY3RpdmVcbiAgICAgICAgOiAnJztcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xuICAgICAgYXBwX2Fzc29jaWF0aW9uOiBbXSxcbiAgICAgIGFzc2lnbmVlX21lbWJlcl9pZDogdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHRoaXMuYXNzaWduZWVVc2VyTGlzdCxcbiAgICAgICAgJ3VpZCdcbiAgICAgICkudG9TdHJpbmcoKSxcbiAgICAgIHByb2dyYW1fY2F0X2lkczogbW9yZU9wdGlvbnM/LlBST0dSQU1cbiAgICAgICAgPyBlbnRydXN0Rm9ybT8ucHJvZ3JhbT8ubGVuZ3RoXG4gICAgICAgICAgPyBbZW50cnVzdEZvcm0/LnByb2dyYW1bMF0/LmNhdGVnb3J5X2lkXVxuICAgICAgICAgIDogW11cbiAgICAgICAgOiBbXSxcbiAgICAgIGxpbmtlZF9wcm9ncmFtX2lkczogbGlua2VkUHJvZ3JhbUlkcyxcbiAgICAgIGxpbmtlZF9jYXRlZ29yeV9pZHM6IHRoaXMuZ2V0VW5pcXVlSWRzKFtcbiAgICAgICAgLi4uY2F0ZWdvcnlJZHNFeGNlcHREZWZhdWx0LFxuICAgICAgICAuLi5saW5rZWRDYXRlZ29yeUlkcyxcbiAgICAgIF0pLFxuICAgICAgLy8gY2F0ZWdvcnlfaWQ6ICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbV9zZWxlY3RlZF9pZHM/Lmxlbmd0aCA+IDApID8gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmNhdGVnb3J5X2lkIDogJycsXG4gICAgICBjYXRlZ29yeV9pZDpcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW1fc2VsZWN0ZWRfaWRzPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyB0aGlzLmdldFVuaXF1ZUlkcyhbXG4gICAgICAgICAgICAuLi50aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2F0ZWdvcnksXG4gICAgICAgICAgICAuLi5saW5rZWRDYXRlZ29yeUlkcyxcbiAgICAgICAgICAgIC4uLltlbnRydXN0Rm9ybT8ucHJvZ3JhbVswXT8uY2F0ZWdvcnlfaWRdLFxuICAgICAgICAgIF0pPy5yZXZlcnNlKCkudG9TdHJpbmcoKVxuICAgICAgICAgIDogJycsXG4gICAgICBjY19tZW1iZXJfZW1haWw6IG1vcmVPcHRpb25zPy5PVkVSU0VFUlxuICAgICAgICA/IHRoaXMucmV0dXJuSWRzKHRoaXMub3ZlcnNlZXJVc2VyTGlzdCwgJ3VpZCcpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJyxcbiAgICAgIGNoZWNrcG9pbnRfZGVzY3JpcHRpb246IG1vcmVPcHRpb25zPy5DSEVDS1BPSU5UU1xuICAgICAgICA/IGVudHJ1c3RGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvblxuICAgICAgICA6ICcnLFxuICAgICAgY2hlY2twb2ludF9kZXRhaWxzOiBtb3JlT3B0aW9ucz8uQ0hFQ0tQT0lOVFNcbiAgICAgICAgPyBKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cylcbiAgICAgICAgOiAnJyxcbiAgICAgIGNoZWNrcG9pbnRfZmxhZzogMCxcbiAgICAgIGNvbGxhYm9yYXRvcl9tYXJrX2RvbmU6IDAsXG4gICAgICBjb21tZW50OiAnJyxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGNoZWNrQ29udGludW91c0ZhaWxlZFZhbHVlKGVudHJ1c3RGb3JtLmZyZXF1ZW5jeSlcbiAgICAgICAgPyBlbnRydXN0Rm9ybS5jb250aW51b3VzX2ZhaWxlZF9kYXlzXG4gICAgICAgIDogMCxcbiAgICAgIGNvc3Rfb2ZfY29tcGxpYW5jZTogJycsXG4gICAgICBjcmVhdGVkX2J5OiBlbnRydXN0Rm9ybS5hc3NpZ25vcnMubGlzdD8ubGVuZ3RoIDwgMSA/IDAgOiB0aGlzLm1lbWJlcklkLFxuICAgICAgY3JlYXRpb25fd2luZG93OiAwLFxuICAgICAgY3VzdG9tX3RhZ3M6IGVudHJ1c3RGb3JtLmN1c3RvbVRhZ3MsXG4gICAgICBlbnRpdHlfdHJlZTogbW9yZU9wdGlvbnM/LlJDXG4gICAgICAgID8gdGhpcy5pc1Jlc3BvbnNpYmlsaXR5UmNMaW5rRW5hYmxlZCAmJlxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID09IDFcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiByY0RldGFpbHNcbiAgICAgICAgOiBbXSxcbiAgICAgIGVudHJ1c3RfZnJvbV9yaXNrOiB0aGlzLm9wZW5lZEZyb20gPT09ICdSSVNLX1RSRUFUTUVOVCcgPyB0cnVlIDogZmFsc2UsXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZW50cnVzdEZvcm0uZmFpbGVkX2FmdGVyX2RheXMsXG4gICAgICBmYWlsZWRfdGltZV91dGM6IGVudHJ1c3RGb3JtLmZhaWxlZF90aW1lX3V0YyxcbiAgICAgIGZhaWx1cmVfY2NfbWVtYmVyX2VtYWlsOiBtb3JlT3B0aW9ucz8uT1ZFUlNFRVJcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyh0aGlzLm92ZXJzZWVyVXNlck5vdGlmeUxpc3QsICd1aWQnKS50b1N0cmluZygpXG4gICAgICAgIDogJycsXG4gICAgICBmcmVxdWVuY3lfZGV0YWlsczogZW50cnVzdEZvcm0uZnJlcXVlbmN5LFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGVudHJ1c3RGb3JtLnRpbWVJbjI0SHIgPz8gREVGQVVMVF8yNEhSLFxuICAgICAgZ3JjX29iamVjdF9pZDogMCxcbiAgICAgIGdyY19yZWxhdGlvbnNoaXA6ICcnLFxuICAgICAgaWZfdGVzdHBsYW5fZmFpbGVkOiAwLFxuICAgICAgaW1wYWN0OiAnJyxcbiAgICAgIGlzR3JvdXBBc3NpZ25UbzpcbiAgICAgICAgZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTllfT05FJyA/IDEgOiAwLFxuICAgICAgaXNfa2V5X2NvbXBsaWFuY2U6IGVudHJ1c3RGb3JtLnJlc3BvbnNpYmlsaXR5LmtleVJlc3BvbnNpYmlsaXR5ID8gMSA6IDAsXG4gICAgICBhbGxvd0VkaXREdWVEYXRlOiBlbnRydXN0Rm9ybT8uYWxsb3dFZGl0RHVlRGF0ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGxpYnJhcnlfcmVwb3J0X2lkOiAwLFxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGVudHJ1c3RGb3JtLmxpZmVjeWNsZURldGFpbHMgPz8gJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgbGlua19mb3JfZGV0YWlsczogbW9yZU9wdGlvbnM/LkZPUk1BVEVfRVZJREVOQ0VcbiAgICAgICAgPyBlbnRydXN0Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRMaW5rc1xuICAgICAgICA6IFtdLFxuICAgICAgbGlua2FnZXM6IHsgY29tcGxpYW5jZTogW10gfSxcbiAgICAgIG1lbWJlcl9pZDpcbiAgICAgICAgdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QsICd1aWQnKT8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QsICd1aWQnKVswXVxuICAgICAgICAgIDogdGhpcy5tZW1iZXJJZCxcbiAgICAgIG9iamVjdGl2ZTogbW9yZU9wdGlvbnM/Lk9CSkVDVElWRSA/IG9iamVjdGl2ZSA6ICcnLFxuICAgICAgb25fY29tcGxldGlvbl9vZjogZW50cnVzdEZvcm0ucmVwb3J0SWQgPyBbZW50cnVzdEZvcm0ucmVwb3J0SWRdIDogW10sXG4gICAgICBvbl9jb21wbGV0aW9uX29mX3R5cGU6IDEsXG4gICAgICBvcmdhbmlzYXRpb25faWQ6IHRoaXMub3JnYW5pemF0aW9uSWQsXG4gICAgICBvdmVycmlkZV93ZWVrbHk6IDAsXG4gICAgICBwYXJlbnRfaWQ6IDAsXG4gICAgICBwZW5hbHR5OiAnJyxcbiAgICAgIHByaXZhdGVfbGlicmFyeV9pZDogMCxcbiAgICAgIHJlbWFya3M6IHJlbWFya3MsXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZW50cnVzdEZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMsXG4gICAgICByZXBvcnRfZm9ybWF0OiBtb3JlT3B0aW9ucz8uRk9STUFURV9FVklERU5DRVxuICAgICAgICA/IGVudHJ1c3RGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdEZpbGVzXG4gICAgICAgIDogW10sXG4gICAgICBpc0Zvcm1hdFVwbG9hZDpcbiAgICAgICAgbW9yZU9wdGlvbnM/LkZPUk1BVEVfRVZJREVOQ0UgJiZcbiAgICAgICAgICBlbnRydXN0Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRSZXF1aXJlZFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcbiAgICAgIHJlcG9ydF9mb3JtYXRfbGluazogJycsXG4gICAgICByZXBvcnRfbmFtZTogZW50cnVzdEZvcm0ucmVzcG9uc2liaWxpdHkubmFtZSxcbiAgICAgIHJlcG9ydF91cGxvYWRfZmxhZzogZW50cnVzdEZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZFxuICAgICAgICA/IDFcbiAgICAgICAgOiAwLFxuICAgICAgcmV2aWV3X2FmdGVyX2RheXM6IG1vcmVPcHRpb25zPy5SRVZJRVdFUlxuICAgICAgICA/IGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzID09PSAnJ1xuICAgICAgICAgID8gMFxuICAgICAgICAgIDogTnVtYmVyKGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzKVxuICAgICAgICA6IDAsXG4gICAgICByZXZpZXdfZmFpbGVkX2FmdGVyX2RheXM6IG1vcmVPcHRpb25zPy5SRVZJRVdFUlxuICAgICAgICA/IGVudHJ1c3RGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Tk90Q29tcGxldGVkRGF5cyA9PT0gJydcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IE51bWJlcihlbnRydXN0Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld05PdENvbXBsZXRlZERheXMpXG4gICAgICAgIDogMCxcbiAgICAgIHJldmlld2VyX2FycjogbW9yZU9wdGlvbnM/LlJFVklFV0VSXG4gICAgICAgID8ge1xuICAgICAgICAgIGxldmVsMToge1xuICAgICAgICAgICAgcmV2aWV3ZXJzOiB0aGlzLnNldFJldmlld2VyUGF5bG9hZChcbiAgICAgICAgICAgICAgdGhpcy5yZXZpZXdlclVzZXJMaXN0LFxuICAgICAgICAgICAgICAnbGlzdCcsXG4gICAgICAgICAgICAgIGVudHJ1c3RGb3JtLnJldmlld2Vycy5hY2NlcHRlZERhdGEsXG4gICAgICAgICAgICAgIGVudHJ1c3RGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3dcbiAgICAgICAgICAgICAgICA/ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICAgIDogJ0FOWU9ORSdcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0eXBlOiBlbnRydXN0Rm9ybS5yZXZpZXdlcnMuc2VxdWVudGlhbFdvcmtmbG93XG4gICAgICAgICAgICAgID8gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgIDogJ0FOWU9ORScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgICA6IHt9LFxuICAgICAgdXNlckdyb3VwSWRzOiB7XG4gICAgICAgIGFzc2lnbmVlQWxsR3JvdXBJZHM6XG4gICAgICAgICAgZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlICE9PSAnQU5ZX09ORSdcbiAgICAgICAgICAgID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LCAndWdpZCcpXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBhc3NpZ25lZUFueW9uZUdyb3VwSWRzOlxuICAgICAgICAgIGVudHJ1c3RGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSA9PT0gJ0FOWV9PTkUnXG4gICAgICAgICAgICA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdCwgJ3VnaWQnKVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgY2NFbWFpbEdyb3VwSWRzOlxuICAgICAgICAgIHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdCxcbiAgICAgICAgICAgICd1Z2lkJ1xuICAgICAgICAgICkgPz8gW10sXG4gICAgICAgIGZhaWx1cmVDQ0VtYWlsR3JvdXBJZHM6XG4gICAgICAgICAgdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0LFxuICAgICAgICAgICAgJ3VnaWQnXG4gICAgICAgICAgKSA/PyBbXSxcbiAgICAgICAgcmV2aWV3ZXJHcm91cElkczpcbiAgICAgICAgICB0aGlzLnJldHVybklkcyhcbiAgICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdCxcbiAgICAgICAgICAgICd1Z2lkJ1xuICAgICAgICAgICkgPz8gW10sXG4gICAgICB9LFxuICAgICAgZXhpc3RpbmdVc2VySWRzOiB7XG4gICAgICAgIGFzc2lnbmVlQWxsSWRzOlxuICAgICAgICAgIGVudHJ1c3RGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnXG4gICAgICAgICAgICA/IHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtPy5hc3NpZ25lZXM/Lmxpc3QsICd1aWQnKVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgYXNzaWduZWVBbnlvbmVJZHM6XG4gICAgICAgICAgZW50cnVzdEZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09PSAnQU5ZX09ORSdcbiAgICAgICAgICAgID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/LmFzc2lnbmVlcz8ubGlzdCwgJ3VpZCcpXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBjY0VtYWlsTWVtYmVySWRzOlxuICAgICAgICAgIHRoaXMucmV0dXJuSWRzKGVudHJ1c3RGb3JtPy5vdmVyc2VlcnM/Lmxpc3QsICd1aWQnKSA/PyBbXSxcbiAgICAgICAgZmFpbHVyZUNDRW1haWxNZW1iZXJJZHM6XG4gICAgICAgICAgdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdCwgJ3VpZCcpID8/XG4gICAgICAgICAgW10sXG4gICAgICAgIHJldmlld2VySWRzOlxuICAgICAgICAgIHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdCxcbiAgICAgICAgICAgICd1aWQnXG4gICAgICAgICAgKSA/PyBbXSxcbiAgICAgIH0sXG4gICAgICByZXZpZXdlcl9jaGVja3BvaW50czogW3sgY2hlY2twb2ludHM6IFtdLCBpbnN0cnVjdGlvbjogJycgfV0sXG4gICAgICByZXZpZXdlcl9pZDogMCxcbiAgICAgIHJpc2tfY2xhc3M6IHRoaXMuaXNSaXNrRW5hYmxlID8gZW50cnVzdEZvcm0ucmlza0NsYXNzIDogJ2xvd19tZWRpdW0nLFxuICAgICAgcmlza19pZHM6ICcnLFxuICAgICAgcmlza19tYXRyaXhfZGF0YTogbW9yZU9wdGlvbnM/LlJJU0tfQ0xBU1NJRklDQVRJT05cbiAgICAgICAgPyBlbnRydXN0Rm9ybS5yaXNrTWF0cml4XG4gICAgICAgIDogJzAsMCwwLDAsMCwwJyxcbiAgICAgIHNhbXBsZV9zaXplOiAwLFxuICAgICAgc3RhcnRfZGF0ZV91dGM6IHN0YXJ0RGF0ZSxcbiAgICAgIHN0YXR1dG9yeV9kYXk6IDAsXG4gICAgICB0ZXN0X3JlcXVpcmVkX2ZsYWc6IG1vcmVPcHRpb25zPy5BU1NVUkFOQ0VcbiAgICAgICAgPyBlbnRydXN0Rm9ybS5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwXG4gICAgICAgIDogMCxcbiAgICAgIHRlc3RwbGFuX2NhdGVnb3J5X2lkOiBtb3JlT3B0aW9ucz8uQVNTVVJBTkNFXG4gICAgICAgID8gdGhpcy5yZXR1cm5JZHMoZW50cnVzdEZvcm0uYXNzdXJhbmNlTGlzdCwgJ2NhdGVnb3J5X2lkJylcbiAgICAgICAgOiBbXSxcbiAgICAgIHRlc3RwbGFuX2NhdGVnb3J5X21hbmFnZXI6ICcnLFxuICAgICAgYXVkaXRfY2F0ZWdvcnlfZGV0YWlsczpcbiAgICAgICAgbW9yZU9wdGlvbnM/LlJFUVVJUkVTX0FVRElUICYmXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmF1ZGl0X2NhdGVnb3J5X2RldGFpbHM/LmNhdGVnb3J5X2lkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICBjYXRlZ29yeV9pZDpcbiAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXVkaXRfY2F0ZWdvcnlfZGV0YWlscy5jYXRlZ29yeV9pZCxcbiAgICAgICAgICAgIHNhbXBsZTogdGhpcy5zZWxlY3RlZFNhbXBsZSA9PT0gMCA/IHRoaXMuc2FtcGxlVmFsdWUgOiAwLFxuICAgICAgICAgICAgcGVyY2VudGFnZTogdGhpcy5zZWxlY3RlZFNhbXBsZSA9PT0gMSA/IHRoaXMuc2FtcGxlUGVyY2VudGFnZSA6IDAsXG4gICAgICAgICAgICBmcmVxdWVuY3lfcGF0dGVybjogYDF+MH4ke3RoaXMuc2VuZEF1ZGl0UmVtaW5kZXJzVmFsdWV9fjFgLFxuICAgICAgICAgICAgZnJlcXVlbmN5X3RpbWU6IG1vbWVudCh0aGlzLmF1ZGl0VGltZSwgJ0hIOm1tIGEnKS5mb3JtYXQoXG4gICAgICAgICAgICAgICdISDptbTpzcydcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IDAsXG4gICAgICAgICAgICBzYW1wbGU6IDAsXG4gICAgICAgICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgICAgICAgZnJlcXVlbmN5X3BhdHRlcm46IGBgLFxuICAgICAgICAgICAgZnJlcXVlbmN5X3RpbWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICBhc3Nlc3NtZW50OiB7XG4gICAgICAgIGNhdGVnb3J5X2lkOiBtb3JlT3B0aW9ucz8uQVNTRVNTTUVOVFxuICAgICAgICAgID8gZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkXG4gICAgICAgICAgOiAnJyxcbiAgICAgICAgYXNzZXNzbWVudF9pZDogbW9yZU9wdGlvbnM/LkFTU0VTU01FTlQgJiYgdGhpcy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF90eXBlICE9PSAnY29tcGxpYW5jZV9hdWRpdCdcbiAgICAgICAgICA/IGVudHJ1c3RGb3JtPy5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50RGV0YWlscz8uYWlkXG4gICAgICAgICAgOiBlbnRydXN0Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCxcbiAgICAgIH0sXG4gICAgICBhc3Nlc3NtZW50X2NoZWNrcG9pbnQ6IG1vcmVPcHRpb25zPy5DSEVDS1BPSU5UU19ORVdcbiAgICAgICAgPyBPYmplY3Qua2V5cyhlbnRydXN0Rm9ybT8ubmV3X2NoZWNrcG9pbnRzKT8ubGVuZ3RoID4gMFxuICAgICAgICAgID8gZW50cnVzdEZvcm0/Lm5ld19jaGVja3BvaW50c1xuICAgICAgICAgIDoge31cbiAgICAgICAgOiB7fSxcbiAgICAgIHF1ZXN0aW9ubmFpcmVfdHlwZTogbW9yZU9wdGlvbnM/LkNIRUNLUE9JTlRTX05FV1xuICAgICAgICA/IE9iamVjdC5rZXlzKGVudHJ1c3RGb3JtPy5uZXdfY2hlY2twb2ludHMpPy5sZW5ndGggPiAwXG4gICAgICAgICAgPyAnYXNzZXNzbWVudF9jaGVja3BvaW50J1xuICAgICAgICAgIDogbW9yZU9wdGlvbnM/LkFTU0VTU01FTlQgJiYgZW50cnVzdEZvcm0/LmFzc2Vzc21lbnQ/LmNhdGVnb3J5X2lkXG4gICAgICAgICAgICA/ICdhc3Nlc3NtZW50J1xuICAgICAgICAgICAgOiBKU09OLnN0cmluZ2lmeSh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uY2hlY2twb2ludHMpICE9ICcnICYmXG4gICAgICAgICAgICAgIG1vcmVPcHRpb25zPy5DSEVDS1BPSU5UU1xuICAgICAgICAgICAgICA/ICdjaGVja3BvaW50J1xuICAgICAgICAgICAgICA6ICcnXG4gICAgICAgIDogJycsXG5cbiAgICAgIGxpbmtlZF9HUkNfaWRzOiBtb3JlT3B0aW9ucz8uR1JDX09CSkVDVFNcbiAgICAgICAgPyBlbnRydXN0Rm9ybS5zZWxlY3RlZEdSQ09iamVjdHMubWFwKChncmM6IGFueSkgPT4gZ3JjLmdyY2lkKVxuICAgICAgICA6IFtdLFxuICAgICAgZnJlcXVlbmN5OiB0aGlzLmZyZXF1ZW5jeU9iamVjdCxcbiAgICAgIHNlbGVjdGVkQ2F0ZWdvcnk6IHRoaXMuc2VsZWN0ZWRQcm9ncmFtc1xuICAgIH07XG5cblxuXG4gICAgaWYgKHRoaXMuaXNSZXNwb25zaWJpbGl0eVJjTGlua0VuYWJsZWQpIHtcbiAgICAgIHBheWxvYWRbJ3Jlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSddID1cbiAgICAgICAgdGhpcy5pc1Jlc3BvbnNpYmlsaXR5UmNMaW5rRW5hYmxlZCAmJiBtb3JlT3B0aW9ucz8uUkNcbiAgICAgICAgICA/IHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlXG4gICAgICAgICAgOiAwO1xuICAgICAgcGF5bG9hZFsncmVzcG9uc2liaWxpdHlDZW50ZXJBcnInXSA9XG4gICAgICAgIHRoaXMuaXNSZXNwb25zaWJpbGl0eVJjTGlua0VuYWJsZWQgJiYgbW9yZU9wdGlvbnM/LlJDXG4gICAgICAgICAgPyByY0RldGFpbHNJZEFyclxuICAgICAgICAgIDogW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHlQYXlsb2FkID0gdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYnVpbGRSZXNwb25zaWJpbGl0eVBheWxvYWQocGF5bG9hZCk7XG5cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5UGF5bG9hZCA9IHBheWxvYWQ7XG4gICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJyAgfHwgdGhpcy5pc0R1cGxpY2F0ZSkge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2Uuc3VibWl0RW50cnVzdChyZXNwb25zaWJpbGl0eVBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XG4gICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XG4gICAgICAgICAgdGhpcy5lbnRydXN0TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eURhdGEgPSByZXM7XG5cbiAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgJiYgcmVzLm1lc3NhZ2UudG9Mb3dlckNhc2UoKSA9PT0gJ2J1bGsgZW50cnVzdCcpIHtcbiAgICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBZb3UgaGF2ZSBlbnRydXN0ZWQgJHtyZXMuY2FsY3VsYXRlX25vX29mX3Jlc3BvbnNpYmlpdGllc30gcmVzcG9uc2liaWxpdGllcy4gVGhlc2Ugd291bGQgYmUgcmVmbGVjdGVkIHdpdGhpbiB5b3VyIGFjY291bnQgaW4gc29tZXRpbWUuYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nICYmIHBheWxvYWQuY3JlYXRlZF9ieSA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPVxuICAgICAgICAgICAgICAnVGhpcyByZXNwb25zaWJpbGl0eSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlLic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmNyZWF0ZWRfYnkgPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9uc1sxXS5idXR0b25UZXh0ID0gJ1ZpZXcgUmVzcG9uc2liaWxpdGllcyc7XG4gICAgICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9IGBZb3UganVzdCBjcmVhdGVkIGEgcmVzcG9uc2liaWxpdHkgb24gYmVoYWxmICR7ZW50cnVzdEZvcm0uYXNzaWdub3JzLmxpc3QuZmluZChcbiAgICAgICAgICAgICAgICAobWVtYmVyOiBhbnkpID0+IG1lbWJlci5tZW1iZXJfaWQgPT09IHBheWxvYWQubWVtYmVyX2lkXG4gICAgICAgICAgICAgICkubWVtYmVyX25hbWVcbiAgICAgICAgICAgICAgICB9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvL3RoaXMucmVzZXQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZW50cnVzdExvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYocmVzcG9uc2liaWxpdHlQYXlsb2FkKSB7XG4gICAgICAgIHJlc3BvbnNpYmlsaXR5UGF5bG9hZFsnaWQnXSA9IHRoaXMucmVzcG9uc2liaWxpdHlJZFxuICAgICAgfVxuICAgICAgdGhpcy5zbWlsZXlNZXNzYWdlID0gYFRoZSByZXNwb25zaWJpbGl0eSBoYXMgYmVlbiBtb2RpZmllZC5gO1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2VcbiAgICAgICAgLnVwZGF0ZUVudHJ1c3QocmVzcG9uc2liaWxpdHlQYXlsb2FkLCB0aGlzLnJlc3BvbnNpYmlsaXR5SWQsIHRydWUpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVudHJ1c3RMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRHVwbGljYXRlRW50cnVzdCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAvLyB0aGlzLnJlc2V0Rm9ybSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxuICAgICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB1bmlxdWVJZFVzZXJHcm91cHMoXG4gICAgdG90YWxVc2VyTGlzdDogYW55LFxuICAgIHNlbGVjdGVkR3JvdXA6IGFueSxcbiAgICBzZWxlY3RlZFVzZXJzOiBhbnlcbiAgKSB7XG4gICAgbGV0IGdyb3VwVXNlckxpc3QgPSB0aGlzLmdldEdyb3Vwc1VzZXJFbXBsb3llZXNJZChcbiAgICAgIHRvdGFsVXNlckxpc3QsXG4gICAgICBzZWxlY3RlZEdyb3VwXG4gICAgKTtcbiAgICBsZXQgaWRzID0gbmV3IFNldChzZWxlY3RlZFVzZXJzLm1hcCgodXNlcjogYW55KSA9PiB1c2VyPy5teV9tZW1iZXJfaWQpKTtcbiAgICBsZXQgdXNlckxpc3QgPSBbXG4gICAgICAuLi5zZWxlY3RlZFVzZXJzLFxuICAgICAgLi4uZ3JvdXBVc2VyTGlzdC5maWx0ZXIoXG4gICAgICAgIChncm91cFVzZXI6IGFueSkgPT4gIWlkcy5oYXMoZ3JvdXBVc2VyPy5teV9tZW1iZXJfaWQpXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHVzZXJMaXN0O1xuICB9XG5cbiAgY29tYmluZVVzZXJBbmRVc2VyR3JvdXBNZW1iZXJzKGlzR3JvdXA/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mZWF0dXJlRmxhZ19ncm91cHMpIHtcbiAgICAgIHRoaXMuYXNzaWduZWVVc2VyTGlzdCA9IGlzR3JvdXBcbiAgICAgICAgPyBbeyBlbXBsb3llZV9pZDogdGhpcy5yYXdSZXNwb25zaWJpbGl0eT8uYXNzaWduZWVfbWVtYmVyX2lkIH1dXG4gICAgICAgIDogdGhpcy51bmlxdWVJZFVzZXJHcm91cHMoXG4gICAgICAgICAgdGhpcy5hbGxVc2Vyc0xpc3QsXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0LFxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3RcbiAgICAgICAgKTtcbiAgICAgIHRoaXMucmV2aWV3ZXJVc2VyTGlzdCA9IHRoaXMudW5pcXVlSWRVc2VyR3JvdXBzKFxuICAgICAgICB0aGlzLmFsbFVzZXJzTGlzdCxcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0LFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0XG4gICAgICApO1xuICAgICAgdGhpcy5vdmVyc2VlclVzZXJMaXN0ID0gdGhpcy51bmlxdWVJZFVzZXJHcm91cHMoXG4gICAgICAgIHRoaXMuYWxsVXNlcnNMaXN0LFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0LFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0XG4gICAgICApO1xuICAgICAgdGhpcy5vdmVyc2VlclVzZXJOb3RpZnlMaXN0ID0gdGhpcy51bmlxdWVJZFVzZXJHcm91cHMoXG4gICAgICAgIHRoaXMuYWxsVXNlcnNMaXN0LFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0LFxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2lnbmVlVXNlckxpc3QgPSB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0O1xuICAgICAgdGhpcy5yZXZpZXdlclVzZXJMaXN0ID0gdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdDtcbiAgICAgIHRoaXMub3ZlcnNlZXJVc2VyTGlzdCA9IHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q7XG4gICAgICB0aGlzLm92ZXJzZWVyVXNlck5vdGlmeUxpc3QgPVxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCByZXNldHMgdGhlIGZvcm0uXG4gICAqL1xuICByZXNldCgpIHtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tID0gZmFsc2U7XG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNTbWlsZXlPbiA9IGZhbHNlO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtID0ge1xuICAgICAgYXNzaWdub3JzOiB7XG4gICAgICAgIGVuYWJsZTogZmFsc2UsXG4gICAgICAgIGxpc3Q6IFtdLFxuICAgICAgfSxcbiAgICAgIHJlc3BvbnNpYmlsaXR5OiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYXNzaWduZWVHcm91cHM6IHtcbiAgICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxuICAgICAgICBsaXN0OiBbXSxcbiAgICAgIH0sXG4gICAgICBhc3NpZ25lZXM6IHtcbiAgICAgICAgd2hvQ2FuQ29tcGxldGU6ICdBTEwnLFxuICAgICAgICBsaXN0OiBbXSxcbiAgICAgIH0sXG4gICAgICBhbGxvd0VkaXREdWVEYXRlOiBmYWxzZSxcbiAgICAgIGZyZXF1ZW5jeTogJycsXG4gICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICBvYmplY3RpdmU6ICcnLFxuICAgICAgcmM6IFtdLFxuICAgICAgY2F0ZWdvcnk6IFtdLFxuICAgICAgY2hlY2twb2ludEluc3RydWN0aW9uOiAnJyxcbiAgICAgIGN1c3RvbVRhZ3M6IFtdLFxuICAgICAgY2hlY2twb2ludHM6IFtdLFxuICAgICAgcmV2aWV3ZXJzOiB7XG4gICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcbiAgICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDIsXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IFtdLFxuICAgICAgfSxcbiAgICAgIGdyb3VwUmV2aWV3ZXJzOiB7XG4gICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzogdHJ1ZSxcbiAgICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiAyLFxuICAgICAgICAgIHJldmlld05PdENvbXBsZXRlZERheXM6IDIsXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IFtdLFxuICAgICAgfSxcbiAgICAgIG92ZXJzZWVyczoge1xuICAgICAgICBub3RpZnlMaXN0OiBbXSxcbiAgICAgICAgbGlzdDogW10sXG4gICAgICB9LFxuICAgICAgb3ZlcnNlZXJzR3JvdXBzOiB7XG4gICAgICAgIG5vdGlmeUxpc3Q6IFtdLFxuICAgICAgICBsaXN0OiBbXSxcbiAgICAgIH0sXG4gICAgICBmb3JtYXRBbmRFdmlkZW5jZToge1xuICAgICAgICBmb3JtYXRSZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICAgICAgZm9ybWF0TGlua3M6IFtdLFxuICAgICAgICBldmlkZW5jZVJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICBhc3N1cmFuY2VMaXN0OiBbXSxcbiAgICAgIHJlcXVpcmVzQXVkaXRMaXN0OiBbXSxcbiAgICAgIHJpc2tDbGFzczogJ2xvdycsXG4gICAgICByaXNrTWF0cml4OiAnMCwwLDAsMCwwLDAnLFxuICAgICAgcHJvZ3JhbTogW10sXG4gICAgICBwcm9ncmFtX3NlbGVjdGVkX2lkczogW10sXG4gICAgfTtcbiAgICB0aGlzLm1vcmVPcHRpb25zID0ge1xuICAgICAgT0JKRUNUSVZFOiBmYWxzZSxcbiAgICAgIFJDOiBmYWxzZSxcbiAgICAgIENBVEVHT1JZOiBmYWxzZSxcbiAgICAgIEZPUk1BVEVfRVZJREVOQ0U6IGZhbHNlLFxuICAgICAgQ0hFQ0tQT0lOVFM6IGZhbHNlLFxuICAgICAgUklTS19DTEFTU0lGSUNBVElPTjogZmFsc2UsXG4gICAgICBSRVZJRVdFUjogZmFsc2UsXG4gICAgICBPVkVSU0VFUjogZmFsc2UsXG4gICAgICBBU1NVUkFOQ0U6IGZhbHNlLFxuICAgICAgQVBQUzogZmFsc2UsXG4gICAgfTtcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0hvdyBvZnRlbiBkb2VzIHRoZSByZXNwb25zaWJpbGl0eSBvY2N1cj8nO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICAgIHBhdHRlcm46ICcnLFxuICAgICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICB3aW5kb3c6IDAsXG4gICAgICBmYWlsZWQ6IDAsXG4gICAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzOiB7fSxcbiAgICB9O1xuICAgIHRoaXMuc2FtcGxlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zYW1wbGVQZXJjZW50YWdlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSAtMTtcbiAgICB0aGlzLnNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlID0gMjtcbiAgICB0aGlzLmF1ZGl0VGltZSA9IERFRkFVTFRfVElNRTtcbiAgICB0aGlzLm1vZGUgPSAnQ1JFQVRFJztcbiAgICB0aGlzLmlzRW50cnVzdCA9IHRydWU7XG4gICAgdGhpcy5hc3Nlc3NtZW50RGV0YWlscyA9IG51bGw7XG4gICAgdGhpcy5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eSA9IG51bGw7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eURldGFpbHMgPSB7XG4gICAgfTtcbiAgICB0aGlzLnJlc2V0Rm9ybS5lbWl0KHRydWUpO1xuICB9XG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMub3BlbmVkRnJvbSA9PT0gJ1JJU0tfVFJFQVRNRU5UJykge1xuICAgICAgdGhpcy5jbG9zZVNtaWxleSgnZHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnYWRkTW9yZSc6XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd2aWV3JzpcbiAgICAgICAgdGhpcy52aWV3UmVzcG9uc2liaWxpdGllcygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XG4gICAgbGV0IHVybDogc3RyaW5nO1xuICAgIGNvbnN0IGlkID0gdGhpcy5yZXNwb25zaWJpbGl0eURhdGE/LmRhdGE/LnJlc3BvbnNpYmlsaXR5Py5pZDtcbiAgICBsZXQgdXJsU3Vic3RyaW5nID0gJy9jb21wbGlhbmNlL3Jlc3BvbnNpYmlsaXRpZXMvJztcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5zdGFydHNXaXRoKCdsb2NhbGhvc3QnKSkge1xuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB1cmxTdWJzdHJpbmc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9ICdodHRwczovLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdCArIHVybFN1YnN0cmluZztcbiAgICB9XG4gICAgdGhpcy5pZnJhbWVTZXJ2aWNlLnJlZGlyZWN0SWZJbklmcmFtZSh1cmwsIHRoaXMubW9kZSAhPT0gJ0VESVQnKTtcblxuICAgIHRoaXMuY2xvc2VTbWlsZXkoJ2RzJyk7XG4gICAgdGhpcy5yZXNldCgpO1xuICB9XG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcbiAgICB0aGlzLnVpS2l0U2VydmljZS5pc1NtaWxleU9uID0gZmFsc2U7XG4gICAgLy8gdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQodGhpcy5yZXNwb25zaWJpbGl0eURhdGEpO1xuICAgIHRoaXMuY2xvc2VXb3JrZmxvdy5lbWl0KHsgZXZ0OiB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSwgY29uZmlybTogZmFsc2UgfSk7XG4gIH1cblxuICBnZXRPbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBmcmVxdWVuY3lEYXRhID0gZXZlbnQ/LnBhdHRlcm4/LnNwbGl0KCd+Jyk7XG4gICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURhdGFbMF0pID09IDYpIHtcbiAgICAgIHJldHVybiBldmVudD8ub25Db21wbGV0aW9uUmVwb3J0RGV0YWlscztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBmb3IgZWRpdCByZXNwb25zaWJpbGl0eVxuICBmcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBzZWxlY3RlZERheSwgc2VsZWN0ZWRNb250aCB9ID0gdGhpcy5nZXRTZWxlY3RlZEF0dHJpYnV0ZXMoZXZlbnQpO1xuICAgIGxldCBkYXRhOiBhbnkgPSB7XG4gICAgICBwYXR0ZXJuOiBldmVudD8ucGF0dGVybixcbiAgICAgIHdpbmRvdzogZXZlbnQ/LnN0YXJ0QmVmb3JlLFxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5lbmRBZnRlcixcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogZXZlbnQ/LmZhaWxlZF90aW1lX3V0YyxcbiAgICAgIGxpZmVjeWNsZURldGFpbHM6IGV2ZW50Py5saWZlY3ljbGVfZGV0YWlscyxcbiAgICAgIHN0YXJ0RnJvbTogTnVtYmVyKGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjKSxcbiAgICAgIHRpbWVJbjI0SHI6IGV2ZW50Py50aW1lLFxuICAgICAgY29udGludW91c19mYWlsZWRfZGF5czogZXZlbnQ/LmF1dG9EZWFjdGl2YXRlLFxuICAgICAgc3RhcnREYXRlOiBOdW1iZXIoZXZlbnQ/LnN0YXJ0X29mX2RheV91dGMpLFxuICAgICAgdGltZUluMTJocjogdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKFxuICAgICAgICBldmVudD8udGltZVxuICAgICAgKSxcblxuICAgICAgY2FzZTogZXZlbnQ/LnR5cGUsXG4gICAgICBkYXk6IGV2ZW50Py5kYXksXG4gICAgICBldmVyeTogZXZlbnQ/LnJlcGVhdE9wdGlvbnM/LmV2ZXJ5LFxuICAgICAgc2VsZWN0ZWREYXk6IHNlbGVjdGVkRGF5LFxuICAgICAgc2VsZWN0ZWRNb250aDogc2VsZWN0ZWRNb250aCxcbiAgICAgIHNlbGVjdGVkVHlwZTogZXZlbnQ/Lm9uR29pbmc/LnNlbGVjdGVkVHlwZSxcbiAgICAgIHJhbmRvbUluc3RhbmNlczogZXZlbnQ/LnJhbmRvbT8ucmFuZG9tSW5zdGFuY2VzLFxuICAgICAgc2VsZWN0ZWRPbmdvaW5nVHlwZTogZXZlbnQ/Lm9uR29pbmc/LnNlbGVjdGVkT25nb2luZ1R5cGUsXG4gICAgICBvbkNvbXBsZXRpb246IGV2ZW50Py5vbkNvbXBsZXRlLFxuXG4gICAgfTtcblxuXG4gICAgaWYoZXZlbnQ/Lm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5KSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGV0YWlscy5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eSA9IGV2ZW50Py5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eTtcbiAgICB9XG4gICAgdGhpcy5mcmVxdWVuY3lEYXRhKGRhdGEpO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRBdHRyaWJ1dGVzKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgc2VsZWN0ZWREYXk6IG51bWJlcltdID0gW107XG4gICAgbGV0IHNlbGVjdGVkTW9udGg6IG51bWJlcltdID0gW107XG4gICAgY29uc3QgcmVwZWF0T24gPSBldmVudD8ucmVwZWF0T3B0aW9ucz8ucmVwZWF0T24uc3BsaXQoJycpO1xuICAgIGlmKHJlcGVhdE9uLmxlbmd0aCA9PT0gNykge1xuICAgICAgcmVwZWF0T24uZm9yRWFjaCgoZWxlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYoTnVtYmVyKGVsZSkgPT09IDEpIHtcbiAgICAgICAgICBzZWxlY3RlZERheS5wdXNoKGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgc2VsZWN0ZWREYXksIHNlbGVjdGVkTW9udGg6IFtdIH07XG4gICAgfSBlbHNlICB7XG4gICAgICByZXBlYXRPbi5mb3JFYWNoKChlbGU6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZihlbGUgPT09ICcxJykge1xuICAgICAgICAgIHNlbGVjdGVkTW9udGgucHVzaChpbmRleCArIDEpOztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBzZWxlY3RlZERheSwgc2VsZWN0ZWRNb250aCB9O1xuICAgIH1cbiAgXG4gIH1cblxuICBmcmVxdWVuY3lQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZmFpbGVkVGltZSA9IGV2ZW50Py5mcmVxdWVuY3lfdGltZTtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMud2luZG93ID0gZXZlbnQ/LnJlbWluZGVyX2JlZm9yZV9kYXlzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9IGV2ZW50Py5saWZlY3ljbGVfZGV0YWlscztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc3RhcnREYXRlID0gZXZlbnQ/LnN0YXJ0X29mX2RheV91dGM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID0gZXZlbnQ/Lm9uX2NvbXBsZXRpb25fb2ZbMF0gPz8gMDtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuZGF0ZU9mTW9kaWZpZWQgPSBldmVudD8uZG9tX3V0YztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9XG4gICAgICBldmVudD8uY29udGludW91c19mYWlsZWRfZGF5cztcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyO1xuXG4gICAgLy8gbGV0IG9uQ29tcGxldGlvblJlcG9ydERldGFpbHMgPSB0aGlzLmdldE9uQ29tcGxldGlvblJlcG9ydERldGFpbHMoZXZlbnQpO1xuICAgIC8vIGlmIChvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzICE9IG51bGwpIHtcbiAgICAvLyAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5vbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzID1cbiAgICAvLyAgICAgb25Db21wbGV0aW9uUmVwb3J0RGV0YWlscztcbiAgICAvLyB9XG4gIH1cblxuICBzZXRQYXlsb2FkKGV2ZW50OiBhbnkpOiBSZXNwb25zaWJpbGl0eSB8ICBudWxsIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZnJlcXVlbmN5RGF0YShldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMuaW52YWxpZFR5cGUgPT09ICd3aGVuJykge1xuICAgICAgdGhpcy5pbnZhbGlkVHlwZSA9ICcnO1xuICAgIH1cbiAgICB0aGlzLmZyZXF1ZW5jeU9iamVjdCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zZXRGcmVxdWVuY3lPYmplY3QoZXZlbnQpO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZyZXF1ZW5jeSA9IGV2ZW50LnBhdHRlcm47XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmVtaW5kZXJfYmVmb3JlX2RheXMgPVxuICAgICAgZXZlbnQuY2FzZSA9PT0gJ2RhaWx5JyA/IDAgOiBldmVudC53aW5kb3c7XG5cbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mYWlsZWRfYWZ0ZXJfZGF5cyA9IGV2ZW50LmZhaWxlZEFmdGVyO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZhaWxlZF90aW1lX3V0YyA9IGV2ZW50LmZhaWxlZF90aW1lX3V0YztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5saWZlY3ljbGVEZXRhaWxzID0gZXZlbnQubGlmZWN5Y2xlRGV0YWlscztcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yZXBvcnRJZCA9IGV2ZW50LnJlcG9ydElkID8/IDA7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uc3RhcnREYXRlID0gZXZlbnQuc3RhcnRGcm9tO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnRpbWVJbjI0SHIgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNvbnRpbnVvdXNfZmFpbGVkX2RheXMgPVxuICAgICAgZXZlbnQuY29udGludW91c19mYWlsZWRfZGF5cztcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIGZhbHNlKTtcbiAgICBsZXQgcGF5bG9hZDogYW55ID0ge1xuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGV2ZW50LnBhdHRlcm4sXG4gICAgICBmcmVxdWVuY3lfdGltZTogZXZlbnQudGltZUluMTJocixcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZXZlbnQuZmFpbGVkQWZ0ZXIsXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZXZlbnQubGlmZWN5Y2xlRGV0YWlscyxcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IFtldmVudC5yZXBvcnRJZF0sXG4gICAgICBkb21fdXRjOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQucGxhY2Vob2xkZXIsXG4gICAgfTtcblxuICAgIGV2ZW50LmZyZXF1ZW5jeV9kZXRhaWxzID0gZXZlbnQucGF0dGVybjtcbiAgICB0aGlzLmZyZXF1ZW5jeU9iamVjdCA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5zZXRGcmVxdWVuY3lPYmplY3QoZXZlbnQpO1xuICAgIHRoaXMuZnJlcXVlbmN5UG9wdWxhdGlvbihwYXlsb2FkKTtcbiAgfVxuXG4gIGNoZWNrQmxhbmsoZGF0YTogc3RyaW5nKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGxldCB0ZXh0ID0gZGF0YTtcbiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xcJm5ic3A7L2csICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHthbnl9IHJlcyAtIGFueSA9IHtcbiAgICovXG4gIGdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGZyZXF1ZW5jeTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZnJlcXVlbmN5VGltZSA9ICAgdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLnRpbWVJbjEyKGZyZXF1ZW5jeT8udGltZSk7XG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jeURldGFpbHMgPSBmcmVxdWVuY3kucGF0dGVybi5zcGxpdCgnficpO1xuICAgICAgICBzd2l0Y2ggKGZyZXF1ZW5jeT8udHlwZSkge1xuICAgICAgICAgIGNhc2UgJ2RhaWx5JzpcbiAgICAgICAgICAgIHRoaXMuZ2V0RGFpbHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3dlZWtseSc6XG4gICAgICAgICAgICB0aGlzLmdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbW9udGhseSc6XG4gICAgICAgICAgICB0aGlzLmdldE1vbnRobHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXJseSc6XG4gICAgICAgICAgICB0aGlzLmdldFF1YXJ0ZXJseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHMsIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYmlhbm51YWxseSc6XG4gICAgICAgICAgICB0aGlzLmdldEJpYW5udWFsUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd5ZWFybHknOlxuICAgICAgICAgICAgdGhpcy5nZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzLCBmcmVxdWVuY3lUaW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ29uZV90aW1lJzpcbiAgICAgICAgICAgICAgdGhpcy5nZXRPbmVUaW1lUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlscywgZnJlcXVlbmN5VGltZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdyYW5kb20nOlxuICAgICAgICAgICAgdGhpcy5nZXRSYW5kb21QbGFjZWhvbGRlcihmcmVxdWVuY3ksIGZyZXF1ZW5jeVRpbWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb25fY29tcGxldGUnOlxuICAgICAgICAgICAgdGhpcy5nZXRPbkNvbXBsZXRlUGxhY2Vob2xkZXIoZnJlcXVlbmN5LCBmcmVxdWVuY3lUaW1lKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgICAgICdZb3UgaGF2ZSBzZWxlY3RlZCBhbiBvbmdvaW5nIGZyZXF1ZW5jeS4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb25fY29tcGxldGlvbl9vZic6XG4gICAgICAgICAgICAvLyB0aGlzLmdldE9uQ29tcGxldGlvbk9mKFxuICAgICAgICAgICAgLy8gICBmcmVxdWVuY3ksXG4gICAgICAgICAgICAvLyAgIHJlcz8ub25fY29tcGxldGlvbl9vZlswXSxcbiAgICAgICAgICAgIC8vICAgcmVzLm9uQ29tcGxldGlvblJlcG9ydERldGFpbHNcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgIH1cbiAgICAgIFxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEl0IGdldHMgdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCByZXBvcnQgaWQsIHRoZW4gaXQgc2V0cyB0aGUgZnJlcXVlbmN5IHBsYWNlaG9sZGVyIHRvIHRoZSBmcmVxdWVuY3lcbiAgICogZGV0YWlscyBhbmQgdGhlbiBpdCBnZXRzIHRoZSBvbiBjb21wbGV0aW9uIG9mIHJlc3BvbnNpYmlsaXR5IGFuZCBzZXRzIHRoZSBmcmVxdWVuY3kgcGxhY2Vob2xkZXIgdG9cbiAgICogdGhlIGZyZXF1ZW5jeSBkZXRhaWxzIGFuZCB0aGUgcmVwb3J0IG5hbWUuXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gWzBdID0mZ3Q7IFwiMVwiXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZXBvcnRJZCAtIG51bWJlclxuICAgKi9cbiAgZ2V0T25Db21wbGV0aW9uT2YoXG4gICAgZnJlcXVlbmN5RGV0YWlsczogYW55LFxuICAgIHJlcG9ydElkOiBudW1iZXIsXG4gICAgb25Db21wbGV0aW9uUmVwb3J0RGV0YWlsczogYW55XG4gICkge1xuICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgZnJlcXVlbmN5RGV0YWlsc1szXSArXG4gICAgICAnICcgK1xuICAgICAgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArXG4gICAgICAnIGFmdGVyIGNvbXBsZXRpb24gb2YgJztcbiAgICBpZiAob25Db21wbGV0aW9uUmVwb3J0RGV0YWlscykge1xuICAgICAgaWYgKHJlcG9ydElkID09PSBvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzLlJlcG9ydElkKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIGZyZXF1ZW5jeURldGFpbHNbM10gK1xuICAgICAgICAgICcgJyArXG4gICAgICAgICAgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMSA/ICdkYXlzJyA6ICdkYXknKSArXG4gICAgICAgICAgJyBhZnRlciBjb21wbGV0aW9uIG9mICcgK1xuICAgICAgICAgIChvbkNvbXBsZXRpb25SZXBvcnREZXRhaWxzXG4gICAgICAgICAgICA/IG9uQ29tcGxldGlvblJlcG9ydERldGFpbHMucmVwb3J0X25hbWVcbiAgICAgICAgICAgIDogJycpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogXCJJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1szXSBpcyAxLCB0aGVuIHNldCB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgdG8gJ0RhaWx5IGJ5ICcgKyBmcmVxdWVuY3lUaW1lLFxuICAgKiBvdGhlcndpc2UgaWYgZnJlcXVlbmN5RGV0YWlsc1szXSBpcyBncmVhdGVyIHRoYW4gMSwgdGhlbiBzZXQgdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIHRvICdFdmVyeSAnICtcbiAgICogcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgKyAnIGRheXMgYnkgJyArIGZyZXF1ZW5jeVRpbWUuXCJcbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbMCwgMCwgMCwgMV1cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEyOjAwIEFNXCJcbiAgICovXG4gIGdldERhaWx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcbiAgICAgZnJlcXVlbmN5RGV0YWlscyA9IGZyZXF1ZW5jeURldGFpbHMubWFwKE51bWJlcilcbiAgICAgIGlmIChmcmVxdWVuY3lEZXRhaWxzPy5kYXk9PT0gMSkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ0RhaWx5IGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlICB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICdFdmVyeSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lEZXRhaWxzWzNdICsgKGZyZXF1ZW5jeURldGFpbHNbM10gPiAxID8gJyBkYXlzJyA6ICcgZGF5JykgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH1cbiAgICBcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycyBhbmQgcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgbnVtYmVycywgbGlrZSB0aGlzOlxuICAgKlxuICAgKiBnZXRXZWVrbHlQbGFjZWhvbGRlcihbXCIxXCIsXCIyLDMsNCw1LDYsN1wiLFwiMVwiLFwiMVwiXSwgXCIxMDowMCBBTVwiKVxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyBvZiBjb21tYSBzZXBhcmF0ZWQgd29yZHMsIGxpa2UgdGhpczpcbiAgICpcbiAgICogXCJFdmVyeSBNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5IGJ5IDEwOjAwIEFNXCI8L2NvZGU+XG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiMVwiLCBcIjEsMiwzLDQsNVwiLCBcIlwiLCBcIjFcIiwgXCJcIl1cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcbiAgICovXG4gIGdldFdlZWtseVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XG4gICAge1xuICAgICAgY29uc3Qgc2VsZWN0ZWREYXkgPSBmcmVxdWVuY3lEZXRhaWxzWzFdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcmVxdWVuY3lTZXJ2aWNlLmRheU5hbWVbcGFyc2VJbnQoZWxlKSAtIDFdO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMSkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnRXZlcnkgJyArIHNlbGVjdGVkRGF5LmpvaW4oKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9XG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1szXSkgPT09IDIpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJ0V2ZXJ5IGFsdGVybmF0ZSAnICsgc2VsZWN0ZWREYXkuam9pbigpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzNdKSA9PT0gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnRXZlcnkgM3JkICcgKyBzZWxlY3RlZERheS5qb2luKCkgKyAnIGJ5ICcgKyBmcmVxdWVuY3lUaW1lO1xuICAgICAgfVxuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnRXZlcnkgJyArXG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICd0aCAnICtcbiAgICAgICAgICBzZWxlY3RlZERheS5qb2luKCkgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcgb2YgY29tbWEgc2VwYXJhdGVkIG51bWJlcnMsIGNvbnZlcnRzIHRoZW0gdG8gbW9udGggbmFtZXMsIGFuZCB0aGVuIGFkZHMgdGhlbSB0byBhXG4gICAqIHNlbnRlbmNlLlxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIFtcIjFcIiwgXCIxXCIsIFwiMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTJcIl1cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeVRpbWUgLSBcIjEwOjAwIEFNXCJcbiAgICovXG4gIGdldE1vbnRobHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xuICAgIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSBmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJykubWFwKChlbGU6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGVsZSkgLSAxXTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICcxc3Qgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICcybmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICczcmQgb2YgZXZlcnkgJyArIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEgfHxcbiAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICdzdCBvZiBldmVyeSAnICtcbiAgICAgICAgICBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAnbmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3JkIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICd0aCBvZiBldmVyeSAnICtcbiAgICAgICAgICBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgMSwgMiwgMywgMjEsIDIyLCAyMywgb3IgZ3JlYXRlciB0aGFuIDMsIHRoZW4gc2V0IHRoZVxuICAgKiBmcmVxdWVuY3lQbGFjZWhvbGRlciB0byBhIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZSBmcmVxdWVuY3lEZXRhaWxzWzFdIGFuZCB0aGUgZnJlcXVlbmN5RGV0YWlsc1syXVxuICAgKiBhbmQgdGhlIGZyZXF1ZW5jeVRpbWUuXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiM1wiLCBcIjFcIiwgXCIxLDIsM1wiXVxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5VGltZSAtIFwiMTA6MDAgQU1cIlxuICAgKi9cbiAgZ2V0UXVhcnRlcmx5UGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcbiAgICB7XG4gICAgICBjb25zdCBxdWFydGVybHkgPSBbXG4gICAgICAgICdKYW51YXJ5LCBBcHJpbCwgSnVseSwgT2N0b2JlcicsXG4gICAgICAgICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJyxcbiAgICAgICAgJyBNYXJjaCwgSnVuZSwgU2VwdGVtYmVyLCBEZWNlbWJlcicsXG4gICAgICBdO1xuICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICcxc3Qgb2YgZXZlcnkgJyArXG4gICAgICAgICAgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMikge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAnMm5kIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzNyZCBvZiBldmVyeSAnICtcbiAgICAgICAgICBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjEgfHxcbiAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMxXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICdzdCBvZiBldmVyeSAnICtcbiAgICAgICAgICBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMikge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ25kIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHF1YXJ0ZXJseVtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdLnNwbGl0KCcsJylbMF0pIC0gMV0gK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAncmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgcXVhcnRlcmx5W3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKVswXSkgLSAxXSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICd0aCBvZiBldmVyeSAnICtcbiAgICAgICAgICBxdWFydGVybHlbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXS5zcGxpdCgnLCcpWzBdKSAtIDFdICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBudW1iZXJzIGFuZCByZXR1cm5zIGEgc3RyaW5nIG9mIGNvbW1hIHNlcGFyYXRlZCBtb250aCBuYW1lcy5cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbXCIxXCIsIFwiMVwiLCBcIjEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyXCJdXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXG4gICAqL1xuICBnZXRCaWFubnVhbFBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XG4gICAge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRNb250aCA9IGZyZXF1ZW5jeURldGFpbHNbMl0uc3BsaXQoJywnKS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZWxlKSAtIDFdO1xuICAgICAgfSk7XG4gICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDEpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzFzdCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzJuZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDMpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgJzNyZCBvZiBldmVyeSAnICsgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICsgJyBieSAnICsgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMSB8fFxuICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzFcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3N0IG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcbiAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICduZCBvZiBldmVyeSAnICtcbiAgICAgICAgICBzZWxlY3RlZE1vbnRoLmpvaW4oJywgJykgK1xuICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XG4gICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAncmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgc2VsZWN0ZWRNb250aC5qb2luKCcsICcpICtcbiAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xuICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgJ3RoIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgIHNlbGVjdGVkTW9udGguam9pbignLCAnKSArXG4gICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZnJlcXVlbmN5RGV0YWlsc1sxXSBpcyBsZXNzIHRoYW4gMiwgdGhlbiB0aGUgZnJlcXVlbmN5UGxhY2Vob2xkZXIgaXMgc2V0IHRvIHRoZSAxc3QsIDJuZCxcbiAgICogM3JkLCBvciBudGggb2YgZXZlcnkgbW9udGggYnkgZnJlcXVlbmN5VGltZS5cbiAgICpcbiAgICogSWYgdGhlIGZyZXF1ZW5jeURldGFpbHNbMV0gaXMgZ3JlYXRlciB0aGFuIDEsIHRoZW4gdGhlIGZyZXF1ZW5jeVBsYWNlaG9sZGVyIGlzIHNldCB0byB0aGUgMXN0LCAybmQsXG4gICAqIDNyZCwgb3IgbnRoIG9mIGV2ZXJ5IG1vbnRoLCBJbnRlcnZhbDogZXZlcnkgeWVhclNlcXVlbmNlIHllYXJzIGJ5IGZyZXF1ZW5jeVRpbWUuXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lEZXRhaWxzIC0gW1wiWWVhcmx5XCIsIFwiMVwiLCBcIjFcIiwgXCIxXCJdXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gXCIxMDowMCBBTVwiXG4gICAqL1xuICBnZXRZZWFybHlQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xuICAgIHtcbiAgICAgIGNvbnN0IHllYXJTZXF1ZW5jZSA9XG4gICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pID4gMCA/IHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbM10pIDogMTtcbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA8IDIpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnMXN0IG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnMm5kIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnM3JkIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xuICAgICAgICAgIHRoaXMuZnJlcXVlbmN5UGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgK1xuICAgICAgICAgICAgJ3RoIG9mIGV2ZXJ5ICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzMSB8fFxuICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyMVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICdzdCBvZiBldmVyeSAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjIpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICduZCBvZiBldmVyeSAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjMpIHtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pICtcbiAgICAgICAgICAgICdyZCBvZiBldmVyeSAnICtcbiAgICAgICAgICAgIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzJdKSAtIDFdICtcbiAgICAgICAgICAgICcgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA+IDEpIHtcbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAxKSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICcxc3QgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnLCBJbnRlcnZhbDogZXZlcnkgJyArXG4gICAgICAgICAgICB5ZWFyU2VxdWVuY2UgK1xuICAgICAgICAgICAgJyB5ZWFycyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAyKSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICcybmQgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnLCBJbnRlcnZhbDogZXZlcnkgJyArXG4gICAgICAgICAgICB5ZWFyU2VxdWVuY2UgK1xuICAgICAgICAgICAgJyB5ZWFycyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID09PSAzKSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID1cbiAgICAgICAgICAgICczcmQgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnLCBJbnRlcnZhbDogZXZlcnkgJyArXG4gICAgICAgICAgICB5ZWFyU2VxdWVuY2UgK1xuICAgICAgICAgICAgJyB5ZWFycyBieSAnICtcbiAgICAgICAgICAgIGZyZXF1ZW5jeVRpbWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMV0pID4gMykge1xuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgICAndGggb2YgICcgK1xuICAgICAgICAgICAgdGhpcy5zaG9ydE1vbnRoW3BhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pIC0gMV0gK1xuICAgICAgICAgICAgJywgSW50ZXJ2YWw6IGV2ZXJ5ICcgK1xuICAgICAgICAgICAgeWVhclNlcXVlbmNlICtcbiAgICAgICAgICAgICcgeWVhcnMgYnkgJyArXG4gICAgICAgICAgICBmcmVxdWVuY3lUaW1lO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMzEgfHxcbiAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSA9PT0gMjFcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgICAnc3Qgb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIyKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgICAnbmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1sxXSkgPT09IDIzKSB7XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBwYXJzZUludChmcmVxdWVuY3lEZXRhaWxzWzFdKSArXG4gICAgICAgICAgICAncmQgb2YgZXZlcnkgJyArXG4gICAgICAgICAgICB0aGlzLnNob3J0TW9udGhbcGFyc2VJbnQoZnJlcXVlbmN5RGV0YWlsc1syXSkgLSAxXSArXG4gICAgICAgICAgICAnIGJ5ICcgK1xuICAgICAgICAgICAgZnJlcXVlbmN5VGltZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYSBwbGFjZWhvbGRlciBzdHJpbmcgZm9yIG9uZS10aW1lIGZyZXF1ZW5jeSBldmVudHMuXG4gICAqIFxuICAgKiBAcGFyYW0ge2FueX0gZnJlcXVlbmN5RGV0YWlscyAtIEFycmF5IGNvbnRhaW5pbmcgZnJlcXVlbmN5IGRldGFpbHMgd2hlcmU6XG4gICAqICAgLSBmcmVxdWVuY3lEZXRhaWxzWzNdOiBEYXkgb2YgdGhlIG1vbnRoXG4gICAqICAgLSBmcmVxdWVuY3lEZXRhaWxzWzJdOiBNb250aCBudW1iZXIgKDEtMTIpXG4gICAqICAgLSBmcmVxdWVuY3lEZXRhaWxzWzFdOiBZZWFyXG4gICAqIEBwYXJhbSB7YW55fSBmcmVxdWVuY3lUaW1lIC0gVGltZSBzdHJpbmcgaW4gZm9ybWF0ICdISDptbScgKGUuZy4gJzA5OjAwJylcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEZvciBKYW51YXJ5IDE1LCAyMDI0IGF0IDA5OjAwIEFNXG4gICAqIGdldE9uZVRpbWVQbGFjZWhvbGRlcihbbnVsbCwgMjAyNCwgMSwgMTVdLCAnMDk6MDAgYW0nKVxuICAgKiAvLyBSZXR1cm5zOiBcIk9uZSBUaW1lIDE1IEphbnVhcnkgMjAyNCBieSAwOTowMCBBTVwiXG4gICAqL1xuICBnZXRPbmVUaW1lUGxhY2Vob2xkZXIoZnJlcXVlbmN5RGV0YWlsczogYW55LCBmcmVxdWVuY3lUaW1lOiBhbnkpIHtcbiAgICBjb25zdCBtb250aE5hbWUgPSB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UuZ2V0TW9udGhOYW1lKHBhcnNlSW50KGZyZXF1ZW5jeURldGFpbHNbMl0pKTtcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gJ09uZSBUaW1lICcgKyBmcmVxdWVuY3lEZXRhaWxzWzNdICsgJyAnICsgbW9udGhOYW1lICsgJyAnICsgZnJlcXVlbmN5RGV0YWlsc1sxXSArICcgYnkgJyArIGZyZXF1ZW5jeVRpbWUudG9VcHBlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB0YWtlcyBhIGZyZXF1ZW5jeURldGFpbHMgYXJyYXkgYW5kIGEgZnJlcXVlbmN5VGltZSBhcnJheSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHthbnl9IGZyZXF1ZW5jeURldGFpbHMgLSBbNCwxLDEsMV1cbiAgICovXG4gIGdldFJhbmRvbVBsYWNlaG9sZGVyKGZyZXF1ZW5jeURldGFpbHM6IGFueSwgZnJlcXVlbmN5VGltZTogYW55KSB7XG4gICAgY29uc3QgcXVhcnRlcmx5ID0gW1xuICAgICAgJ0phbnVhcnksIEFwcmlsLCBKdWx5LCBPY3RvYmVyJyxcbiAgICAgICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJyxcbiAgICAgICcgTWFyY2gsIEp1bmUsIFNlcHRlbWJlciwgRGVjZW1iZXInLFxuICAgIF07XG4gICAgY29uc3QgcGF0dGVybiA9IGZyZXF1ZW5jeURldGFpbHM/LnBhdHRlcm4/LnNwbGl0KCd+Jyk7XG4gICAge1xuICAgICAgc3dpdGNoIChwYXJzZUludChwYXR0ZXJuWzFdKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnRXZlcnkgd2VlayBmb3IgJyArIHBhdHRlcm5bM10gKyAnIHJhbmRvbSBpbnN0YW5jZXMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnIEV2ZXJ5ICcgK1xuICAgICAgICAgICAgcGF0dGVyblsyXS5zcGxpdCgnLCcpLm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvcnRNb250aFtwYXJzZUludChlbGUpIC0gMV07XG4gICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgICAgIH0pICtcbiAgICAgICAgICAgICcgZm9yICcgK1xuICAgICAgICAgICAgcGF0dGVyblszXSArXG4gICAgICAgICAgICAnIHJhbmRvbSBpbnN0YW5jZXMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnRXZlcnkgJyArXG4gICAgICAgICAgICBxdWFydGVybHlbcGFyc2VJbnQocGF0dGVyblsyXS5zcGxpdCgnLCcpWzBdKSAtIDFdICtcbiAgICAgICAgICAgICcgZm9yICcgK1xuICAgICAgICAgICAgcGF0dGVyblszXSArXG4gICAgICAgICAgICAnIHJhbmRvbSBpbnN0YW5jZXMnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICAnRXZlcnkgeWVhciBmb3IgJyArIHBhdHRlcm5bM10gKyAnIHJhbmRvbSBpbnN0YW5jZXMnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE9uQ29tcGxldGVQbGFjZWhvbGRlcihmcmVxdWVuY3lEZXRhaWxzOiBhbnksIGZyZXF1ZW5jeVRpbWU6IGFueSkge1xuICAgIGNvbnN0IGRheXMgPSBmcmVxdWVuY3lEZXRhaWxzLm9uQ29tcGxldGUuZHVlQWZ0ZXIgPiAxID8gJ2RheXMnIDogJ2RheSc7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9IGZyZXF1ZW5jeURldGFpbHMub25Db21wbGV0ZS5kdWVBZnRlciArICcgJyArIGRheXMgKyAnIGFmdGVyIGNvbXBsZXRpb24gb2YgJyArIHRoaXMucmVzcG9uc2liaWxpdHlEZXRhaWxzPy5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eT8udGl0bGU7XG4gIH1cblxuICAvKipcbiAgICogXCJXaGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgZWRpdCBidXR0b24sIHRoZSBlZGl0IGJ1dHRvbiBpcyBoaWRkZW4gYW5kIHRoZSBpbnB1dCBmaWVsZCBpcyBzaG93bi5cbiAgICogV2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGlucHV0IGZpZWxkLCB0aGUgaW5wdXQgZmllbGQgaXMgaGlkZGVuIGFuZCB0aGUgZWRpdCBidXR0b24gaXMgc2hvd24uXCJcbiAgICogQHBhcmFtIHthbnl9IGV2ZW50IC0gYW55IC0gdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBmdW5jdGlvblxuICAgKi9cbiAgb25FZGl0V2hhdChldmVudDogYW55KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyB0aGlzIHdpbGwgbWFrZSB0aGUgZXhlY3V0aW9uIGFmdGVyIHRoZSBhYm92ZSBib29sZWFuIGhhcyBjaGFuZ2VkXG4gICAgICB0aGlzLmlzRWRpdFdoYXQgPSBmYWxzZTtcbiAgICAgIHRoaXMud2hhdElucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHBhcmFtZXRlciBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAcGFyYW0ge2FueX0gW3Jlc10gLSBpcyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgQVBJXG4gICAqL1xuICBnZXRFZGl0TW9yZU9wdGlvbnMocmVzPzogYW55KSB7XG4gICAgbGV0IGNoZWNrZWRNb3JlT3B0aW9ucyA9IFtdO1xuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5vYmplY3RpdmUgIT09ICcnKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnT0JKRUNUSVZFJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLk9CSkVDVElWRSA9IHRydWU7XG4gICAgfVxuICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSSVNLX0NMQVNTSUZJQ0FUSU9OJyk7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5SSVNLX0NMQVNTSUZJQ0FUSU9OID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPiAwKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUFJPR1JBTScpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5QUk9HUkFNID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZXZpZGVuY2VSZXF1aXJlZCB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0UmVxdWlyZWRcbiAgICApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdGT1JNQVRFX0VWSURFTkNFJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkZPUk1BVEVfRVZJREVOQ0UgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdSQycpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5SQyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQ0hFQ0tQT0lOVFMnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuQ0hFQ0tQT0lOVFMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zZWxlY3RlZEdSQ09iamVjdHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdHUkNfT0JKRUNUUycpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5HUkNfT0JKRUNUUyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUkVWSUVXRVInKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVWSUVXRVIgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5PVkVSU0VFUiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnQVNTVVJBTkNFJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU1VSQU5DRSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlcXVpcmVzQXVkaXRMaXN0Py5sZW5ndGggPiAwKSB7XG4gICAgICBjaGVja2VkTW9yZU9wdGlvbnMucHVzaCgnUkVRVUlSRVNfQVVESVQnKTtcbiAgICAgIHRoaXMubW9yZU9wdGlvbnMuUkVRVUlSRVNfQVVESVQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZXMucXVlc3Rpb25uYWlyZV90eXBlID09PSAnYXNzZXNzbWVudCcpIHtcbiAgICAgIGNoZWNrZWRNb3JlT3B0aW9ucy5wdXNoKCdBU1NFU1NNRU5UJyk7XG4gICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZXMucXVlc3Rpb25uYWlyZV90eXBlID09PSAnYXNzZXNzbWVudF9jaGVja3BvaW50Jykge1xuICAgICAgY2hlY2tlZE1vcmVPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTX05FVycpO1xuICAgICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UU19ORVcgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMucG9wdWxhdGVPcHRpb24uZW1pdChjaGVja2VkTW9yZU9wdGlvbnMpO1xuICB9XG5cbiAgLy8gRm9ybWF0ICYgRXZpZGVuY2VcbiAgdGVzdEZ1bmN0aW9uKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWUudHJpbSgpICE9PSAnJyAmJlxuICAgICAgdGhpcy5pc0VkaXRXaGF0ID09PSBmYWxzZVxuICAgICkge1xuICAgICAgdGhpcy5pc0VkaXRXaGF0ID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uID09ICc8YnI+Jykge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZGVzY3JpcHRpb24gPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9PSAnPGJyPicpIHtcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm9iamVjdGl2ZSA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHJldmlld2VyVHlwZUNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvdyA9XG4gICAgICBldmVudCA9PT0gJ1NFUVVFTlRJQUwnID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgc2VsZWN0ZWRTYW1wbGVEYXRhKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gZXZlbnQ7XG4gICAgdGhpcy50ZW1wQ2hlY2tWYWx1ZSA9IGV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHBvcHVsYXRlcyBhIGxpc3Qgb2YgYXNzdXJhbmNlIGNhdGVnb3JpZXMgYmFzZWQgb24gdGhlIHRlc3QgcGxhbiBjYXRlZ29yeSBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IHRlc3RQbGFuQ2F0ZWdvcnkgLSBhbnlcbiAgICovXG4gIHBvcHVsYXRlQXNzdXJhbmNlTGlzdCh0ZXN0UGxhbkNhdGVnb3J5OiBhbnkpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2UgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmFzc3VyYW5jZUNhdGVnb3JpZXNMaXN0LFxuICAgICAgW3Rlc3RQbGFuQ2F0ZWdvcnk/LmNhdGVnb3J5X2lkXSxcbiAgICAgICdjYXRlZ29yeV9pZCdcbiAgICApO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmF1ZGl0X2NhdGVnb3J5X2RldGFpbHMgPSB0ZXN0UGxhbkNhdGVnb3J5O1xuICAgIGlmICh0ZXN0UGxhbkNhdGVnb3J5LnNhbXBsZSkge1xuICAgICAgdGhpcy5pc1NhbXBsZSA9IHRydWU7XG4gICAgICB0aGlzLnNhbXBsZVZhbHVlID0gdGVzdFBsYW5DYXRlZ29yeS5zYW1wbGU7XG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGVzdFBsYW5DYXRlZ29yeS5wZXJjZW50YWdlKSB7XG4gICAgICB0aGlzLmlzU2FtcGxlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2FtcGxlUGVyY2VudGFnZSA9IHRlc3RQbGFuQ2F0ZWdvcnkucGVyY2VudGFnZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSAxO1xuICAgIH1cbiAgICB0aGlzLnRlbXBDaGVja1ZhbHVlID0gdGhpcy5zZWxlY3RlZFNhbXBsZTtcbiAgICB0aGlzLnNlbmRBdWRpdFJlbWluZGVyc1ZhbHVlID0gdGVzdFBsYW5DYXRlZ29yeS5mcmVxdWVuY3lfcGF0dGVyblxuICAgICAgPyBwYXJzZUludCh0ZXN0UGxhbkNhdGVnb3J5LmZyZXF1ZW5jeV9wYXR0ZXJuLnNwbGl0KCd+JylbMl0pXG4gICAgICA6IDI7XG4gICAgdGhpcy5hdWRpdFRpbWUgPSBtb21lbnQoXG4gICAgICB0ZXN0UGxhbkNhdGVnb3J5Py5mcmVxdWVuY3lfdGltZSxcbiAgICAgICdISDptbTpzcydcbiAgICApLmZvcm1hdCgnSEg6bW0gYScpO1xuICB9XG5cbiBcblxuICAvL29uIHNhbXBsZSB0b2dnbGUgb24vb2ZmXG4gIGNoZWNrSW5wdXRWYWx1ZShldmVudDogYW55KSB7XG4gICAgbGV0IGtleSA9IGV2ZW50LmNoYXJDb2RlOyAvLyAgICAgICAgIGtleSA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcbiAgICByZXR1cm4gKGtleSA+IDQ3ICYmIGtleSA8IDU4KSB8fCBrZXkgPT0gNDU7XG4gIH1cblxuICBzd2l0Y2hFbmFibGUoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTYW1wbGUgPSB0aGlzLnRlbXBDaGVja1ZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2FtcGxlID0gLTE7XG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogIHNlbGVjdCBBc3Nlc3NtZW50IGxpc3QgYW5kIHNldCBpZCB0byBwYXlsb2FkXG4gIG9uQXNzZXNzbWVudFNlbGVjdChldmVudDogYW55KSB7XG4gICAgdGhpcy5pc0Fzc2Vzc21lbnQgPSBmYWxzZTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50ID0gZXZlbnQ7XG4gIH1cbiAgLy8gVE9ETzogUG9wdWxhdGUgYXNzZXNzbWVudCBkYXRhIGZyb20gYWxyZWFkeSBzZWxlY3RlZCBkYXRhXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXNzZXNzbWVudERldGFpbHMgOiBzZWxlY3RlZCBhc3Nlc3NtZW50IGRldGFpbHMgbGlrZSBpdCdzIG9iamVjdCBpZCBhbmQgY2F0ZWdvcnlfaWRcbiAgICovXG4gIGdldEFzc2Vzc21lbnREZXRhaWxzKGFzc2Vzc21lbnREZXRhaWxzOiBhbnksIHR5cGU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5U2VydmljZVxuICAgICAgLmdldEFzc2Vzc21lbnREZXRhaWxzQnlJRChhc3Nlc3NtZW50RGV0YWlscy5hc3Nlc3NtZW50X2lkKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRBc3Nlc3NtZW50RGF0YShyZXMsIGFzc2Vzc21lbnREZXRhaWxzLCB0eXBlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0QXNzZXNzbWVudERhdGEocmVzOiBhbnksIGFzc2Vzc21lbnREZXRhaWxzOiBhbnksIHR5cGU/OiBzdHJpbmcpIHtcbiAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2Fzc2Vzc21lbnQnKSB7XG4gICAgICAgIGNvbnN0IGNhdGVnb3J5RGV0YWlscyA9IHJlc1swXS5jYXRlZ29yeS5maW5kKFxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLl9pZCA9PSBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkFTU0VTU01FTlQgPSB0cnVlO1xuICAgICAgICBjb25zdCBhc3Nlc3NtZW50RGF0YSA9IHtcbiAgICAgICAgICBjYXRlZ29yeV9pZDogYXNzZXNzbWVudERldGFpbHMuY2F0ZWdvcnlfaWQsXG4gICAgICAgICAgYXNzZXNzbWVudF9pZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICBhc3Nlc3NtZW50RGV0YWlsczoge1xuICAgICAgICAgICAgaWQ6IGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQsXG4gICAgICAgICAgICBhc3Nlc3NtZW50X25hbWU6IHJlc1swXS5hc3Nlc3NtZW50X25hbWUsXG4gICAgICAgICAgICBxdWVzdGlvbnM6IHJlc1swXS5xdWVzdGlvbnNDb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNhdGVnb3J5X2RldGFpbHM6IGNhdGVnb3J5RGV0YWlscyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzZXNzbWVudCA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXNzZXNzbWVudERhdGEpXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vcmVPcHRpb25zLkNIRUNLUE9JTlRTX05FVyA9IHRydWU7XG4gICAgICAgIHRoaXMucG9zdEFzc2Vzc21lbnQoeyBhc3Nlc3NtZW50RGV0YWlsczogcmVzWzBdLnF1ZXN0aW9ucyB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlbW92ZUNoZWNrcG9pbnRzKHR5cGU6IHN0cmluZykge1xuICAgIHRoaXMub25SZW1vdmluZ0NoZWNrcG9pbnQuZW1pdCh0eXBlKTtcbiAgfVxuXG4gIHJlbW92ZUNoZWNrcG9pbnQoKSB7XG4gICAgdGhpcy5tb3JlT3B0aW9ucy5DSEVDS1BPSU5UUyA9IGZhbHNlO1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzID0gW107XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IEFzc2Vzc21lbnQgZGV0YWlsc1xuICAgKi9cbiAgcG9zdEFzc2Vzc21lbnQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLm5ld19jaGVja3BvaW50cyA9IGV2ZW50LmFzc2Vzc21lbnREZXRhaWxzO1xuICAgIHRoaXMuY2hlY2twb2ludENvdW50ID0gZXZlbnQuYXNzZXNzbWVudERldGFpbHMuZWxlbWVudHM/Lmxlbmd0aDtcbiAgICB0aGlzLmNoZWNrcG9pbnRDb3VudFVwZGF0ZWQuZW1pdCh0aGlzLmNoZWNrcG9pbnRDb3VudCk7XG4gICAgdGhpcy5zZXRJc1VwbG9hZGVkKGZhbHNlKTtcbiAgfVxuXG4gIHNldElzVXBsb2FkZWQoZXZlbnQ6IGFueSkge1xuICAgIGlmICghZXZlbnQpIHRoaXMuYWN0aXZlRGVzZWxlY3RvcigpO1xuICAgIHRoaXMuYXV0aFNlcnZpY2UucHJldmlld1BhbmVsLm5leHQoZXZlbnQpO1xuICB9XG5cbiAgY2hlY2tEZWZhdWx0UHJvZ3JhbU9uUmVtb3ZlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmFsbFByb2dhbVNlbGVjdGVkID0gdGhpcy5hbGxQcm9nYW1TZWxlY3RlZC5maWx0ZXIoXG4gICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5pZCAhPT0gZXZlbnQ/LmlkXG4gICAgKTtcbiAgICB0aGlzLnJlbW92ZVByb2dyYW0oZXZlbnQpO1xuXG4gIH1cblxuICAvKipcbiAgICogSXQgdGFrZXMgYW4gYXJyYXkgb2YgbnVtYmVycyBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiB1bmlxdWUgbnVtYmVycy5cbiAgICogQHBhcmFtIHthbnl9IGFycmF5IC0gVGhlIGFycmF5IHlvdSB3YW50IHRvIGdldCB0aGUgdW5pcXVlIHZhbHVlcyBmcm9tLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bmlxdWUgdmFsdWVzLlxuICAgKi9cbiAgZ2V0VW5pcXVlSWRzKGFycmF5OiBhbnkpIHtcbiAgICBjb25zdCB1bmlxdWUgPSBbLi4ubmV3IFNldChhcnJheSldO1xuICAgIHJldHVybiB1bmlxdWU7XG4gIH1cblxuICBvcGVuQXNzaWduZWVDaGFuZ2VDb25maXJtYXRpb24oZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID0gJ0FOWV9PTkUnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnJztcbiAgICAgIHRoaXMuYXNzaWduZWVUeXBlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSBtb2RlIGlzIEVESVQsIGVtaXQgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgLSBhbnkgLSB0aGUgZXZlbnQgdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgdXNlciBzZWxlY3RzIGEgcmFkaW8gYnV0dG9uXG4gICAqL1xuICBvblJldmlld2VyV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5zZXF1ZW50aWFsV29ya2Zsb3cgPVxuICAgICAgZXZlbnQgPT09ICdzZXF1ZW50aWFsJyA/IHRydWUgOiBmYWxzZTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcgJiYgdGhpcy5oYXNSZXZpZXdlcikge1xuICAgICAgdGhpcy5vblJldmlld2VyVHlwZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBnZXRPdGhlckdSQ09iamVjdHMoZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5vdGhlckdSQ1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5vdGhlckdSQ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICBldmVudCA9IHtcbiAgICAgICAgcmNfaWRzOiAnJyxcbiAgICAgICAgdHlwZTogdGhpcy5zZWxlY3RlZEdSQ1RhYixcbiAgICAgICAgc3RhdGU6IDEsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXZlbnQ/LnNlYXJjaFN0cmluZyAmJiB0aGlzLmdyY1NlYXJjaFN0cmluZyAhPT0gZXZlbnQ/LnNlYXJjaFN0cmluZykge1xuICAgICAgdGhpcy5ncmNTZWFyY2hTdHJpbmcgPSBldmVudD8uc2VhcmNoU3RyaW5nO1xuICAgICAgdGhpcy5nZXRPdGhlckdSQ1RhYkNvdW50KHtcbiAgICAgICAgcmNfaWRzOiAnJyxcbiAgICAgICAgc2VhcmNoU3RyaW5nOiB0aGlzLmdyY1NlYXJjaFN0cmluZyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmdyY0xvYWRlciA9IHRydWU7XG4gICAgZXZlbnRbJ3JjX2lkcyddID0gdGhpcy5nZXRBbGxSQ0lkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyk7XG4gICAgZXZlbnRbJ2dyY1R5cGUnXSA9IHRoaXMuc2VsZWN0ZWRHUkNUYWI7XG4gICAgdGhpcy5vdGhlckdSQ1N1YnNjcmlwdGlvbiA9IHRoaXMuZ3JjU2VydmljZVxuICAgICAgLmdldEdSQ0xpc3QoZXZlbnQpXG4gICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5ncmNMaXN0ID0gZGF0YTtcbiAgICAgICAgdGhpcy5ncmNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgaWYoZXZlbnQ/Lm1vZGUgPT09ICdFRElUJykge1xuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLnNlbGVjdGVkR1JDT2JqZWN0cyA9IGRhdGE/LmRhdGE/LmZpbHRlcigoaXRlbTogYW55KSA9PiB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zZWxlY3RlZEdSQ09iamVjdHMuaW5jbHVkZXMoaXRlbS5ncmNpZCkpO1xuICAgICAgICAgIHRoaXMuc2V0T3RoZXJHUkNUeXBlc0Zvcm1hdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIGBnZXRPdGhlckdSQ1RhYkNvdW50YCByZXRyaWV2ZXMgdGhlIGNvdW50IG9mIGRpZmZlcmVudCB0eXBlcyBvZiBpdGVtcyAoYXNzZXRzLFxuICAgKiBwcm9jZXNzZXMsIHZlbmRvcnMsIGludmVudG9yeSkgYW5kIHVwZGF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgdGFicyB3aXRoIHRoZSBjb3VudC5cbiAgICogQHBhcmFtIHthbnl9IFtldmVudF0gLSBUaGUgXCJldmVudFwiIHBhcmFtZXRlciBpcyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZVxuICAgKiBcImdldE90aGVyR1JDVGFiQ291bnRcIiBmdW5jdGlvbi4gSXQgaXMgb2YgdHlwZSBcImFueVwiLCB3aGljaCBtZWFucyBpdCBjYW4gYWNjZXB0IGFueSBkYXRhIHR5cGUuXG4gICAqL1xuICBnZXRPdGhlckdSQ1RhYkNvdW50KGV2ZW50PzogYW55KSB7XG4gICAgZXZlbnRbJ3JjX2lkcyddID0gdGhpcy5nZXRBbGxSQ0lkcyh0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5yYyk7XG4gICAgdGhpcy5ncmNUYWJMb2FkZXIgPSB0cnVlO1xuICAgIHRoaXMuZ3JjU2VydmljZS5nZXRHUkNUYWJzQ291bnQoZXZlbnQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLm90aGVyR1JDQ2FyZC5mb3JFYWNoKCh0YWI6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBPQkpFQ1RfTEFCRUw6IGFueSA9IHtcbiAgICAgICAgICBBU1NFVDogJ0Fzc2V0cycsXG4gICAgICAgICAgUFJPQ0VTUzogJ1Byb2Nlc3NlcycsXG4gICAgICAgICAgVkVORE9SOiAnVmVuZG9ycycsXG4gICAgICAgICAgSU5WRU5UT1JZOiAnSW52ZW50b3J5JyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmNUYWJMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgVEFCX05BTUUgPSBPQkpFQ1RfTEFCRUxbdGFiPy50aXRsZT8udG9VcHBlckNhc2UoKV07XG4gICAgICAgIGlmIChUQUJfTkFNRSkge1xuICAgICAgICAgIHRhYi50aXRsZSA9IFRBQl9OQU1FO1xuICAgICAgICAgIHRhYi52YWx1ZSA9IGluZGV4O1xuICAgICAgICAgIHRhYi5zZWxlY3RlZENvdW50ID0gMDtcbiAgICAgICAgICB0YWIua2V5ID0gVEFCX05BTUU/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gYCR7dGFiLmtleX1fdHlwZV9jb3VudGA7XG4gICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB0YWIuY291bnQgPSBkYXRhW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWxsUkNJZHMocmNJZHM6IGFueSkge1xuICAgIGNvbnN0IGFsbElkczogbnVtYmVyW10gPSByY0lkcy5mbGF0TWFwKChyYzogYW55KSA9PiBbXG4gICAgICAuLi5yYy5pdGVtX3BhcmVudF9pZHMubWFwKE51bWJlciksXG4gICAgICAuLi5yYy5pdGVtX2NoaWxkX2lkcy5tYXAoTnVtYmVyKSxcbiAgICAgIE51bWJlcihyYy5yY19pZCksXG4gICAgXSk7XG5cbiAgICByZXR1cm4gdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XG4gICAgICAuZmlsdGVyKChyYzogYW55KSA9PiBhbGxJZHMuaW5jbHVkZXMocmM/LnJjX2lkKSlcbiAgICAgIC5tYXAoKGVsZTogYW55KSA9PiBlbGUuX2lkKVxuICAgICAgLmpvaW4oJywnKTtcbiAgfVxuXG4gIHNldE90aGVyR1JDVHlwZXNGb3JtYXRlKCkge1xuICAgIGNvbnN0IGdyY1R5cGVzID0gR1JDX1RZUEVfQVJSQVk7XG4gICAgdGhpcy5yZXNldEdSQ0RhdGFXaXRoVHlwZXMoKTtcbiAgICBpZiAodGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnNlbGVjdGVkR1JDT2JqZWN0cz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnNlbGVjdGVkR1JDT2JqZWN0cz8uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZ3JjRGF0YVdpdGhUeXBlc1tncmNUeXBlc1tpdGVtPy50eXBlXV0/LnB1c2goaXRlbSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXNldEdSQ0RhdGFXaXRoVHlwZXMoKSB7XG4gICAgdGhpcy5ncmNEYXRhV2l0aFR5cGVzID0ge1xuICAgICAgYXNzZXRzOiBbXSxcbiAgICAgIHByb2Nlc3NlczogW10sXG4gICAgICB2ZW5kb3JzOiBbXSxcbiAgICAgIGludmVudG9yeTogW10sXG4gICAgfTtcbiAgfVxuXG4gIHJlbW92ZU90aGVyR1JDT2JqZWN0cyhldmVudDogYW55KSB7XG4gICAgY29uc3QgZ3JjVHlwZXMgPSBHUkNfVFlQRV9BUlJBWTtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zZWxlY3RlZEdSQ09iamVjdHMgPVxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LnNlbGVjdGVkR1JDT2JqZWN0cy5maWx0ZXIoXG4gICAgICAgIChncmM6IGFueSkgPT4gZ3JjPy5faWQgIT09IGV2ZW50Py5faWRcbiAgICAgICk7XG4gICAgdGhpcy5maWx0ZXJPdGhlckdSQ0RhdGEoZXZlbnQsIGdyY1R5cGVzW2V2ZW50Py50eXBlXSk7XG4gICAgdGhpcy5vdGhlckdSQ0NhcmRbMF0uc2VsZWN0ZWRDb3VudFxuICAgICAgPyAodGhpcy5vdGhlckdSQ0NhcmRbZXZlbnQ/LnR5cGVdLnNlbGVjdGVkQ291bnQgLT0gMSlcbiAgICAgIDogMDtcbiAgfVxuXG4gIGZpbHRlck90aGVyR1JDRGF0YShldmVudDogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdyY0RhdGFXaXRoVHlwZXNbdHlwZV0gPSB0aGlzLmdyY0RhdGFXaXRoVHlwZXNbdHlwZV0/LmZpbHRlcihcbiAgICAgIChncmM6IGFueSkgPT4gZ3JjPy5faWQgIT09IGV2ZW50Py5faWRcbiAgICApO1xuICB9XG5cbiAgLy8gTmV3IFByb2dyYW0gTGlzdFxuICBwcm9ncmFtcyE6IExpc3RJdGVtW107IC8vIEFzc2lnbiBtb2NrIGRhdGFcbiAgc2VsZWN0ZWRQcm9ncmFtczogYW55ID0ge307XG5cblxuICBAVmlld0NoaWxkKCdjdXN0b21JdGVtVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjdXN0b21JdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XG5cblxuXG5cbiAgb25JdGVtc1NlbGVjdGVkQ2hhbmdlKGl0ZW1zOiBMaXN0SXRlbVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zID0gaXRlbXM7XG4gICAgdGhpcy5hbGxQcm9nYW1TZWxlY3RlZCA9IChbXSBhcyBhbnkpLmNvbmNhdCguLi4gT2JqZWN0LnZhbHVlcyhpdGVtcykpO1xuICB9XG5cbiAgc2VsZWN0Q2F0ZWdvcnkoKTogdm9pZCB7XG5cbiAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcnkgPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNcbiAgICB0aGlzLmdlbmVyYXRlQ3VzdG9tVGFncygpXG4gIFxuICB9XG5cbmdlbmVyYXRlQ3VzdG9tVGFncygpIHtcbiAgLy8gRW5zdXJlIGN1c3RvbVRhZ3MgZXhpc3RzXG4gIGlmICghdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0/LmN1c3RvbVRhZ3MpIHtcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gW107XG4gIH1cblxuICAvLyBQcmVwYXJlIGV4aXN0aW5nIHRhZ3MgZm9yIHF1aWNrIGxvb2t1cFxuICBjb25zdCBleGlzdGluZ1RhZ3NTZXQgPSBuZXcgU2V0KFxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3NcbiAgICAgIC5tYXAoKHRhZ0l0ZW06IGFueSkgPT4gdGFnSXRlbS5uYW1lPy50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICApO1xuXG4gIC8vIENvbGxlY3QgbmV3IHRhZ3NcbiAgY29uc3QgbmV3VGFnczogYW55W10gPSBbXTtcbiAgY29uc3QgcHJvZ3JhbUdyb3VwcyA9IE9iamVjdC52YWx1ZXModGhpcy5zZWxlY3RlZFByb2dyYW1zIHx8IHt9KTtcblxuICBwcm9ncmFtR3JvdXBzLmZvckVhY2goKHByb2dyYW1Hcm91cDogYW55KSA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByb2dyYW1Hcm91cCkpIHJldHVybjtcblxuICAgIHByb2dyYW1Hcm91cC5mb3JFYWNoKChwcm9ncmFtOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUZpZWxkcyA9IHByb2dyYW0/LmN1c3RvbUZpZWxkcyB8fCBbXTtcbiAgICAgIGN1c3RvbUZpZWxkcy5mb3JFYWNoKCh0YWc6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBsb3dlclRhZyA9IHRhZz8udG9Mb3dlckNhc2U/LigpO1xuICAgICAgICBpZiAobG93ZXJUYWcgJiYgIWV4aXN0aW5nVGFnc1NldC5oYXMobG93ZXJUYWcpKSB7XG4gICAgICAgICAgbmV3VGFncy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHRhZyxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICAgIHByb2dyYW1JZDogcHJvZ3JhbS5pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleGlzdGluZ1RhZ3NTZXQuYWRkKGxvd2VyVGFnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE1lcmdlIG5ldyBhbmQgZXhpc3RpbmcgdGFnc1xuICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5jdXN0b21UYWdzID0gW1xuICAgIC4uLm5ld1RhZ3MsXG4gICAgLi4udGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uY3VzdG9tVGFncyxcbiAgXTtcbn1cblxuXG4gIGdldCBjdXJyZW50VXNlckluZm8oKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCk/LnVzZXI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbWVtYmVyX2VtYWlsOiBjdXJyZW50VXNlcj8uZW1haWwsXG4gICAgICBtZW1iZXJfaWQ6IGN1cnJlbnRVc2VyLmlkLFxuICAgICAgbWVtYmVyX25hbWU6IGN1cnJlbnRVc2VyLm5hbWUsXG4gICAgICBvcmdhbmlzYXRpb25faWQ6IGN1cnJlbnRVc2VyLm9yZ2FuaXNhdGlvbl9pZCxcbiAgICAgIHVpZDogY3VycmVudFVzZXIudWlkLFxuICAgICAgX2lkOiB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkuX2lkLFxuICAgIH1cbiAgfVxuXG4gIHJlbW92ZVByb2dyYW0ocHJvZ3JhbTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRQcm9ncmFtcyk7XG4gICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkUHJvZ3JhbXNba2V5XS5maW5kSW5kZXgoXG4gICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/LmlkID09PSBwcm9ncmFtPy5pZFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2dyYW1zW2tleV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBvcHVsYXRlUmVzcG9uc2liaWxpdHlEZXRhaWxzKCkge1xuICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgY29uc3QgcmVzID0gdGhpcy5yZXNwb25zaWJpbGl0eURldGFpbHM7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmlzRHVwbGljYXRlID8gXCJDb3B5IG9mIFwiICsgcmVzPy50aXRsZSA6IHJlcz8udGl0bGU7ICBcbiAgICBjb25zdCBjdXJyZW50c1VlckluZm8gPSB0aGlzLmN1cnJlbnRVc2VySW5mbztcbiAgICBjb25zdCBhc3NpZ25vcklkID0gdGhpcy5pc0R1cGxpY2F0ZSA/IGN1cnJlbnRzVWVySW5mby51aWQgOiByZXM/LmFzc2lnbm9ySWQ7XG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eUlkID0gcmVzPy5pZDtcblxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtID0ge1xuICAgICAgYXNzaWdub3JzOiB7XG4gICAgICAgIGVuYWJsZTogZmFsc2UsXG4gICAgICAgIGxpc3Q6XG4gICAgICAgICAgdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWdub3JzTGlzdCwgW2Fzc2lnbm9ySWRdLCAndWlkJylcbiAgICAgICAgICAgID8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25vcnNMaXN0LCBbYXNzaWdub3JJZF0sICd1aWQnKVxuICAgICAgICAgICAgOiBbY3VycmVudHNVZXJJbmZvXSxcbiAgICAgIH0sXG4gICAgICByZXNwb25zaWJpbGl0eToge1xuICAgICAgICBuYW1lOiB0aXRsZSxcbiAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcz8ua2V5LFxuICAgICAgfSxcbiAgICAgIGFzc2lnbmVlczoge1xuICAgICAgICB3aG9DYW5Db21wbGV0ZTogcmVzPy5hc3NpZ25lZT8udHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBsaXN0OiB0aGlzLnNldExpc3QodGhpcy5hc3NpZ25lZXNMaXN0LCByZXM/LmFzc2lnbmVlPy51c2VySWQsICd1aWQnKSxcbiAgICAgIH0sXG4gICAgICBhc3NpZ25lZUdyb3Vwczoge1xuICAgICAgICB3aG9DYW5Db21wbGV0ZTogcmVzPy5hc3NpZ25lZT8udHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBsaXN0OiB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5ncm91cEFzc2lnbmVlTGlzdCxcbiAgICAgICAgICByZXM/LmFzc2lnbmVlPy51c2VyR3JvdXBJZCxcbiAgICAgICAgICAndWlkJyxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBhbGxvd0VkaXREdWVEYXRlOiByZXM/LmFsbG93RWRpdER1ZURhdGUsXG4gICAgICBmcmVxdWVuY3k6IHJlcz8uZnJlcXVlbmN5LFxuICAgICAgZGVzY3JpcHRpb246IHJlcz8ubm90ZXMsXG4gICAgICBvYmplY3RpdmU6IHJlcz8ub2JqZWN0aXZlLFxuICAgICAgcmM6IHRoaXMuc2V0TGlzdChcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0LFxuICAgICAgICByZXMucmVzcG9uc2liaWxpdHlDZW50ZXI/LmlkLFxuICAgICAgICAncmNpZCdcbiAgICAgICksXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6XG4gICAgICByZXMucmVzcG9uc2liaWxpdHlDZW50ZXI/LnR5cGUgPT09ICdhbGwnID8gMTogMCxcbiAgICAgIGNhdGVnb3J5OiByZXM/LnByb2dyYW1fY2F0X2lkcz8ubGVuZ3RoXG4gICAgICAgID8gcmVzPy5jYXRlZ29yeV9pZHNfYXJyYXkuZmlsdGVyKFxuICAgICAgICAgICAgKGVsZTogYW55KSA9PiAhcmVzLnByb2dyYW1fY2F0X2lkcz8uaW5jbHVkZXMoZWxlKVxuICAgICAgICAgIClcbiAgICAgICAgOiByZXM/LmNhdGVnb3J5X2lkc19hcnJheSxcbiAgICAgIHByb2dyYW1fc2VsZWN0ZWRfaWRzOiByZXM/LmNhdGVnb3J5X2lkPy5zcGxpdCgnLCcpID8/IFtdLFxuICAgICAgY2F0ZWdvcnlfaWQ6IHJlcz8uY2F0ZWdvcnlfaWQgPz8gJycsXG5cbiAgICAgIHByb2dyYW06IHJlcz8ucHJvZ3JhbURldGFpbHM/LmNhdGVnb3J5X2lkXG4gICAgICAgID8gW3Jlcz8ucHJvZ3JhbURldGFpbHNdXG4gICAgICAgIDogW10sXG4gICAgICBjaGVja3BvaW50SW5zdHJ1Y3Rpb246IHJlcz8uY2hlY2twb2ludF9kZXNjcmlwdGlvbixcbiAgICAgIGN1c3RvbVRhZ3M6IHJlcz8udGFncyAsXG4gICAgICBjaGVja3BvaW50czogcmVzPy5jaGVja3BvaW50X2RldGFpbHNcbiAgICAgICAgPyBKU09OLnBhcnNlKHJlcz8uY2hlY2twb2ludF9kZXRhaWxzKVxuICAgICAgICA6ICcnLFxuICAgICAgcmV2aWV3ZXJzOiB7XG4gICAgICAgIHNlcXVlbnRpYWxXb3JrZmxvdzpcbiAgICAgICAgICByZXM/LnJldmlld2VyPy50eXBlID09ICdzZXF1ZW50aWFsJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiByZXM/LnJldmlld2VyPy5mcmVxdWVuY3k/LmNvbXBsZXRlQnkgPz8gMixcbiAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiByZXM/LnJldmlld2VyPy5mcmVxdWVuY3k/LmVuZEFmdGVyID8/IDIsXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHRoaXMuc2V0TGlzdCh0aGlzLnJldmlld2Vyc0xpc3QsIHJlcz8ucmV2aWV3ZXI/LnVzZXJJZCwgJ3VpZCcpLFxuICAgICAgfSxcblxuICAgICAgZ3JvdXBSZXZpZXdlcnM6IHtcbiAgICAgICAgc2VxdWVudGlhbFdvcmtmbG93OiByZXM/LnJldmlld2VyPy50eXBlID09ICdzZXF1ZW50aWFsJyA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgcmV2aWV3RnJlcXVlbmN5OiB7XG4gICAgICAgICAgcmV2aWV3Q29tcGxldGVEYXlzOiByZXM/LnJldmlld2VyPy5mcmVxdWVuY3k/LmNvbXBsZXRlQnkgPz8gMixcbiAgICAgICAgICByZXZpZXdOT3RDb21wbGV0ZWREYXlzOiByZXM/LnJldmlld2VyPy5mcmVxdWVuY3k/LmVuZEFmdGVyID8/IDIsXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmdyb3VwUmV2aWV3ZXJMaXN0LFxuICAgICAgICAgIHJlcz8ucmV2aWV3ZXI/LnVzZXJHcm91cElkLFxuICAgICAgICAgICd1aWQnLFxuICAgICAgICApLFxuICAgICAgfSxcblxuICAgICAgb3ZlcnNlZXJzOiB7XG4gICAgICAgIGxpc3Q6IHJlcz8ub3ZlcnNlZXJcbiAgICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5vdmVyc2VlcnNMaXN0LFxuICAgICAgICAgICAgICByZXM/Lm92ZXJzZWVyPy5zdWNjZXNzPy51c2VySWQsXG4gICAgICAgICAgICAgICd1aWQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBbXSxcbiAgICAgICAgbm90aWZ5TGlzdDogcmVzPy5vdmVyc2Vlcj8uZmFpbD8udXNlcklkXG4gICAgICAgICAgPyB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgICAgICAgcmVzPy5vdmVyc2Vlcj8uZmFpbD8udXNlcklkLFxuICAgICAgICAgICAgICAndWlkJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIDogW10sXG4gICAgICB9LFxuICAgICAgZm9ybWF0QW5kRXZpZGVuY2U6IHtcbiAgICAgICAgZm9ybWF0UmVxdWlyZWQ6XG4gICAgICAgICAgcmVzPy5ldmlkZW5jZT8uZm9ybWF0Py5kYXRhPy5sZW5ndGggPiAwIFxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlLFxuICAgICAgICBmb3JtYXRGaWxlczogcmVzLmV2aWRlbmNlPy5mb3JtYXQ/LnR5cGUgPT09ICdmaWxlJyA/IHJlcz8uZXZpZGVuY2U/LmZvcm1hdD8uZGF0YSA6IFtdLFxuICAgICAgICBmb3JtYXRMaW5rczogcmVzPy5ldmlkZW5jZT8uZm9ybWF0Py50eXBlID09PSAnbGluaycgPyByZXM/LmV2aWRlbmNlPy5mb3JtYXQ/LmRhdGEgOiBbXSxcbiAgICAgICAgZXZpZGVuY2VSZXF1aXJlZDogcmVzPy5ldmlkZW5jZT8ucmVxdWlyZWQgPyB0cnVlIDogZmFsc2UsXG4gICAgICB9LFxuICAgICAgYXNzdXJhbmNlTGlzdDogW10sXG4gICAgICByZXF1aXJlc0F1ZGl0TGlzdDogW10sXG4gICAgICByaXNrQ2xhc3M6IHJlcz8ucmlza0NsYXNzLFxuICAgICAgc2VsZWN0ZWRHUkNPYmplY3RzOiByZXM/Lm1ldGE/LmxpbmtlZEVudGl0aWVzPy5ncmNPYmplY3RzID8/IFtdLFxuXG4gICAgfTtcbiAgICBjb25zdCBHUkNfT0JKRUNUUyA9IHJlcz8ubWV0YT8ubGlua2VkRW50aXRpZXM/LmdyY09iamVjdHMgPz8gW107XG4gICAgIGlmKEdSQ19PQkpFQ1RTPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlR1JDT2JqZWN0RGV0YWlscyhHUkNfT0JKRUNUUyk7XG4gICAgfVxuICAgIHRoaXMucG9wdWxhdGVGcmVxdWVuY3lEZXRhaWxzKHJlcy5mcmVxdWVuY3kpO1xuICAgIHRoaXMucG9wdWxhdGVQcm9ncmFtRGV0YWlscyhyZXMpO1xuICAgIHRoaXMuZ2V0RWRpdE1vcmVPcHRpb25zKHJlcyk7XG4gICAgdGhpcy5wb3B1bGF0ZWZvcm1hdERldGFpbHMocmVzKTtcbiAgfVxuXG4gIC8vcG9wdWxhdGUgZm9ybWF0IERldGFpbHNcbiAgcG9wdWxhdGVmb3JtYXREZXRhaWxzKHJlczogYW55KSB7XG4gICAgY29uc3QgZm9ybWF0T2JqZWN0OiBhbnlbXSA9IFtdXG4gICAgY29uc3QgZm9ybWF0RmlsZXMgPSByZXM/LmV2aWRlbmNlPy5mb3JtYXQ/LmRhdGEgPz8gW107XG4gICAgaWYoZm9ybWF0RmlsZXM/Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvcm1hdEZpbGVzLmZvckVhY2goKGZpbGU6IGFueSkgPT4ge1xuICAgICAgZm9ybWF0T2JqZWN0LnB1c2goIHtcbiAgICAgICAgZmlsZV91cmxfcGF0aDogZmlsZT8uZmlsZVBhdGggPz8gJycsXG4gICAgICAgIG5hbWU6IGZpbGU/Lm5hbWUgPz8gJycsXG4gICAgICAgIG9yZ19maWxlOiBmaWxlPy5uYW1lID8/ICcnLFxuICAgICAgICBmaWxlX25hbWU6IGZpbGU/Lm5hbWUgPz8gJycsXG4gICAgICAgIHR5cGU6IGZpbGU/LnR5cGUgPz8gJydcbiAgICAgIH0pXG4gICAgfSlcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRGaWxlcyA9IGZvcm1hdE9iamVjdDtcbiAgfVxuXG4gIC8vUG9wdWxhdGUgUHJvZ3JhbSBEZXRhaWxzXG4gcG9wdWxhdGVQcm9ncmFtRGV0YWlscyhyZXM6IGFueSkge1xuICBjb25zdCBkYXRhID0gcmVzPy5tZXRhPy5saW5rZWRFbnRpdGllcz8ucHJvZ3JhbXMgPz8ge307XG4gIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmN1c3RvbVRhZ3MgPSBkYXRhPy50YWdzID8/IFtdO1xuICB0aGlzLnNlbGVjdGVkUHJvZ3JhbXMgPSB0aGlzLm1hcExpbmtlZFByb2dyYW1zKGRhdGEpXG4gIGlmKE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0ZWRQcm9ncmFtcykubGVuZ3RoID4gMCkge1xuICAgIHRoaXMub25JdGVtc1NlbGVjdGVkQ2hhbmdlKHRoaXMuc2VsZWN0ZWRQcm9ncmFtcyk7XG4gIH1cbiB9XG5cbiAgcG9wdWxhdGVGcmVxdWVuY3lEZXRhaWxzKGZyZXF1ZW5jeTogYW55KSB7XG4gICAgY29uc3QgZ2V0UGF0dGVybiA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5jcmVhdGVGcmVxdWVuY3lQYXR0ZXJuKGZyZXF1ZW5jeSk7XG4gICAgY29uc3QgbGlmZWN5Y2xlRGV0YWlscyA9IHRoaXMuZnJlcXVlbmN5U2VydmljZS5nZXRMaWZlY3ljbGVQYXR0ZXJuKGZyZXF1ZW5jeSk7XG4gICAgZnJlcXVlbmN5LnBhdHRlcm4gPSBnZXRQYXR0ZXJuO1xuICAgIGZyZXF1ZW5jeS5saWZlY3ljbGVfZGV0YWlscyA9IGxpZmVjeWNsZURldGFpbHMucGF0dGVybjtcbiAgICBmcmVxdWVuY3kuc3RhcnRfb2ZfZGF5X3V0YyA9IGxpZmVjeWNsZURldGFpbHMuc3RhcnRGcm9tO1xuICAgIGlmKHRoaXMucmVzcG9uc2liaWxpdHlEZXRhaWxzPy5vbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eSkge1xuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eURldGFpbHMub25Db21wbGV0aW9uUmVzcG9uc2liaWxpdHkgPSAge1xuICAgICAgICAuLi50aGlzLnJlc3BvbnNpYmlsaXR5RGV0YWlscz8ub25Db21wbGV0aW9uUmVzcG9uc2liaWxpdHksXG4gICAgICAgIC4uLmZyZXF1ZW5jeS5vbkNvbXBsZXRlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZnJlcXVlbmN5KTtcbiAgICB0aGlzLmdldEZyZXF1ZW5jeVBsYWNlaG9sZGVyKGZyZXF1ZW5jeSk7XG4gIH1cblxuICAgbWFwTGlua2VkUHJvZ3JhbXMocHJvZ3JhbXM6IHtcbiAgICBsaW5rZWQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcltdPixcbiAgICBkYXRhOiBhbnlbXVxuICB9KTogUmVjb3JkPHN0cmluZywgYW55W10+IHtcbiAgICAvLyBCdWlsZCBhIGxvb2t1cCBmb3IgZmFzdCBpZCDihpIgb2JqZWN0IG1hcHBpbmdcbiAgICBjb25zdCBwcm9ncmFtQnlJZCA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KCk7XG4gICAgZm9yIChjb25zdCBwcm9ncmFtIG9mIHByb2dyYW1zLmRhdGEpIHtcbiAgICAgIHByb2dyYW1CeUlkLnNldChwcm9ncmFtLmlkLCBwcm9ncmFtKTtcbiAgICB9XG4gIFxuICAgIC8vIE1hcCBlYWNoIGxpbmtlZCBJRCBncm91cCB0byBmdWxsIHByb2dyYW0gb2JqZWN0c1xuICAgIGNvbnN0IG1hcHBlZDogUmVjb3JkPHN0cmluZywgYW55W10+ID0ge307XG4gICAgZm9yIChjb25zdCBvcmlnaW5JZCBpbiBwcm9ncmFtcy5saW5rZWQpIHtcbiAgICAgIG1hcHBlZFtvcmlnaW5JZF0gPSBwcm9ncmFtcy5saW5rZWRbb3JpZ2luSWRdXG4gICAgICAgIC5tYXAoaWQgPT4gcHJvZ3JhbUJ5SWQuZ2V0KGlkKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTsgLy8gcmVtb3ZlIHVuZGVmaW5lZCBpZiBpZCBub3QgZm91bmRcbiAgICB9XG4gIFxuICAgIHJldHVybiBtYXBwZWQ7XG4gIH1cblxuICBwb3B1bGF0ZUdSQ09iamVjdERldGFpbHMoR1JDX09CSkVDVFM6IGFueSkge1xuICAgIGlmKEdSQ19PQkpFQ1RTPy5sZW5ndGggPiAwKSB7XG4gICAgIHRoaXMuZ3JjU2VydmljZS5nZXRHUkNPYmplY3RCeUdSQ0lkKEdSQ19PQkpFQ1RTLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmdyY2lkKS5qb2luKCcsJykpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5zZWxlY3RlZEdSQ09iamVjdHMgPSBkYXRhXG4gICAgICB0aGlzLnNldE90aGVyR1JDVHlwZXNGb3JtYXRlKCk7XG4gICAgIH0pO1xuICAgIH1cbiAgfVxuICBcbn0iLCI8ZGl2IGNsYXNzPVwid29ya2Zsdy1jb21wbGlhbmNlXCIgKm5nSWY9XCIhc2hvd1NtaWxleVwiPlxuICA8IS0tIEJlaGFsZiAtLT5cbiAgPGRpdiAqbmdJZj1cIm1vZGUgIT09ICdFRElUJ1wiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXNzaWdub3JzJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbm9ycycgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWdub3JzJ1xuICAgICAgXCI+XG4gICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLmltX2NyZWF0aW5nXCIgYWx0PVwiaW1cIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXNzaWdub3JzJ1xuICAgICAgICBcIiAvPlxuXG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25vcnMnXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5JIGFtIGNyZWF0aW5nIHRoaXMgcmVzcG9uc2liaWxpdHkgb24gYmVoYWxmIG9mIHNvbWVvbmUgZWxzZVxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoIFtuZ1ZhbHVlXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlXCIgKG5nVmFsdWVDaGFuZ2UpPVwiXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25vcnMuZW5hYmxlID0gJGV2ZW50O1xuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0uYXNzaWdub3JzLmxpc3QgPSBbXVxuICAgICAgICAgICAgXCI+XG4gICAgICAgICAgPC9hcHAtY3Mtc3dpdGNoPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXNzaWdub3JzJ1xuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25vcnMnLCB0cnVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBpcyByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcgdGhpcyByZXNwb25zaWJpbGl0eT9cIiByZWFkb25seVxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8uZW5hYmxlXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25vcnMnXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGJfdXNlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8uc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxpIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbm9ycycsIGJfdXNlcilcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiYl91c2VyLm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgYl91c2VyLm1lbWJlcl9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25vcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJiZWhhbGYucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgYl91c2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5zbGljZSgwLDIpXCI+PGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25vcnMnLGJfdXNlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tiX3VzZXIubWVtYmVyX25hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWdub3JzPy5saXN0Py5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImJlaGFsZi5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdD8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25vcnMnXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWdub3JzJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNiZWhhbGYgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGJfdXNlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbm9ycz8ubGlzdCB8IHNsaWNlIDogMjtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbm9ycycsIGJfdXNlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgYl91c2VyLm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8cCAqbmdJZj1cImludmFsaWRUeXBlID09PSAnd2hvbSdcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAgICBQbGVhc2Ugc2VsZWN0IHRoZSBwZXJzb24gcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIHRoaXMgcmVzcG9uc2liaWxpdHkuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFdoYXQgLS0+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmFtZXdvcmsnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmVzcG9uc2liaWxpdHlOYW1lJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXNwb25zaWJpbGl0eT8ubmFtZS50cmltKCkgIT09ICcnICYmXG4gICAgICAgICFmb2N1cy5yZXNwb25zaWJpbGl0eU5hbWVcbiAgICAgIFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy53aGF0XCIgYWx0PVwiaW1cIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVzcG9uc2liaWxpdHk/Lm5hbWUudHJpbSgpID09PSAnJyB8fFxuICAgICAgICAgIGZvY3VzLnJlc3BvbnNpYmlsaXR5TmFtZVxuICAgICAgICBcIiAvPlxuXG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVzcG9uc2liaWxpdHk/Lm5hbWUudHJpbSgpICE9PSAnJyAmJlxuICAgICAgICAgICFmb2N1cy5yZXNwb25zaWJpbGl0eU5hbWVcbiAgICAgICAgXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgIFdoYXQ/IDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJcbiAgICAgICAgICAgICAgaXNGcmFtZXdvcmtBdmFpbGFibGUgJiZcbiAgICAgICAgICAgICAgbW9kZSAhPT0gJ0VESVQnICYmXG4gICAgICAgICAgICAgIG9wZW5lZEZyb20gIT09ICdSSVNLX1RSRUFUTUVOVCcgJiZcbiAgICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfdHlwZSAhPT0gJ2NvbXBsaWFuY2VfYXVkaXQnXG4gICAgICAgICAgICBcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJhbWV3b3JrJywgdHJ1ZSlcIiBjbGFzcz1cImJ1dHRvblwiPlxuICAgICAgICAgICAgU2VsZWN0IEZyb20gQSBmcmFtZXdvcmtcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJlc3BvbnNpYmlsaXR5Py5rZXlSZXNwb25zaWJpbGl0eVwiIGNsYXNzPVwiaW5kaWNhdG9yXCJcbiAgICAgICAgICBbYXBwVG9vbHRpcF09XCInVGhpcyByZXNwb25zaWJpbGl0eSBpcyBtYXJrZWQgYXMga2V5IHJlc3BvbnNpYmlsaXR5LidcIiBwbGFjZW1lbnQ9XCJib3R0b21cIiB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZWE3MDs8L2k+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0ICpuZ0lmPVwiXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJlc3BvbnNpYmlsaXR5Py5uYW1lLnRyaW0oKSA9PSAnJyB8fCAhaXNFZGl0V2hhdFxuICAgICAgICAgIFwiIHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwicmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Lm5hbWVcIiBwbGFjZWhvbGRlcj1cIldoYXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5P1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ3aGF0Q2hhbmdlZCgkZXZlbnQpXCIgKGZvY3VzaW4pPVwiYWN0aXZhdGVTZWxlY3RvcigncmVzcG9uc2liaWxpdHlOYW1lJywgdHJ1ZSlcIlxuICAgICAgICAgIChmb2N1c291dCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIiAoY2xpY2tPdXRzaWRlKT1cInRlc3RGdW5jdGlvbigpXCIgI3doYXQgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVzcG9uc2liaWxpdHk/Lm5hbWUudHJpbSgpICE9ICcnICYmIGlzRWRpdFdoYXRcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj57e1xuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHk/Lm5hbWVcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X3R5cGUgIT09ICdjb21wbGlhbmNlX2F1ZGl0J1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdFdoYXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCAqbmdJZj1cImludmFsaWRUeXBlID09PSAnd2hhdCdcIiBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICAgICAgICBQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5LlxuICAgICAgICA8L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzd2l0Y2gtcm93IGFsaWduLXJpZ2h0XCI+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2ggW25nVmFsdWVdPVwicmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Py5rZXlSZXNwb25zaWJpbGl0eVwiIChuZ1ZhbHVlQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHkua2V5UmVzcG9uc2liaWxpdHkgPSAkZXZlbnRcbiAgICAgICAgICAgIFwiPktleSBSZXNwb25zaWJpbGl0eVxuICAgICAgICAgIDwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBXaG8gLS0+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25lZXMnXG4gICAgICBcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuY2FzZV9hc3NpZ25lZXNcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2Fzc2lnbmVlcydcbiAgICAgICAgXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVkaXQtZHVlLWRhdGVcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+V2hvPyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJhbGxvd0VkaXREdWVEYXRlRmVhdHVyZUZsYWcgJiYgZmFsc2VcIiBjbGFzcz1cInN3aXRjaC1yb3cgYWxpZ24tcmlnaHRcIj5cbiAgICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoIFtuZ1ZhbHVlXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hbGxvd0VkaXREdWVEYXRlXCJcbiAgICAgICAgICAgICAgKG5nVmFsdWVDaGFuZ2UpPVwicmVzcG9uc2liaWxpdHlGb3JtLmFsbG93RWRpdER1ZURhdGUgPSAkZXZlbnRcIj5BTExPVyBBU1NJR05FRSBUTyBFRElUIENPTVBMRVRFRCBXT1JLPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAnSWYgaXTigJlzIGVuYWJsZWQsIHRoZSBhc3NpZ25lZSB3aWxsIGhhdmUgdGhlIG9wdGlvbiB0byBtb2RpZnkgYSBwcmV2aW91c2x5IGNvbXBsZXRlZCBkdWUgZGF0ZS4nXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPlxuICAgICAgICAgICAgPC9hcHAtY3Mtc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCB2eC1tdC0wXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgKCFmZWF0dXJlRmxhZ19ncm91cHMgfHxcbiAgICAgICAgICAgICAgKHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKSlcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWduZWVzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gaXMgcmVzcG9uc2libGUgZm9yIGNvbXBsZXRpbmcgdGhlIHJlc3BvbnNpYmlsaXR5P1wiIHJlYWRvbmx5IC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwiXG4gICAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgIWZlYXR1cmVGbGFnX2dyb3VwcykgfHxcbiAgICAgICAgICAgICgocmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBlX3VzZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICA8aSAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBlX3VzZXIpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImVfdXNlci5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IGVfdXNlci5tZW1iZXJfbmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5iZ1wiXG4gICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImFzc2lnbmVlcy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdhc3NpZ25lZXMnLCByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFswXSlcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJ1c2VyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj4mPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZShcbiAgICAgICAgICAgICAgICAgICAgJ2dyb3VwYXNzaWduZWVzJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdFswXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIFwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdFswXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3RbMF0/Lmdyb3VwX25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICt7eyByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiIFtjbGFzcy5tb3JlLW9uZV09XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGVuZ3RoPjFcIiBbY2xhc3MucGx1c109XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGVuZ3RoPjJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgZV91c2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5zbGljZSgwLDIpXCI+PGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLGVfdXNlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tlX3VzZXIubWVtYmVyX25hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImFzc2lnbmVlcy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiICpuZ0lmPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0Py5sZW5ndGggPiAwXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy5saXN0WzBdKVwiID4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+PHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMFwiPnt7cmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWV9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnQgdXNlclwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInVzZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwibGVmdFwiPiAre3tyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdD8ubGVuZ3RoIC0xfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3Q/Lmxlbmd0aCA+IDAgJiYgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMFwiID4mPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGhcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKCFhbGxHcm91cEFzc2lnbmVlIHx8IG1vZGUgIT09ICdFRElUJylcIiBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdncm91cGFzc2lnbmVlcycscmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdFswXSlcIiA+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3RbMF0/Lmdyb3VwX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+PHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMFwiPnt7cmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZUdyb3Vwcz8ubGlzdFswXT8uZ3JvdXBfbmFtZX19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiZ3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Py5sZW5ndGggLSAxfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25lZXMnXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzaWduZWVzJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICN1c2VyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBlX3VzZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3NpZ25lZXM/Lmxpc3QgfCBzbGljZSA6IDFcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsIGVfdXNlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgZV91c2VyLm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0XG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoZmVhdHVyZUZsYWdfZ3JvdXBzICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICghYWxsR3JvdXBBc3NpZ25lZSB8fCBtb2RlICE9PSAnRURJVCcpKVxuICAgICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdncm91cGFzc2lnbmVlcycsIGdyb3VwKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgIDxwICpuZ0lmPVwiaW52YWxpZFR5cGUgPT09ICd3aG8nXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAgICAgICAgUGxlYXNlIHNlbGVjdCB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciBjb21wbGV0aW5nIHRoaXNcbiAgICAgICAgICByZXNwb25zaWJpbGl0eS5cbiAgICAgICAgPC9wPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzR3JvdXBBc3NpZ25lZFwiPlxuXG4gICAgICAgICAgPGFwcC1jcy1yYWRpbyAqbmdJZj1cIm1vZGUgIT09ICdFRElUJ1wiIChjaGVja2VkRXZlbnQpPVwiXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnQU5ZX09ORSdcbiAgICAgICAgICAgIFwiIFtjaGVja2VkXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPT0gJ0FOWV9PTkUnXCIgW25hbWVdPVwiJ3doYXQnXCI+QU5ZIFNFTEVDVEVEIFBFUlNPTlxuICAgICAgICAgICAgQ0FOIENPTVBMRVRFIFRISVNcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnSWYgc2VsZWN0ZWQsIG9ubHkgb25lIHJlc3BvbnNpYmlsaXR5IHdpbGwgYmUgY3JlYXRlZC4nXG4gICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTFmOzwvaT5cbiAgICAgICAgICA8L2FwcC1jcy1yYWRpbz5cblxuICAgICAgICAgIDxhcHAtY3MtcmFkaW8gKm5nSWY9XCJtb2RlICE9PSAnRURJVCdcIiAoY2hlY2tlZEV2ZW50KT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3NpZ25lZXMud2hvQ2FuQ29tcGxldGUgPSAnQUxMJ1wiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJyZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTEwnXCIgW25hbWVdPVwiJ3doYXQnXCI+QUxMIFNFTEVDVEVEIFBFUlNPTlMgTkVFRFxuICAgICAgICAgICAgVE8gQ09NUExFVEUgVEhJUzxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCBzZXBhcmF0ZSByZXNwb25zaWJpbGl0aWVzIHdpbGwgYmUgY3JlYXRlZCBmb3IgZWFjaCBwZXJzb24uJ1xuICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPlxuICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaC1yb3cgYWxpZ24tcmlnaHRcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICBtb2RlID09ICdFRElUJyAmJlxuICAgICAgICAgICAgICAoIWZlYXR1cmVGbGFnX2dyb3VwcyB8fFxuICAgICAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlR3JvdXBzPy5saXN0Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKSlcbiAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGFwcC1jcy1zd2l0Y2ggKG5nVmFsdWVDaGFuZ2UpPVwib3BlbkFzc2lnbmVlQ2hhbmdlQ29uZmlybWF0aW9uKCRldmVudClcIiBbbmdWYWx1ZV09XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0uYXNzaWduZWVzLndob0NhbkNvbXBsZXRlID09ICdBTllfT05FJ1xuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgQU5ZIFNFTEVDVEVEIFBFUlNPTiBDQU4gQ09NUExFVEUgVEhJU1xuICAgICAgICAgICAgPC9hcHAtY3Mtc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNhc3NpZ25lZXMgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGVfdXNlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsIGVfdXNlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgZV91c2VyLm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gV2hlbj8gLS0+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5JyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgIXJlc3BvbnNpYmlsaXR5Rm9ybT8uZnJlcXVlbmN5IHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1xuICAgICAgXCI+XG4gICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLndoZW5cIiBhbHQ9XCJpbVwiICpuZ0lmPVwiIXJlc3BvbnNpYmlsaXR5Rm9ybT8uZnJlcXVlbmN5IHx8IGFjdGl2ZVNlbGVjdG9yID09PSAnZnJlcXVlbmN5J1wiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgJiZcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2ZyZXF1ZW5jeScgJiZcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmZyZXF1ZW5jeSAhPSAnJyAmJlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZnJlcXVlbmN5ICE9ICc1fjB+MH4wJ1xuICAgICAgICBcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+V2hlbj8gPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIlxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgPT0gJycgfHxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZnJlcXVlbmN5ID09ICc1fjB+MH4wJ1xuICAgICAgICAgIFwiIGNsYXNzPVwic2VsZWN0IGJ1dHRvbi1zZWNcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIiBbcGxhY2Vob2xkZXJdPVwiZnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgcmVhZG9ubHkgLz5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIFNldCBBIGZyZXF1ZW5jeVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIlxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5mcmVxdWVuY3kgIT0gJycgJiZcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZnJlcXVlbmN5ICE9PSAnNX4wfjB+MCdcbiAgICAgICAgICBcIiBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJmcmVxdWVuY3lQbGFjZWhvbGRlclwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgKm5nSWY9XCJpbnZhbGlkVHlwZSA9PT0gJ3doZW4nXCIgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAgICAgICAgUGxlYXNlIHNlbGVjdCB0aGUgZnJlcXVlbmN5IG9mIG9jY3VycmVuY2UgZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuXG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIE5vdGVzIC0tPlxuICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnbm90ZXMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnbm90ZXMnICYmXG4gICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlxuICAgICAgICBjaGVja0JsYW5rKHJlc3BvbnNpYmlsaXR5Rm9ybT8uZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgIWZvY3VzLmRlc2NyaXB0aW9uXG4gICAgICBcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMubm90ZXNcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiXG4gICAgICAgICAgY2hlY2tCbGFuayhyZXNwb25zaWJpbGl0eUZvcm0/LmRlc2NyaXB0aW9uKS50cmltKCkgPT09ICcnIHx8XG4gICAgICAgICAgZm9jdXMuZGVzY3JpcHRpb25cbiAgICAgICAgXCIgLz5cblxuICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiICpuZ0lmPVwiXG4gICAgICAgICAgY2hlY2tCbGFuayhyZXNwb25zaWJpbGl0eUZvcm0/LmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnICYmXG4gICAgICAgICAgIWZvY3VzLmRlc2NyaXB0aW9uXG4gICAgICAgIFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPk5vdGVzPC9sYWJlbD5cbiAgICAgICAgPHZjb21wbHktZWRpdG9yIFsobmdNb2RlbCldPVwicmVzcG9uc2liaWxpdHlGb3JtLmRlc2NyaXB0aW9uXCIgW2VkaXRvckNvbmZpZ109XCJ7XG4gICAgICAgICAgICBtb2RlOiAncHJpbWUnLFxuICAgICAgICAgICAgY29sb3JQYWxldHRlOiB0cnVlLFxuICAgICAgICAgICAgbGluazogdHJ1ZSxcbiAgICAgICAgICAgIGlkOiAnbm90ZXMnLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6XG4gICAgICAgICAgICAgICdBZGQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb21wbGV0aW5nIHRoZSByZXNwb25zaWJpbGl0eSdcbiAgICAgICAgICB9XCI+PC92Y29tcGx5LWVkaXRvcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIE9iamVjdGl2ZSAtLT5cbiAgPGRpdiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwibW9yZU9wdGlvbnM/Lk9CSkVDVElWRVwiIFthdHRyLmlkXT1cIidPQkpFQ1RJVkUnXCJcbiAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnb2JqZWN0aXZlJ1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ29iamVjdGl2ZScgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiXG4gICAgICAgIGNoZWNrQmxhbmsocmVzcG9uc2liaWxpdHlGb3JtPy5vYmplY3RpdmUpLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgIWZvY3VzLm9iamVjdGl2ZVxuICAgICAgXCI+XG4gICAgICA8aW1nIFtzcmNdPVwiQVNTRVRTLm9iamVjdGl2ZXNcIiBhbHQ9XCJpbVwiICpuZ0lmPVwiXG4gICAgICAgICAgY2hlY2tCbGFuayhyZXNwb25zaWJpbGl0eUZvcm0/Lm9iamVjdGl2ZSkudHJpbSgpID09PSAnJyB8fFxuICAgICAgICAgIGZvY3VzLm9iamVjdGl2ZVxuICAgICAgICBcIiAvPlxuXG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIiAqbmdJZj1cIlxuICAgICAgICAgIGNoZWNrQmxhbmsocmVzcG9uc2liaWxpdHlGb3JtPy5vYmplY3RpdmUpLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgICAhZm9jdXMub2JqZWN0aXZlXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5PYmplY3RpdmU8L2xhYmVsPlxuICAgICAgICA8dmNvbXBseS1lZGl0b3IgWyhuZ01vZGVsKV09XCJyZXNwb25zaWJpbGl0eUZvcm0ub2JqZWN0aXZlXCIgW2VkaXRvckNvbmZpZ109XCJ7XG4gICAgICAgICAgICBtb2RlOiAncHJpbWUnLFxuICAgICAgICAgICAgY29sb3JQYWxldHRlOiB0cnVlLFxuICAgICAgICAgICAgaWQ6ICdvYmplY3RpdmUnLFxuICAgICAgICAgICAgbGluazogdHJ1ZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOlxuICAgICAgICAgICAgICAnVGhpcyBvcHRpb24gbGV0cyB5b3Ugc3BlY2lmeSBhbiBvYmplY3RpdmUgZm9yIHRoZSByZXNwb25zaWJpbGl0eS4nXG4gICAgICAgICAgfVwiPjwvdmNvbXBseS1lZGl0b3I+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5SQ1wiIFthdHRyLmlkXT1cIidSQydcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyYycgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyYydcbiAgICAgIFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5yZXNwb25zaWJpbGl0eV9jZW50ZXJcIiBhbHQ9XCJcIlxuICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA9PSAwIHx8IGFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCIgLz5cblxuICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJjPy5sZW5ndGggPiAwICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAncmMnXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJlc3BvbnNpYmlsaXR5IENlbnRlciA8L2xhYmVsPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLCB0cnVlKVwiXG4gICAgICAgICAgICBhcmlhLXBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSByZXNwb25zaWJpbGl0eSBjZW50ZXIgb3IgdGhlIHJlc3BvbnNpYmlsaXR5IGNlbnRlcnMgZm9yIHRoaXMgcmVzcG9uc2liaWxpdHkuXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLHRydWUpXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUmVzcG9uc2liaWxpdHkgQ2VudGVyKHMpXCIgcmVhZG9ubHk+IC0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgIFtjbGFzcy5yZWFkT25seV09XCJvcGVuZWRGcm9tID09PSAnUklTS19UUkVBVE1FTlQnXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJjIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/LnNsaWNlKDAsIDEpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ3JjJywgcmMpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJvcGVuZWRGcm9tICE9PSAnUklTS19UUkVBVE1FTlQnXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cInJjPy5pdGVtX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgcmM/Lml0ZW1fbmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJjPy5sZW5ndGggPiAxXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwicmNQb3BvdmVyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiIFtjbGFzcy5tb3JlLW9uZV09XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJjPy5sZW5ndGg+MVwiIFtjbGFzcy5wbHVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aD4yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IHJjIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/LnNsaWNlKDAsMilcIj48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLHJjKVwiICpuZ0lmPVwib3BlbmVkRnJvbSAhPT0gJ1JJU0tfVFJFQVRNRU5UJ1wiPiYjeGU5MGQ7PC9pPnt7cmM/Lml0ZW1fbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yYz8ubGVuZ3RoID4gMlwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyYy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7cmVzcG9uc2liaWxpdHlGb3JtPy5yYz8uc2xpY2UoMikubGVuZ3RofX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3JjJyAmJiBvcGVuZWRGcm9tICE9PSAnUklTS19UUkVBVE1FTlQnXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXBwLXBvcG92ZXIgI3JjUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yYyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ3JjJywgcmMpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJjLml0ZW1fbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiXG4gICAgICAgICAgICBpc1Jlc3BvbnNpYmlsaXR5UmNMaW5rRW5hYmxlZCAmJlxuICAgICAgICAgICAgKG1vZGUgIT0gJ0VESVQnIHx8IHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA8PSAxKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDwhLS0gPGFwcC1jcy1yYWRpbz48ZGl2IFthcHBUb29sdGlwXT1cIidDcmVhdGUgc2VwYXJhdGUgcmVzcG9uc2liaWxpdGllcyBmb3IgZWFjaCByZXNwb25zaWJpbGl0eSBjZW50ZXInXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+Q1JFQVRFIFNFUEFSQVRFIFJFU1BPTlNJQklMSVRJRVMgRk9SIEVBQ0ggUkVTUE9OU0lCSUxJVFkgQ0VO4oCmPC9kaXY+PGkgY2xhc3M9XCJpY29uc1wiIFthcHBUb29sdGlwXT1cIidJZiBzZWxlY3RlZCwgc2VwYXJhdGUgcmVzcG9uc2liaWxpdGllcyB3aWxsIGJlIGNyZWF0ZWQgZm9yIGVhY2ggUmVzcG9uc2liaWxpdHkgQ2VudGVyLidcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiB0eXBlPVwid2hpdGVcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+PC9hcHAtY3MtcmFkaW8+IC0tPlxuICAgICAgICAgIDxhcHAtY3MtcmFkaW8gW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgIG1vZGUgPT0gJ0VESVQnICYmXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLnJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gMSAmJlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDFcbiAgICAgICAgXCIgW2NoZWNrZWRdPVwicmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID09PSAxXCIgW25hbWVdPVwiJ2ZmX3Jlc3BvbnNpYmlsaXR5X3JjX2xpbmsnXCJcbiAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwib25SY1R5cGVDaGFuZ2UoMSlcIj5ESVNQTEFZIFRIRSBTQU1FIFJFU1BPTlNJQklMSVRZIElOIEFMTCBSRVNQT05TSUJJTElUWSBDRU5URVJTPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCB0aGUgc2FtZSByZXNwb25zaWJpbGl0eSB3aWxsIGJlIGxpbmtlZCB0byBlYWNoIFJlc3BvbnNpYmlsaXR5IENlbnRlci4nXG4gICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgdHlwZT1cIndoaXRlXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPjwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgIDxhcHAtY3MtcmFkaW8gW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICBtb2RlID09ICdFRElUJyAmJlxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID09PSAxICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgIFwiIFtjaGVja2VkXT1cInJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gMFwiIFtuYW1lXT1cIidmZl9yZXNwb25zaWJpbGl0eV9yY19saW5rJ1wiXG4gICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cIm9uUmNUeXBlQ2hhbmdlKDApXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmMtcmFkaW8tdGV4dFwiIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdDcmVhdGUgc2VwYXJhdGUgcmVzcG9uc2liaWxpdGllcyBmb3IgZWFjaCByZXNwb25zaWJpbGl0eSBjZW50ZXJzJ1xuICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj5cbiAgICAgICAgICAgICAgQ1JFQVRFIFNFUEFSQVRFIFJFU1BPTlNJQklMSVRJRVMgRk9SIEVBQ0ggUkVTUE9OU0lCSUxJVFkgQ0VO4oCmXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAnSWYgc2VsZWN0ZWQsIHNlcGFyYXRlIHJlc3BvbnNpYmlsaXRpZXMgd2lsbCBiZSBjcmVhdGVkIGZvciBlYWNoIFJlc3BvbnNpYmlsaXR5IENlbnRlci4nXG4gICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiIHR5cGU9XCJ3aGl0ZVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIj4mI3hlOTFmOzwvaT5cbiAgICAgICAgICA8L2FwcC1jcy1yYWRpbz5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByb2dyYW0gLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5QUk9HUkFNXCIgW2F0dHIuaWRdPVwiJ1BST0dSQU0nXCJcbiAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncHJvZ3JhbSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwcm9ncmFtJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGggPiAwICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAncHJvZ3JhbSdcbiAgICAgIFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jYXNlX2NhdGVnb3J5XCIgYWx0PVwiXCIgKm5nSWY9XCJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdwcm9ncmFtJykgJiZcbiAgICAgICAgICBhbGxQcm9nYW1TZWxlY3RlZD8ubGVuZ3RoID09IDBcbiAgICAgICAgXCIgLz5cblxuICAgICAgPHN2ZyBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCIgKm5nSWY9XCJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Byb2dyYW0nKSB8fFxuICAgICAgICAgIGFsbFByb2dhbVNlbGVjdGVkPy5sZW5ndGggPiAwXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5Qcm9ncmFtPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwiYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1pbnB1dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwcm9ncmFtJywgdHJ1ZSlcIlxuICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgUHJvZ3JhbSBvciBQcm9ncmFtIENhdGVnb3JpZXMgdGhhdCB0aGlzIHJlc3BvbnNpYmlsaXR5IHJlbGF0ZXMgdG8uXCI+PC9kaXY+XG4gICAgICAgICAgPCEtLSA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncHJvZ3JhbScsdHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSZXNwb25zaWJpbGl0eSBwcm9ncmFtKHMpXCIgcmVhZG9ubHk+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJhbGxQcm9nYW1TZWxlY3RlZD8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAhaGlkZGVuTGlzdD8uaW5jbHVkZXMoJ1BST0dSQU0nKSAmJlxuICAgICAgICAgICAgICAgICAgIXByb2dyYW0/LmlzVmlld09ubHlQcm9ncmFtXG4gICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cInJlbW92ZSgncHJvZ3JhbScsIGFsbFByb2dhbVNlbGVjdGVkWzBdKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImFsbFByb2dhbVNlbGVjdGVkWzBdPy5uYW1lID8/ICctLSdcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBhbGxQcm9nYW1TZWxlY3RlZFswXT8ubmFtZVxuICAgICAgICAgICAgICAgID8/IFwiLS1cIiB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJwcm9ncmFtLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCIgKm5nSWY9XCJhbGxQcm9nYW1TZWxlY3RlZD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgYWxsUHJvZ2FtU2VsZWN0ZWQ/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5sZW5ndGg+MVwiIFtjbGFzcy5wbHVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbT8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiICpuZ0Zvcj1cImxldCBwcm9ncmFtIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucHJvZ3JhbVwiPjxpIGNsYXNzPVwiaWNvbnNcIiAqbmdJZj1cImZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZCgnZmZfZGVwcmVjYXRlX3ByaW1hcnlfcHJvZ3JhbV9mbGFnJylcIiAoY2xpY2spPVwicmVtb3ZlKCdwcm9ncmFtJyxwcm9ncmFtKVwiPiYjeGU5MGQ7PC9pPiB7e3Byb2dyYW0/Lm5hbWU/PyctLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLSAtIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnByb2dyYW0/Lmxlbmd0aCA+IDJcIiBjbGFzcz1cImNvdW50XCIgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cInByb2dyYW0ucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4rIHt7cmVzcG9uc2liaWxpdHlGb3JtPy5wcm9ncmFtPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPiAtIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5saW5rZWRQcm9ncmFtPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJwcm9ncmFtLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+KyB7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ubGlua2VkUHJvZ3JhbT8ubGVuZ3RoIC0gMX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdwcm9ncmFtJyAmJiAhaGlkZGVuTGlzdC5pbmNsdWRlcygnUFJPR1JBTScpXG4gICAgICAgICAgICBcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Byb2dyYW0nLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxhcHAtcG9wb3ZlciAjcHJvZ3JhbSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgcHJvZ3JhbSBvZiBhbGxQcm9nYW1TZWxlY3RlZCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIiBbYXBwVG9vbHRpcF09XCJwcm9ncmFtPy5uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tXCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICFoaWRkZW5MaXN0Py5pbmNsdWRlcygnUFJPR1JBTScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhcHJvZ3JhbT8uaXNWaWV3T25seVByb2dyYW1cbiAgICAgICAgICAgICAgICAgICAgICBcIiBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncHJvZ3JhbScsIHByb2dyYW0pXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IHByb2dyYW0/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmN1c3RvbVRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5jdXN0b21UYWdzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFnPy5uYW1lPy50cmltKClcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+e3tcbiAgICAgICAgICAgICAgICB0YWc/Lm5hbWVcbiAgICAgICAgICAgICAgICB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwidGFnLnZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7eyB0YWc/Lm5hbWUgfX1cIiAvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRm9ybWF0ICYgRXZpZGVuY2UgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5GT1JNQVRFX0VWSURFTkNFXCJcbiAgICBbYXR0ci5pZF09XCInRk9STUFURV9FVklERU5DRSdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnZm9ybWF0ZV9ldmlkZW5jZSdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdmb3JtYXRlX2V2aWRlbmNlJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgPGltZyAqbmdJZj1cIlxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmV2aWRlbmNlUmVxdWlyZWQgPT0gZmFsc2UgJiZcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5mb3JtYXRGaWxlcy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmZvcm1hdEFuZEV2aWRlbmNlLmZvcm1hdExpbmtzPy5sZW5ndGggPT0gMFxuICAgICAgICBcIiBbc3JjXT1cIkFTU0VUUy5mb3JtYXRfZXZpZGVuY2VcIiBhbHQ9XCJpbVwiIC8+XG5cbiAgICAgIDxzdmcgKm5nSWY9XCJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Rm9ybS5mb3JtYXRBbmRFdmlkZW5jZS5ldmlkZW5jZVJlcXVpcmVkIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0RmlsZXMubGVuZ3RoIHx8XG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUZvcm0uZm9ybWF0QW5kRXZpZGVuY2UuZm9ybWF0TGlua3M/Lmxlbmd0aFxuICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGFwcC1mb3JtYXQtYW5kLWV2aWRlbmNlICh1cGRhdGVGaWxlcyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdmb3JtYXRlX2V2aWRlbmNlJywgJGV2ZW50KVwiIFttb2RlXT1cIidyZXNwb25zaWJpbGl0eSdcIlxuICAgICAgICBbZm9ybWF0RXZpZGFuY2VEYXRhXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uZm9ybWF0QW5kRXZpZGVuY2VcIiBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbklkXCI+XG4gICAgICA8L2FwcC1mb3JtYXQtYW5kLWV2aWRlbmNlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFzc2Vzc21lbnQgLS0+XG4gIDxkaXYgKm5nSWY9XCJtb3JlT3B0aW9ucz8uQVNTRVNTTUVOVFwiIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICBbYXR0ci5pZF09XCInQVNTRVNTTUVOVCdcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnaXNBc3Nlc3NtZW50J1wiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2lzQXNzZXNzbWVudCcgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIj5cbiAgICAgIDxpbWcgKm5nSWY9XCIhcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIiBbc3JjXT1cIkFTU0VUUy5hc3Nlc3NtZW50c1wiIGFsdD1cImltXCIgLz5cblxuICAgICAgPHN2ZyAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50X2lkXCIgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5BU1NFU1NNRU5UUzwvbGFiZWw+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIiBjbGFzcz1cInNlbGVjdFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSk7IGlzQXNzZXNzbWVudCA9IHRydWVcbiAgICAgICAgICAgIFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGFuIGFzc2Vzc21lbnQgZm9yIHRoaXMgcmVzcG9uc2liaWxpdHlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoXCIgcmVhZG9ubHkgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRfaWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxuICAgICAgICAgICAgPGkgKm5nSWY9XCJhc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF90eXBlICE9PSAnY29tcGxpYW5jZV9hdWRpdCdcIlxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2Fzc2Vzc21lbnQnLCBjYXRlZ29yeSlcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzXG4gICAgICAgICAgICAgICAgICA/LmFzc2Vzc21lbnRfbmFtZVxuICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzXG4gICAgICAgICAgICAgID8uYXNzZXNzbWVudF9uYW1lXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1sLTEgdngtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAge3sgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5xdWVzdGlvbnMgfX1cbiAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5xdWVzdGlvbnMgPiAxXG4gICAgICAgICAgICAgID8gXCJRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICA6IFwiUXVlc3Rpb25cIlxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYXNzZXNzbWVudERldGFpbHM/LmFzc2Vzc21lbnRfdHlwZSAhPT0gJ2NvbXBsaWFuY2VfYXVkaXQnXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdpc0Fzc2Vzc21lbnQnLCB0cnVlKTsgaXNBc3Nlc3NtZW50ID0gdHJ1ZVxuICAgICAgICAgICAgXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2hlY2twb2ludHMgLS0+XG4gIDwhLS0gKm5nSWY9XCJtb3JlT3B0aW9ucy5jaGVja3BvaW50c1wiIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uQ0hFQ0tQT0lOVFNcIlxuICAgIFthdHRyLmlkXT1cIidDSEVDS1BPSU5UUydcIiBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnICYmXG4gICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICBcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jaGVja3BvaW50c1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5jaGVja3BvaW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnXG4gICAgICAgIFwiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cbiAgICAgICAgICA8IS0tIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzfGpzb259fVxuICAgICAgICAgICAgICAgIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbn19IC0tPlxuXG4gICAgICAgICAgQ2hlY2twb2ludHNcbiAgICAgICAgICA8IS0tIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJyx0cnVlKVwiPisgQWRkIENoZWNrcG9pbnRzPC9idXR0b24+IC0tPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGJ1dHRvbi1zZWNcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uY2hlY2twb2ludHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwiIXJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIiBwbGFjZWhvbGRlcj1cIkFkZCBjaGVja3BvaW50cyBmb3IgdGhpcyByZXNwb25zaWJpbGl0eVwiXG4gICAgICAgICAgICByZWFkb25seSAvPlxuICAgICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cIiFyZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsIHRydWUpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIEFkZCBDaGVja3BvaW50c1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImNoZWNrcG9pbnQ/LmxhYmVsXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgY2hlY2twb2ludD8ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2hlY2twb2ludC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICt7eyByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXIgY2hlY2twb2ludHNcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGg+MVwiIFtjbGFzcy5wbHVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/LnNsaWNlKDAsMSlcIj57e2NoZWNrcG9pbnQ/LmxhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHM/Lmxlbmd0aCA+IDFcIiB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwiY2hlY2twb2ludC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybS5jaGVja3BvaW50cz8ubGVuZ3RoLSAxfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cInRoaXMucmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzPy5sZW5ndGhcIiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dFwiPlxuICAgICAgICA8aSBjbGFzcz1cImljb25zIGFsZXJ0LWljb25cIj4mI3hlOTMwOzwvaT5cbiAgICAgICAgPHNwYW4+WW91IGNhbiBub3cgdXNlIHRoZSBuZXcgPHN0cm9uZz5DaGVja3BvaW50cyA8L3N0cm9uZz5vclxuICAgICAgICAgIDxzdHJvbmc+QXNzZXNzbWVudHM8L3N0cm9uZz4gZmVhdHVyZSBpbnN0ZWFkIG9mIHRoZSBvbGQgY2hlY2twb2ludHNcbiAgICAgICAgICBmdW5jdGlvbmFsaXR5IHRvIGNyZWF0ZSBhbmFseXRpY2FsIHF1ZXN0aW9ucy5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ0blwiIChjbGljayk9XCJvblJlbW92ZUNoZWNrcG9pbnRzKCdjaGVja3BvaW50JylcIj5cbiAgICAgICAgICAgIFJlbW92ZSBDaGVja3BvaW50c1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIHRvIGNvbnRpbnVlLjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFwcC1wb3BvdmVyICNjaGVja3BvaW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgY2hlY2twb2ludD8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTmV3ICBDaGVja3BvaW50cyAtLT5cbiAgPCEtLSAqbmdJZj1cIm1vcmVPcHRpb25zLmNoZWNrcG9pbnRzXCIgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5DSEVDS1BPSU5UU19ORVdcIlxuICAgIFthdHRyLmlkXT1cIidDSEVDS1BPSU5UUy1ORVcnXCIgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzLW5ldydcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5jaGVja3BvaW50c1wiIGFsdD1cImltXCIgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgY2xhc3M9XCJjaGVja0ljb25cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgICpuZ0lmPVwiY2hlY2twb2ludENvdW50ID4gMCAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ2NoZWNrcG9pbnRzJ1wiPlxuICAgICAgICA8Y2lyY2xlIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgPHBhdGggY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCIgZmlsbD1cIm5vbmVcIiBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiIC8+XG4gICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5cbiAgICAgICAgICA8IS0tIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRzfGpzb259fVxuICAgICAgICAgICAgICAgIHt7cmVzcG9uc2liaWxpdHlGb3JtLmNoZWNrcG9pbnRJbnN0cnVjdGlvbn19IC0tPlxuXG4gICAgICAgICAgQ2hlY2twb2ludHNcbiAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiY2hlY2twb2ludC12ZXJzaW9uXCI+IFYyLjA8L3NwYW4+IC0tPlxuICAgICAgICAgIDwhLS0gPGJ1dHRvbiAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cy1uZXcnLHRydWUpXCI+KyBBZGQgQ2hlY2twb2ludHM8L2J1dHRvbj4gLS0+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgYnV0dG9uLXNlY1wiICpuZ0lmPVwiY2hlY2twb2ludENvdW50ID09PSAwXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzLW5ldycsIHRydWUpXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQWRkIGNoZWNrcG9pbnRzIGZvciB0aGlzIHJlc3BvbnNpYmlsaXR5XCIgcmVhZG9ubHkgLz5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cy1uZXcnLCB0cnVlKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgIEFkZCBDaGVja3BvaW50c1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJjaGVja3BvaW50Q291bnQgPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQ2hlY2twb2ludHMoJ25ldy1jaGVja3BvaW50cycpXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPnt7IGNoZWNrcG9pbnRDb3VudCB9fVxuICAgICAgICAgICAgICB7eyBjaGVja3BvaW50Q291bnQgPiAxID8gXCJRdWVzdGlvbnNcIiA6IFwiUXVlc3Rpb25cIiB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNoaXAtY29udGFpbmVyIGNoZWNrcG9pbnRzXCIgW2NsYXNzLm1vcmUtb25lXT1cImNoZWNrcG9pbnRDb3VudCA+IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJvblJlbW92ZUNoZWNrcG9pbnRzKCduZXctY2hlY2twb2ludHMnKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NoZWNrcG9pbnRDb3VudH19IHt7Y2hlY2twb2ludENvdW50ID4gMSA/ICdRdWVzdGlvbnMnOiAnUXVlc3Rpb24nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdjaGVja3BvaW50cy1uZXcnXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMtbmV3JywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGFwcC1wb3BvdmVyICNjaGVja3BvaW50IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY2hlY2twb2ludCBvZiByZXNwb25zaWJpbGl0eUZvcm0uY2hlY2twb2ludHMgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAge3sgY2hlY2twb2ludD8ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmlzayBDbGFzc2lmaWNhdGlvbiAtLT5cbiAgPGRpdiBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCIgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwibW9yZU9wdGlvbnM/LlJJU0tfQ0xBU1NJRklDQVRJT05cIlxuICAgIFthdHRyLmlkXT1cIidSSVNLX0NMQVNTSUZJQ0FUSU9OJ1wiIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyaXNrQ2FsY3VsYXRvcidcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyaXNrQ2FsY3VsYXRvcicgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yaXNrQ2xhc3NcIj5cbiAgICAgIDxzdmcgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJpc2tDbGFzc1wiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgUmlzayBDbGFzc2lmaWNhdGlvblxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jpc2tDYWxjdWxhdG9yJywgdHJ1ZSlcIiBjbGFzcz1cImJ1dHRvblwiPlxuICAgICAgICAgICAgKyBSaXNrIENhbGN1bGF0b3JcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9sYWJlbD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb25cIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsb3dcIiAqbmdGb3I9XCJsZXQgcmlzayBvZiByaXNrQ2xhc3NpZmljYXRpb25cIiBbbmdDbGFzc109XCJbcmlzay5jbGFzc11cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiY2xhc3NpZmljYXRpb25cIiBbKG5nTW9kZWwpXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5yaXNrQ2xhc3NcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwicmlzaz8udmFsdWVcIiAvPlxuICAgICAgICAgICAgPHNwYW4+e3sgcmlzaz8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJldmlld2VyIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uUkVWSUVXRVJcIiBbYXR0ci5pZF09XCInUkVWSUVXRVInXCJcbiAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlckZyZXF1ZW5jeScgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcbiAgICBcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMucmV2aWV3ZXJcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInXG4gICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UmV2aWV3ZXI8L2xhYmVsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgIWZlYXR1cmVGbGFnX2dyb3VwcykgfHxcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUmV2aWV3ZXJcIiByZWFkb25seSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IHJldmlld2VyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5zbGljZSgwLCAxKVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwicmV2aWV3ZXIubWVtYmVyX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyByZXZpZXdlci5tZW1iZXJfbmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJyZXZpZXdlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aD4xXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucGx1c109XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiAqbmdGb3I9XCJsZXQgcmV2aWV3ZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3Q/LnNsaWNlKDAsMilcIj48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmV2aWV3ZXInLHJldmlld2VyKVwiPiYjeGU5MGQ7PC9pPiB7e3Jldmlld2VyLm1lbWJlcl9uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50XCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMlwiIHR5cGU9XCJidXR0b25cIiBhcHBQb3BvdmVyIChjbGljayk9XCJyZXZpZXdlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICByZW1vdmUoJ3Jldmlld2VyJywgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RbMF0pXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZVxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwidXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgICt7eyByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnZ3JvdXBSZXZpZXdlcicsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RbMF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RbMF0/Lmdyb3VwX25hbWVcbiAgICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0WzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cImdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicscmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RbMF0pXCIgPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj48c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwXCI+e3tyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFswXT8uZW1wbG95ZWVfbmFtZX19PC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudCB1c2VyXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwidXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+ICt7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ucmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggLSAxfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdC5sZW5ndGggPiAwICYmIHJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDBcIj4mPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Lmxlbmd0aCA+IDAgXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LW1yLTFcIiAoY2xpY2spPVwicmVtb3ZlKCdncm91cFJldmlld2VyJyxyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0WzBdKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0WzBdPy5ncm91cF9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPjxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDBcIj57e3Jlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RbMF0/Lmdyb3VwX25hbWV9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAxXCIgY2xhc3M9XCJjb3VudFwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cImdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7cmVzcG9uc2liaWxpdHlGb3JtPy5ncm91cFJldmlld2Vycz8ubGlzdD8ubGVuZ3RoIC0gMX19PC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFwcC1jcy1yYWRpbyBbY2hlY2tlZF09XCJyZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvd1wiIFtuYW1lXT1cIidyZXZpZXdlcidcIlxuICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwib25SZXZpZXdlcldvcmtmbG93Q2hhbmdlKCdzZXF1ZW50aWFsJylcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0Py5sZW5ndGggPiAwXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgU0VRVUVOVElBTDxpIGNsYXNzPVwiaWNvbnNcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgJ1RoZSByZXNwb25zaWJpbGl0eSB3aWxsIGJlIHNlbnQgZm9yIHJldmlldyBvbmUgYXQgYSB0aW1lIGluIHRoZSBzZXF1ZW5jZSBkZWZpbmVkIGJ5IHlvdS4nXG4gICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIiBkZWxheT1cIjBcIiB0eXBlPVwid2hpdGVcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCI+JiN4ZTkxZjs8L2k+XG4gICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICA8YXBwLWNzLXJhZGlvIFtjaGVja2VkXT1cIiFyZXNwb25zaWJpbGl0eUZvcm0ucmV2aWV3ZXJzLnNlcXVlbnRpYWxXb3JrZmxvd1wiIFtuYW1lXT1cIidyZXZpZXdlcidcIlxuICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwib25SZXZpZXdlcldvcmtmbG93Q2hhbmdlKCdhbnlSZXZpZXdlcicpXCI+XG4gICAgICAgICAgQU5ZIFJFVklFV0VSIENBTiBNQVJLIFRISVMgQVMgUkVWSUVXRUQ8aSBjbGFzcz1cImljb25zXCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICdUaGUgcmVzcG9uc2liaWxpdHkgd2lsbCBiZSBzZW50IGZvciByZXZpZXcgdG8gYWxsIHJldmlld2VycyBhdCB0aGUgc2FtZSB0aW1lLiBJZiBhbnlvbmUgb2YgdGhlIHJldmlld2VyIHJldmlld3MgdGhlIHJlc3BvbnNpYmlsaXR5LCBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgcmV2aWV3ZWQuJ1xuICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCIgZGVsYXk9XCIwXCIgdHlwZT1cIndoaXRlXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiPiYjeGU5MWY7PC9pPlxuICAgICAgICA8L2FwcC1jcy1yYWRpbz5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNyZXZpZXdlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgcmV2aWV3ZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdyZXZpZXdlcicsIHJldmlld2VyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyByZXZpZXdlci5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICN1c2VyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCByZXZpZXdlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IHJldmlld2VyLm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8YXBwLXBvcG92ZXIgI2dyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lmdyb3VwUmV2aWV3ZXJzPy5saXN0XG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnZ3JvdXBSZXZpZXdlcicsIGdyb3VwKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gT3ZlcnNlZXIgLS0+XG4gIDxkaXYgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIiAqbmdJZj1cIm1vcmVPcHRpb25zPy5PVkVSU0VFUlwiIFthdHRyLmlkXT1cIidPVkVSU0VFUidcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyJ1xuICAgIFwiIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAhWydvdmVyc2Vlck5vdGlmeScsICdvdmVyc2Vlck5vdGlmeSddLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKSAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5vdmVyc2lnaHRcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPT0gMCkgfHxcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnb3ZlcnNlZXInXG4gICAgICAgIFwiIC8+XG4gICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tJY29uXCIgKm5nSWY9XCJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyJ1xuICAgICAgICAgIClcbiAgICAgICAgXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+T3ZlcnNpZ2h0PC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwiXG4gICAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgICFmZWF0dXJlRmxhZ19ncm91cHMpIHx8XG4gICAgICAgICAgICAocmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBmZWF0dXJlRmxhZ19ncm91cHMpXG4gICAgICAgICAgXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ292ZXJzZWVyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoZSByZXNwb25zaWJpbGl0eT9cIiByZWFkb25seSAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8uc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2VlcicsIG92ZXJzZWVyKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cIm92ZXJzZWVyLm1lbWJlcl9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgb3ZlcnNlZXIubWVtYmVyX25hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiIFtjbGFzcy5tb3JlLW9uZV09XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoPjFcIiBbY2xhc3MucGx1c109XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoPjJcIiAqbmdJZj1cIiFmZWF0dXJlRmxhZ19ncm91cHNcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IG92ZXJzZWVyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Py5zbGljZSgwLDIpXCI+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyJyxvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT4ge3tvdmVyc2Vlci5tZW1iZXJfbmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDJcIiB0eXBlPVwiYnV0dG9uXCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJzLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCI+K3t7cmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/LnNsaWNlKDIpLmxlbmd0aH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiICpuZ0lmPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3QubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZSgnb3ZlcnNlZXInLCByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdFswXSlcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2VlclVzZXIucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3Q/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj4mPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnb3ZlcnNlZXJHcm91cCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0WzBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdFswXS5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3RbMF0uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiICpuZ0lmPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Lmxlbmd0aCA+IDBcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyJyxyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdFswXSlcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgW2FwcFRvb2x0aXBdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+PHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMFwiPnt7cmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RbMF0/LmVtcGxveWVlX25hbWV9fTwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdD8ubGVuZ3RoID4gMVwiIGNsYXNzPVwiY291bnQgdXNlclwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm92ZXJzZWVyVXNlci5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCI+ICt7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5saXN0Py5sZW5ndGggLTF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubGlzdC5sZW5ndGggPiAwICYmIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwXCIgPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggPiAwIFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgnb3ZlcnNlZXJHcm91cCcscmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3RbMF0pXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0WzBdLmdyb3VwX25hbWVcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIHR5cGU9XCJibGFja1wiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+PHNwYW4gY2xhc3M9XCJ2eC1mcy0xMSB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWZ3LTUwMFwiICA+e3tyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdFswXS5ncm91cF9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lmxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwib3ZlcnNlZXJHcm91cC5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0Py5sZW5ndGggLTF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ292ZXJzZWVyJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ292ZXJzZWVyJywgdHJ1ZSlcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgIWZlYXR1cmVGbGFnX2dyb3VwcykgfHxcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIGZlYXR1cmVGbGFnX2dyb3VwcylcbiAgICAgICAgICBcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3ZlcnNlZXJOb3RpZnknLCB0cnVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHJlc3BvbnNpYmlsaXR5IGlzIG5vdCBjb21wbGV0Li4uXCIgcmVhZG9ubHkgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICdXaG8gc2hvdWxkIGJlIG5vdGlmaWVkIGlmIHRoZSByZXNwb25zaWJpbGl0eSBpcyBub3QgY29tcGxldGVkPydcbiAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbVwiIGRlbGF5PVwiMFwiIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJcbiAgICAgICAgICAgIChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhZmVhdHVyZUZsYWdfZ3JvdXBzKSB8fFxuICAgICAgICAgICAgKChyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgICAgZmVhdHVyZUZsYWdfZ3JvdXBzKVxuICAgICAgICAgIFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdD8uc2xpY2UoXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2Vlck5vdGlmeUxpc3QnLCBvdmVyc2VlcilcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJvdmVyc2Vlci5tZW1iZXJfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7IG92ZXJzZWVyLm1lbWJlcl9uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm5vdGlmeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aD4xXCIgW2NsYXNzLnBsdXNdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aD4yXCIgKm5nSWY9XCIhZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IG92ZXJzZWVyIG9mIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5zbGljZSgwLDIpXCI+PGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyTm90aWZ5TGlzdCcsb3ZlcnNlZXIpXCI+JiN4ZTkwZDs8L2k+IHt7b3ZlcnNlZXIubWVtYmVyX25hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY291bnRcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm5vdGlmeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPit7e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAnb3ZlcnNlZXJOb3RpZnlMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RbMF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIiBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0WzBdPy5lbXBsb3llZV9uYW1lXG4gICAgICAgICAgICAgICAgXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiBkZWxheT1cIjBcIiB0eXBlPVwiYmxhY2tcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPnt7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJub3RpZnlVc2VyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgK3t7IHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0Py5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgXCI+Jjwvc3Bhbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICByZW1vdmUoXG4gICAgICAgICAgICAgICAgICAgICdvdmVyc2Vlckdyb3VwTm90aWZ5TGlzdCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXCI+JiN4ZTlhZTs8L2k+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdFswXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgIFwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57e1xuICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdPy5ncm91cF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXIgKGNsaWNrKT1cIm5vdGlmeUdyb3VwLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cInJpZ2h0XCIgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgK3t7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiAqbmdJZj1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWlubmVyXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtbXItMVwiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyTm90aWZ5TGlzdCcscmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RbMF0pXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiIFthcHBUb29sdGlwXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0WzBdPy5lbXBsb3llZV9uYW1lXCIgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIiB0eXBlPVwiYmxhY2tcIiBkZWxheT1cIjBcIiBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiPjxzcGFuIGNsYXNzPVwidngtZnMtMTEgdngtcGFyYWdyYXBoLXR4dCB2eC1mdy01MDBcIj57e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzPy5ub3RpZnlMaXN0WzBdPy5lbXBsb3llZV9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50IHVzZXJcIiBhcHBQb3BvdmVyIChjbGljayk9XCJub3RpZnlVc2VyLnBvcG92ZXIoKVwiIHBsYWNlbWVudD1cImxlZnRcIj4gK3t7cmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCAtIDF9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIiAgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdC5sZW5ndGggPiAwICYmIHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwXCIgPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXAtaW5uZXJcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0Py5sZW5ndGggPiAwIFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1tci0xXCIgKGNsaWNrKT1cInJlbW92ZSgnb3ZlcnNlZXJHcm91cE5vdGlmeUxpc3QnLHJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIiBbYXBwVG9vbHRpcF09XCJyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdFswXT8uZ3JvdXBfbmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCIgdHlwZT1cImJsYWNrXCIgZGVsYXk9XCIwXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj48c3BhbiBjbGFzcz1cInZ4LWZzLTExIHZ4LXBhcmFncmFwaC10eHQgdngtZnctNTAwXCIgID57e3Jlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5ub3RpZnlMaXN0WzBdPy5ncm91cF9uYW1lfX08L3NwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3Q/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImNvdW50XCIgYXBwUG9wb3ZlciAoY2xpY2spPVwibm90aWZ5R3JvdXAucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIj4re3tyZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdD8ubGVuZ3RoIC0gMX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnb3ZlcnNlZXJOb3RpZnknXCIgY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3ZlcnNlZXJOb3RpZnknLCB0cnVlKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVycyBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2VlcicsIG92ZXJzZWVyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJVc2VyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlcnMgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lmxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2VlcicsIG92ZXJzZWVycylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXJzPy5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPGFwcC1wb3BvdmVyICNvdmVyc2Vlckdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyR3JvdXAnLCBvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/Lmdyb3VwX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjbm90aWZ5IFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBvdmVyc2VlciBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVycz8ubm90aWZ5TGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyTm90aWZ5TGlzdCcsIG92ZXJzZWVyKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjbm90aWZ5VXNlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnM/Lm5vdGlmeUxpc3RcbiAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdvdmVyc2Vlck5vdGlmeUxpc3QnLCBvdmVyc2VlcilcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAge3sgb3ZlcnNlZXI/Lm1lbWJlcl9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICA8YXBwLXBvcG92ZXIgI25vdGlmeUdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBncm91cCBvZiByZXNwb25zaWJpbGl0eUZvcm0/Lm92ZXJzZWVyc0dyb3Vwcz8ubm90aWZ5TGlzdFxuICAgICAgICAgICAgICAgICAgICB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcbiAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ292ZXJzZWVyR3JvdXBOb3RpZnlMaXN0JywgZ3JvdXApXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwPy5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXNzdXJhbmNlIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgKm5nSWY9XCJtb3JlT3B0aW9ucz8uQVNTVVJBTkNFXCIgW2F0dHIuaWRdPVwiJ0FTU1VSQU5DRSdcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3N1cmFuY2UnXCIgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzdXJhbmNlJyAmJlxuICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgXCI+XG4gICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgPGltZyBbc3JjXT1cIkFTU0VUUy5yZXZpZXdlclwiIGFsdD1cIlwiICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXNzdXJhbmNlJ1xuICAgICAgICBcIiAvPlxuXG4gICAgICA8c3ZnICpuZ0lmPVwiXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwICYmXG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3N1cmFuY2UnXG4gICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QXNzdXJhbmNlPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPT0gMFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20taW5wdXRcIiAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignYXNzdXJhbmNlJywgdHJ1ZSlcIlxuICAgICAgICAgICAgYXJpYS1wbGFjZWhvbGRlcj1cIlNlbGVjdCB0aGUgdGVzdCBwbGFuIGNhdGVnb3JpZXMgdGhhdCB5b3Ugd291bGQgbGlrZSB0byBhZGQgdGhpcyByZXNwb25zaWJpbGl0eSB0by5cIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGFzc3VyYW5jZSBvZiByZXNwb25zaWJpbGl0eUZvcm0/LmFzc3VyYW5jZUxpc3Q/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYXNzdXJhbmNlJywgYXNzdXJhbmNlKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImFzc3VyYW5jZS5jYXRlZ29yeV9uYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3sgYXNzdXJhbmNlLmNhdGVnb3J5X25hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJhc3N1cmFuY2UucG9wb3ZlcigpXCIgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzdXJhbmNlTGlzdD8ubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAre3sgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0Py5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzdXJhbmNlJ1wiIGNsYXNzPVwiZWRpdFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2Fzc3VyYW5jZScsIHRydWUpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhcHAtcG9wb3ZlciAjYXNzdXJhbmNlIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBhc3N1cmFuY2Ugb2YgcmVzcG9uc2liaWxpdHlGb3JtPy5hc3N1cmFuY2VMaXN0XG4gICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXNzdXJhbmNlJywgYXNzdXJhbmNlKVwiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICB7eyBhc3N1cmFuY2UuY2F0ZWdvcnlfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFJlcXVpcmVzIEF1ZGl0IC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAqbmdJZj1cIm1vcmVPcHRpb25zPy5SRVFVSVJFU19BVURJVCAmJiByZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID4gMFwiIFthdHRyLmlkXT1cIidSRVFVSVJFU19BVURJVCdcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXF1aXJlc19hdWRpdCdcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXF1aXJlc19hdWRpdCcgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuYXVkaXRcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXF1aXJlc19hdWRpdCdcbiAgICAgICAgXCIgLz5cblxuICAgICAgPHN2ZyAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3JlcXVpcmVzX2F1ZGl0J1xuICAgICAgICBcIiBjbGFzcz1cImNoZWNrSWNvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDUyIDUyXCI+XG4gICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiIGN4PVwiMjZcIiBjeT1cIjI2XCIgcj1cIjI1XCIgZmlsbD1cIm5vbmVcIiAvPlxuICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIiBmaWxsPVwibm9uZVwiIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJFUVVJUkVTIEFVRElUPzwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RcIiAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJJZiB5ZXMsIHNlbGVjdCBhbiBBdWRpdCBDYXRlZ29yeS5cIiByZWFkb25seVxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3JlcXVpcmVzX2F1ZGl0JywgdHJ1ZSlcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkXCIgKm5nSWY9XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJlcXVpcmVzQXVkaXRMaXN0Py5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmVxdWlyZXNfYXVkaXQnLCBvdmVyc2VlcilcIj4mI3hlOWFlOzwvaT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCIgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXF1aXJlc0F1ZGl0TGlzdFswXT8uY2F0ZWdvcnlfbmFtZVxuICAgICAgICAgICAgICBcIiBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiIGRlbGF5PVwiMFwiIHR5cGU9XCJibGFja1wiIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCI+e3tcbiAgICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXF1aXJlc0F1ZGl0TGlzdFswXT8uY2F0ZWdvcnlfbmFtZVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXF1aXJlc19hdWRpdCcsIHRydWUpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwYzs8L2k+IEVkaXRcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8IS0tIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICBFZGl0PC9idXR0b24+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ucmVxdWlyZXNBdWRpdExpc3Q/Lmxlbmd0aFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtOFwiPlxuICAgICAgICAgICAgU0FNUExFIFNJWkVcbiAgICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoIFsobmdWYWx1ZSldPVwiaXNTYW1wbGVcIiAobmdWYWx1ZUNoYW5nZSk9XCJzd2l0Y2hFbmFibGUoJGV2ZW50KVwiPjwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYW1wbGUtcGFydFwiIFtjbGFzcy5kaXNhYmxlZF09XCIhaXNTYW1wbGVcIj5cbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gdmFsdWU9XCIwXCIgY2xhc3M9XCJzYW1wbGUtcmFkaW9cIiAoY2xpY2spPVwic2VsZWN0ZWRTYW1wbGVEYXRhKDApXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRTYW1wbGUgPT09IDBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5DT1VOVDwvZGl2PlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIHBsYWNlaG9sZGVyPVwiLS1cIiAoa2V5cHJlc3MpPVwiY2hlY2tJbnB1dFZhbHVlKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNhbXBsZVZhbHVlXCIgLz5cbiAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yXCI+T1I8L2Rpdj5cbiAgICAgICAgICAgIDxhcHAtY3MtcmFkaW8gdmFsdWU9XCIxXCIgY2xhc3M9XCJzYW1wbGUtcmFkaW9cIiAoY2xpY2spPVwic2VsZWN0ZWRTYW1wbGVEYXRhKDEpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwic2VsZWN0ZWRTYW1wbGUgPT09IDFcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5QRVJDRU5UQUdFPC9kaXY+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgKGtleXByZXNzKT1cImNoZWNrSW5wdXRWYWx1ZSgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzYW1wbGVQZXJjZW50YWdlXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tXCIgLz5cbiAgICAgICAgICAgIDwvYXBwLWNzLXJhZGlvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWwgdngtbXQtOFwiPlNFVCBBIFJFTUlOREVSIElGIFRIRSBBVURJVCBQTEFOIElTIE5PVCBDUkVBVEVELjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJlbWluZGVyLXBhcnRcIj5cbiAgICAgICAgICAgIFNlbmQgcmVtaW5kZXIgZXZlcnlcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgdmFsdWU9XCIyXCIgWyhuZ01vZGVsKV09XCJzZW5kQXVkaXRSZW1pbmRlcnNWYWx1ZVwiIC8+XG4gICAgICAgICAgICBEYXkgYnlcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZXItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGltZVwiIGFyaWEtbGFiZWw9XCIxMmhyIGZvcm1hdFwiIFsobmdNb2RlbCldPVwiYXVkaXRUaW1lXCIgW25neFRpbWVwaWNrZXJdPVwiZGFpbHlUaW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImF1ZGl0VGltZS50b1VwcGVyQ2FzZSgpXCIgdHlwZT1cInRleHRcIiBbbWluXT1cImN1cnJlbnRUaW1lXCIgcmVhZG9ubHkgLz5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5NTU7PC9pPlxuICAgICAgICAgICAgICA8bmd4LW1hdGVyaWFsLXRpbWVwaWNrZXIgI2RhaWx5VGltZSBbZGVmYXVsdFRpbWVdPVwiYXVkaXRUaW1lXCI+XG4gICAgICAgICAgICAgIDwvbmd4LW1hdGVyaWFsLXRpbWVwaWNrZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBMaW5rIG9mIEdSQyBvYmplY3RzIC0tPlxuICA8ZGl2IFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAqbmdJZj1cIm1vcmVPcHRpb25zPy5HUkNfT0JKRUNUUyAmJiByZXNwb25zaWJpbGl0eUZvcm0ucmMubGVuZ3RoID4gMFwiIFthdHRyLmlkXT1cIidHUkNfT0JKRUNUUydcIlxuICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdHUkNfT0JKRUNUUydcIiBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdHUkNfT0JKRUNUUycgJiZcbiAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgIFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgIDxpbWcgW3NyY109XCJBU1NFVFMuYXVkaXRcIiBhbHQ9XCJcIiAqbmdJZj1cIlxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnR1JDX09CSkVDVFMnXG4gICAgICAgIFwiIC8+XG5cbiAgICAgIDxzdmcgKm5nSWY9XCJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUZvcm0/LnNlbGVjdGVkR1JDT2JqZWN0cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnR1JDX09CSkVDVFMnXG4gICAgICAgIFwiIGNsYXNzPVwiY2hlY2tJY29uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTIgNTJcIj5cbiAgICAgICAgPGNpcmNsZSBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCIgY3g9XCIyNlwiIGN5PVwiMjZcIiByPVwiMjVcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgIDxwYXRoIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+TElOSyBHUkMgT0JKRUNUKFMpPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicmVzcG9uc2liaWxpdHlGb3JtPy5zZWxlY3RlZEdSQ09iamVjdHM/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEdSQyBvYmplY3QocykgdG8gbGluayB3aXRoIHRoaXMgcmVzcG9uc2liaWxpdHlcIiByZWFkb25seVxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ0dSQ19PQkpFQ1RTJywgdHJ1ZSlcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uc2VsZWN0ZWRHUkNPYmplY3RzPy5sZW5ndGhcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3RlZEdSQyBvZiBHUkNfVFlQRV9BUlJBWTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyY0RhdGFXaXRoVHlwZXNbc2VsZWN0ZWRHUkNdPy5sZW5ndGhcIiBjbGFzcz1cInNlbGVjdGVkIHZ4LW1iLTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncmMgb2YgZ3JjRGF0YVdpdGhUeXBlc1tzZWxlY3RlZEdSQ10/LnNsaWNlKDAsIDEpXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ0dSQ19PQkpFQ1RTJywgZ3JjLCAwKVwiPiYjeGU5YWU7PC9pPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgc2VsZWN0ZWRHUkMgfCB0aXRsZWNhc2UgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiIFthcHBUb29sdGlwXT1cImdyYz8ubmFtZVwiIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCIgdHlwZT1cImJsYWNrXCIgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIj57eyBncmM/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlciAoY2xpY2spPVwicG9wb3ZlckdSQy5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JjRGF0YVdpdGhUeXBlc1tzZWxlY3RlZEdSQ10/Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICAgICt7eyBncmNEYXRhV2l0aFR5cGVzW3NlbGVjdGVkR1JDXS5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ0dSQydcIiBjbGFzcz1cImVkaXRcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRHUkNUYWIgPSBncmNEYXRhV2l0aFR5cGVzW3NlbGVjdGVkR1JDXVswXT8udHlwZTtcbiAgICAgICAgICAgICAgICAgIGdldE90aGVyR1JDT2JqZWN0cygpO1xuICAgICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignR1JDX09CSkVDVFMnLCB0cnVlKVxuICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb3BvdmVyR1JDIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3JjIG9mIGdyY0RhdGFXaXRoVHlwZXNbc2VsZWN0ZWRHUkNdIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdHUkNfT0JKRUNUUycsIGdyYywgaiArIDEpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBncmMubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGFwcC11c2Vycy1yYWRpby1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25vcnMnXCIgW3VzZXJzTGlzdF09XCJhc3NpZ25vcnNMaXN0XCJcbiAgW3NlbGVjdGVkVXNlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbm9ycy5saXN0XCIgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxuICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2Fzc2lnbm9ycycsICRldmVudClcIlxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCIgW2xvYWRlZF09XCJhc3NpZ25vcnNMaXN0TG9hZGVkXCI+XG48L2FwcC11c2Vycy1yYWRpby1saXN0PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnXCI+XG4gIDxhcHAtZ3JvdXAtdXNlcnMtbGlzdCAqbmdJZj1cIlxuICAgICAgaXNFbnRydXN0IHx8IHJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVzPy53aG9DYW5Db21wbGV0ZSA9PT0gJ0FOWV9PTkUnXG4gICAgXCIgW29wZW5lZEZyb21dPVwib3BlbmVkRnJvbVwiIFt1c2Vyc0xpc3RdPVwiYXNzaWduZWVzTGlzdFwiIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ0Fzc2lnbmVlJ1wiIFtncm91cHNMaXN0XT1cImdyb3Vwc0xpc3RcIlxuICAgIFthc3NpZ25lZUdyb3Vwc0xpc3RdPVwiZ3JvdXBBc3NpZ25lZUxpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0/LmFzc2lnbmVlcz8ubGlzdFwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzaWduZWVHcm91cHM/Lmxpc3RcIiBbdXNlcklkS2V5XT1cIidteV9tZW1iZXJfaWQnXCIgW2dyb3VwSWRLZXldPVwiJ2dyb3VwX2lkJ1wiXG4gICAgW2xvYWRlcl09XCJ1c2VyTGlzdExvYWRlciB8fCBhc3NpZ25vcnNMaXN0TG9hZGVyXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiIFtncm91cHNFbmFibGVkXT1cImZlYXR1cmVGbGFnX2dyb3Vwc1wiPlxuICA8L2FwcC1ncm91cC11c2Vycy1saXN0PlxuICA8YXBwLXVzZXJzLXJhZGlvLWxpc3QgKm5nSWY9XCJcbiAgICAgICFpc0VudHJ1c3QgJiYgcmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy53aG9DYW5Db21wbGV0ZSAhPT0gJ0FOWV9PTkUnXG4gICAgXCIgW2l0ZW1FbWFpbEtleV09XCInZW1wbG95ZWVfZW1haWwnXCIgW3VzZXJzTGlzdF09XCJhc3NpZ25lZXNMaXN0XCIgW3NlbGVjdGVkVXNlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLmFzc2lnbmVlcy5saXN0XCJcbiAgICBbdXNlcklkS2V5XT1cIidlbXBsb3llZV9pZCdcIiBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCIgW2Zyb21SZXNwb25zaWJpbGl0eV09XCInQXNzaWduZWUnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCIgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4gICAgW2xvYWRlZF09XCJhc3NpZ25lZXNMaXN0TG9hZGVkXCI+XG4gIDwvYXBwLXVzZXJzLXJhZGlvLWxpc3Q+XG48L25nLWNvbnRhaW5lcj5cblxuPGFwcC1jaGVja3BvaW50cyAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2hlY2twb2ludHMnXCJcbiAgW2NoZWNrcG9pbnRJbnN0cnVjdGlvbl09XCJyZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRJbnN0cnVjdGlvblwiIFtjaGVja3BvaW50RGF0YV09XCJyZXNwb25zaWJpbGl0eUZvcm0/LmNoZWNrcG9pbnRzXCJcbiAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NoZWNrcG9pbnRzJywgJGV2ZW50KVwiIChjbG9zZUNoZWNrUG9pbnQpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCI+PC9hcHAtY2hlY2twb2ludHM+XG48YXBwLWZyZXF1ZW5jeS1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2ZyZXF1ZW5jeSdcIiBbZnJlcXVlbmN5RGV0YWlsc109XCJmcmVxdWVuY3lEZXRhaWxzXCJcbiAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiIFtvbkNvbXBsZXRpb25SZXNwb25zaWJpbGl0eV09XCJyZXNwb25zaWJpbGl0eURldGFpbHM/Lm9uQ29tcGxldGlvblJlc3BvbnNpYmlsaXR5XCJcbiAgKHNlbGVjdGVkRnJlcXVlbmN5KT1cImZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiIFttb2RlXT1cIidyZXNwb25zaWJpbGl0eSdcIiAoY2xvc2VGcmVxdWVuY3kpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCI+XG48L2FwcC1mcmVxdWVuY3ktY29udGFpbmVyPlxuXG48YXBwLXJlc3BvbnNpYmlsaXR5LWNlbnRlcnMtbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCIgW2xvYWRlZF09XCJyY0xpc3RMb2FkZWRcIlxuICBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyZXNwb25zaWJpbGl0eUNlbnRlcnNMaXN0XCIgW3JhZGlvU2VsZWN0aW9uXT1cIlxuICAgIG1vZGUgPT0gJ0VESVQnICYmIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZSA9PT0gMCA/IHRydWUgOiBmYWxzZVxuICBcIiBbc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLnJjXCIgW3JjSWRLZXldPVwiJ2l0ZW1faWQnXCJcbiAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmMnLCAkZXZlbnQpXCIgKGNsb3NlUmNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiPlxuPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxuXG48YXBwLWNhdGVnb3J5LW11bHRpLXNlbGVjdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnY2F0ZWdvcnknXCIgW2NhdGVnb3J5TGlzdF09XCJjYXRlZ29yaWVzXCJcbiAgW2FsbENhdGVnb3JpZXNdPVwiYWxsQ2F0ZWdvcmllc1wiIFtjYXRlZ29yeUlkS2V5XT1cIidjYXRlZ29yeV9pZCdcIiBbc2VsZWN0ZWRDYXRlZ29yaWVzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5jYXRlZ29yeVwiXG4gIChzYXZlU2VsZWN0ZWRDYXRlZ29yeSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjYXRlZ29yeScsICRldmVudClcIiAoY2xvc2VDYXRlZ29yaWVzTGlzdCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIj5cbjwvYXBwLWNhdGVnb3J5LW11bHRpLXNlbGVjdD5cblxuPCEtLSBQcm9ncmFtIExpc3QgUG9wdXAgLS0+XG48YXBwLWxpc3QtY29udGFpbmVyICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwcm9ncmFtJ1wiIChjbG9zZSk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIj5cbiAgPGFwcC1wcm9ncmFtLWxpc3QgYm9keSAoaXRlbXNTZWxlY3RlZENoYW5nZSk9XCJvbkl0ZW1zU2VsZWN0ZWRDaGFuZ2UoJGV2ZW50KVwiIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkUHJvZ3JhbXNcIlxuICAgIFt1cmxdPVwicHJvZ3JhbUxpc3RVcmxcIj48L2FwcC1wcm9ncmFtLWxpc3Q+XG4gIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC13LTEwMFwiIGZvb3Rlcj5cbiAgICA8ZGl2IGNsYXNzPVwibGVmdC1zaWRlIHZ4LWZzLTEyIHZ4LWQtZmxleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbFByb2dhbVNlbGVjdGVkLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQtY291bnQtYm94IHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIj5cbiAgICAgICAgICB7eyBhbGxQcm9nYW1TZWxlY3RlZC5sZW5ndGggfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWQtdGV4dFwiPlxuICAgICAgICAgIFByb2dyYW1cbiAgICAgICAgICB7eyBhbGxQcm9nYW1TZWxlY3RlZC5sZW5ndGggPiAxID8gXCJDYXRlZ29yaWVzXCIgOiBcIkNhdGVnb3J5XCIgfX1cbiAgICAgICAgICBTZWxlY3RlZDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1zaWRlIHZ4LWQtZmxleFwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbEJ0blwiIChjbGljayk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJuZXh0QnRuXCIgKGNsaWNrKT1cImFjdGl2ZURlc2VsZWN0b3IoKTsgc2VsZWN0Q2F0ZWdvcnkoKVwiPlxuICAgICAgICBOZXh0IDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFlOzwvaT5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvYXBwLWxpc3QtY29udGFpbmVyPlxuXG48YXBwLW93bmVyLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJyAmJiAhZmVhdHVyZUZsYWdfZ3JvdXBzXCIgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgYSBSZXZpZXdlcidcIlxuICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbdXNlcnNMaXN0XT1cImFsbFVzZXJzTGlzdFwiIFtzaG93V29ya2Zsb3ddPVwidHJ1ZVwiXG4gIFtzZWxlY3RlZFVzZXJzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMubGlzdFwiIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiIFtpdGVtRW1haWxLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiXG4gIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCIgKHNhdmVTZWxlY3RlZExpc3QpPVwiXG4gICAgc2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXInLCAkZXZlbnQpO1xuICAgIGFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcbiAgXCIgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiIFttb2RlXT1cIm1vZGVcIiBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidSZXZpZXdlcidcIiBbcmV2aWV3ZXJXb3JrZmxvd1R5cGVdPVwiXG4gICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/LnNlcXVlbnRpYWxXb3JrZmxvd1xuICAgICAgPyAnU0VRVUVOVElBTCdcbiAgICAgIDogJ0FOWSBSRVZJRVdFUiBDQU4gTUFSSyBUSElTIEFTIFJFVklFV0VEJ1xuICBcIiAocmV2aWV3ZXJXb3JrZmxvd1R5cGVDaGFuZ2UpPVwicmV2aWV3ZXJUeXBlQ2hhbmdlKCRldmVudClcIj5cbjwvYXBwLW93bmVyLWxpc3Q+XG48dXNlci1ncm91cC1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcicgJiYgZmVhdHVyZUZsYWdfZ3JvdXBzXCIgW3NlbGVjdGVkUmV2aWV3ZXJdPVwidHJ1ZVwiXG4gIFt1c2VybGlzdF09XCJyZXZpZXdlck1lbWJlcklkc0xpc3RcIiBbZ3JvdXBFbmFibGVkXT1cInRydWVcIiBbZ3JvdXBMaXN0XT1cImdyb3VwUmV2aWV3ZXJMaXN0XCJcbiAgW3NlbGVjdGVkR3JvdXBzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uZ3JvdXBSZXZpZXdlcnM/Lmxpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0/LnJldmlld2Vycz8ubGlzdFwiXG4gIChjYW5jZWwpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCIgKHNhdmUpPVwiXG4gICAgc2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3ZXInLCAkZXZlbnQpO1xuICAgIGFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcbiAgXCIgW21vZGVdPVwibW9kZVwiIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ1Jldmlld2VyJ1wiIFtsb2FkaW5nXT1cInVzZXJMaXN0TG9hZGVyIHx8IGFzc2lnbm9yc0xpc3RMb2FkZXJcIlxuICAocmV2aWV3ZXJXb3JrZmxvd1R5cGVDaGFuZ2UpPVwicmV2aWV3ZXJUeXBlQ2hhbmdlKCRldmVudClcIiBbcmV2aWV3ZXJXb3JrZmxvd1R5cGVdPVwiXG4gICAgcmVzcG9uc2liaWxpdHlGb3JtPy5yZXZpZXdlcnM/LnNlcXVlbnRpYWxXb3JrZmxvd1xuICAgICAgPyAnU0VRVUVOVElBTCdcbiAgICAgIDogJ0FOWSBSRVZJRVdFUiBDQU4gTUFSSyBUSElTIEFTIFJFVklFV0VEJ1xuICBcIiBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG48L3VzZXItZ3JvdXAtbGlzdD5cbjxhcHAtb3duZXItbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3ZlcnNlZXInICYmICFmZWF0dXJlRmxhZ19ncm91cHNcIiBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiXG4gIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIiBbdXNlcnNMaXN0XT1cImFsbFVzZXJzTGlzdFwiIFtzZWxlY3RlZFVzZXJzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5vdmVyc2VlcnMubGlzdFwiXG4gIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiIFtmcm9tUmVzcG9uc2liaWxpdHldPVwiJ092ZXJzZWVyJ1wiIFtpdGVtTmFtZUtleV09XCInbWVtYmVyX25hbWUnXCJcbiAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3ZlcnNlZXInLCAkZXZlbnQpXCIgKGNsb3NlVXNlcnNMaXN0KT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4gIFtpdGVtRW1haWxLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiPlxuPC9hcHAtb3duZXItbGlzdD5cbjx1c2VyLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyJyAmJiBmZWF0dXJlRmxhZ19ncm91cHNcIiBbZ3JvdXBFbmFibGVkXT1cInRydWVcIlxuICBbZ3JvdXBMaXN0XT1cImdyb3VwT3ZlcnNlZXJMaXN0XCIgW3NlbGVjdGVkR3JvdXBzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8ub3ZlcnNlZXJzR3JvdXBzPy5saXN0XCJcbiAgW3VzZXJsaXN0XT1cIm92ZXJzZWVyc0xpc3RcIiBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLmxpc3RcIiBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidPdmVyc2VlcidcIlxuICBbbG9hZGluZ109XCJ1c2VyTGlzdExvYWRlciB8fCBhc3NpZ25vcnNMaXN0TG9hZGVyXCIgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3ZlcnNlZXInLCAkZXZlbnQpXCJcbiAgKGNhbmNlbCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIiBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG48L3VzZXItZ3JvdXAtbGlzdD5cblxuPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdvdmVyc2Vlck5vdGlmeScgJiYgIWZlYXR1cmVGbGFnX2dyb3Vwc1wiIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiIFt1c2Vyc0xpc3RdPVwiYWxsVXNlcnNMaXN0XCIgW2Zyb21SZXNwb25zaWJpbGl0eV09XCInT3ZlcnNlZXInXCJcbiAgW3NlbGVjdGVkVXNlcnNdPVwicmVzcG9uc2liaWxpdHlGb3JtLm92ZXJzZWVycy5ub3RpZnlMaXN0XCIgW3VzZXJJZEtleV09XCInZW1wbG95ZWVfaWQnXCIgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvdmVyc2Vlck5vdGlmeScsICRldmVudClcIiAoY2xvc2VVc2Vyc0xpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCJcbiAgW2l0ZW1FbWFpbEtleV09XCInZW1wbG95ZWVfZW1haWwnXCI+PC9hcHAtb3duZXItbGlzdD5cbjx1c2VyLWdyb3VwLWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ292ZXJzZWVyTm90aWZ5JyAmJiBmZWF0dXJlRmxhZ19ncm91cHNcIiBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gIFtncm91cEVuYWJsZWRdPVwidHJ1ZVwiIFtncm91cExpc3RdPVwiZ3JvdXBPdmVyc2Vlckxpc3RcIlxuICBbc2VsZWN0ZWRHcm91cHNdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5vdmVyc2VlcnNHcm91cHM/Lm5vdGlmeUxpc3RcIlxuICBbc2VsZWN0ZWRVc2Vyc109XCJyZXNwb25zaWJpbGl0eUZvcm0ub3ZlcnNlZXJzLm5vdGlmeUxpc3RcIiBbZnJvbVJlc3BvbnNpYmlsaXR5XT1cIidPdmVyc2VlcidcIlxuICBbbG9hZGluZ109XCJ1c2VyTGlzdExvYWRlciB8fCBhc3NpZ25vcnNMaXN0TG9hZGVyXCIgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnb3ZlcnNlZXJOb3RpZnknLCAkZXZlbnQpXCJcbiAgKGNhbmNlbCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIiBbZmVhdHVyZWZsYWddPVwiZmVhdHVyZUZsYWdfZ3JvdXBzXCI+XG48L3VzZXItZ3JvdXAtbGlzdD5cblxuPGFwcC1vd25lci1saXN0ICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3N1cmFuY2UnXCIgW3Npbmd1bGFyVGV4dF09XCInVGVzdCBDYXRlZ29yeSBzZWxlY3RlZCdcIlxuICBbcGx1cmFsVGV4dF09XCInVGVzdCBDYXRlZ29yaWVzIHNlbGVjdGVkJ1wiIFtzZWFyY2hQbGFjZWhvbGRlcl09XCInU2VhcmNoIFRlc3QgQ2F0ZWdvcnkuLi4nXCJcbiAgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgVGVzdCBDYXRlZ29yaWVzJ1wiIFt1c2Vyc0xpc3RdPVwiYXNzdXJhbmNlQ2F0ZWdvcmllc0xpc3RcIlxuICBbbm9EYXRhVGV4dF09XCInTm8gVGVzdCBDYXRlZ29yaWVzIEZvdW5kJ1wiIFtzZWxlY3RlZFVzZXJzXT1cInJlc3BvbnNpYmlsaXR5Rm9ybS5hc3N1cmFuY2VMaXN0XCJcbiAgW3VzZXJJZEtleV09XCInY2F0ZWdvcnlfaWQnXCIgW2l0ZW1FbWFpbEtleV09XCInY2F0ZWdvcnlfbmFtZSdcIiBbaXRlbU5hbWVLZXldPVwiJ2NhdGVnb3J5X25hbWUnXCJcbiAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzdXJhbmNlJywgJGV2ZW50KVwiIChjbG9zZVVzZXJzTGlzdCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIlxuICBbc2VhcmNoUGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBDYXRlZ29yeSdcIj5cbjwvYXBwLW93bmVyLWxpc3Q+XG5cbjxhcHAtYXVkaXQtY2F0ZWdvcnktbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmVxdWlyZXNfYXVkaXQnXCIgKGNsb3NlTGlzdCk9XCJhY3RpdmVEZXNlbGVjdG9yKClcIlxuICBbYXVkaXRDYXRlZ29yeV09XCJhc3N1cmFuY2VSZXF1aXJlc0F1ZGl0TGlzdFwiIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3JlcXVpcmVzX2F1ZGl0JywgJGV2ZW50KVwiXG4gIFtzZWxlY3RlZERhdGFdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5yZXF1aXJlc0F1ZGl0TGlzdFswXVwiPjwvYXBwLWF1ZGl0LWNhdGVnb3J5LWxpc3Q+XG5cbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cIihsb2FkZXIgJiYgdGhpcy5tb2RlID09PSAnRURJVCcpIHx8IGVudHJ1c3RMb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxuPGFwcC1mcmFtZXdvcmstbGlzdCAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnZnJhbWV3b3JrJ1wiIChhc3NpZ25Db250cm9sKT1cImFzc2lnbkZyb21GcmFtZXdvcmsoJGV2ZW50KVwiXG4gIFtwcmV2aW91c1NlbGVjdGVkVmFsdWVzXT1cInNlbGVjdGVkRnJhbWV3b3JrVmFsdWVzXCIgKGNsb3NlRnJhbWV3b3JrKT1cImFjdGl2ZURlc2VsZWN0b3IoKVwiXG4gIChlbnRydXN0RnJhbWV3b3JrKT1cImVudHJ1c3RGcmFtZXdvcmsoJGV2ZW50KVwiPjwvYXBwLWZyYW1ld29yay1saXN0PlxuXG48IS0tIHJpc2stY2FsY3VsYXRvciBoZXJlIC0tPlxuPGFwcC1yaXNrLWNsYXNzaWZpY2F0aW9uICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyaXNrQ2FsY3VsYXRvcidcIiBbY3VycmVudFJpc2tWYWx1ZV09XCJyZXNwb25zaWJpbGl0eUZvcm0ucmlza0NsYXNzXCJcbiAgKHNhdmVMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2NhbGN1bGF0ZWRyaXNrJywgJGV2ZW50KVwiIChjbG9zZUxpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpXCI+XG48L2FwcC1yaXNrLWNsYXNzaWZpY2F0aW9uPlxuXG48YXBwLXJldmlldy1mcmVxdWVuY3kgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiIFtyZXZpZXdDb21wbGV0ZURheXNdPVwiXG4gICAgcmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5yZXZpZXdGcmVxdWVuY3kucmV2aWV3Q29tcGxldGVEYXlzXG4gIFwiIFtyZXZpZXdOT3RDb21wbGV0ZWREYXlzXT1cIlxuICAgIHJlc3BvbnNpYmlsaXR5Rm9ybS5yZXZpZXdlcnMucmV2aWV3RnJlcXVlbmN5LnJldmlld05PdENvbXBsZXRlZERheXNcbiAgXCIgKHNhdmVSZXZpZXdGcmVxdWVuY3kpPVwic2F2ZVNlbGVjdGVkTGlzdCgncmV2aWV3RnJlcXVlbmN5JywgJGV2ZW50KVwiIChjbG9zZVJldmlld0ZyZXF1ZW5jeSk9XCJcbiAgICBhY3RpdmVEZXNlbGVjdG9yKCk7XG4gICAgYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCBmYWxzZSk7XG4gICAgcmVzcG9uc2liaWxpdHlGb3JtLnJldmlld2Vycy5saXN0ID0gW107XG4gICAgcmVzcG9uc2liaWxpdHlGb3JtLmdyb3VwUmV2aWV3ZXJzLmxpc3QgPSBbXVxuICBcIiAoYmFja1RvVXNlckxpc3QpPVwiYWN0aXZlRGVzZWxlY3RvcigpOyBhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCI+XG48L2FwcC1yZXZpZXctZnJlcXVlbmN5PlxuXG48YXBwLWFzc2Vzc21lbnQtbGlzdCAqbmdJZj1cImlzQXNzZXNzbWVudFwiIFtwcm9ncmFtX2lkc109XCJyZXNwb25zaWJpbGl0eUZvcm0ucHJvZ3JhbVswXT8uX2lkXCIgKGNhbmNlbEFzc2Vzc21lbnQpPVwiXG4gICAgaXNBc3Nlc3NtZW50ID0gZmFsc2U7IGFjdGl2YXRlU2VsZWN0b3IoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVxuICBcIiBbaXNFZGl0XT1cInJlc3BvbnNpYmlsaXR5Rm9ybT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA/IHRydWUgOiBmYWxzZVwiXG4gIFtzZWxlY3RlZEFzc2Vzc21lbnRdPVwicmVzcG9uc2liaWxpdHlGb3JtPy5hc3Nlc3NtZW50XCIgKG9uQXNzZXNzbWVudFNlbGVjdCk9XCJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgZmFsc2UpXG4gIFwiPjwvYXBwLWFzc2Vzc21lbnQtbGlzdD5cblxuPGFwcC1zbWlsZXktZGlhbG9nLWlubGluZSAqbmdJZj1cInNob3dTbWlsZXlcIiBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCIgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiXG4gIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPlxuXG48ZGl2IGNsYXNzPVwiaW1wb3J0XCIgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzLW5ldydcIj5cbiAgPGFwcC1jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXIgI2VkaXRvciBbb3BlblBvcnRhbF09XCInUkVTUE9OU0lCSUxJVFlfQ0hFQ0tQT0lOVCdcIlxuICAgIChwb3N0QXNzZXNzbWVudCk9XCJwb3N0QXNzZXNzbWVudCgkZXZlbnQpXCIgKHNldElzVXBsb2FkZWQpPVwic2V0SXNVcGxvYWRlZCgkZXZlbnQpXCJcbiAgICBbY2hlY2twb2ludEpTT05dPVwicmVzcG9uc2liaWxpdHlGb3JtLm5ld19jaGVja3BvaW50c1wiPlxuICA8L2FwcC1jcmVhdGUtYXNzZXNzbWVudC1jb250YWluZXI+XG48L2Rpdj5cblxuPGFwcC1ncmMtb2JqZWN0LWxpc3QgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ0dSQ19PQkpFQ1RTJ1wiIFtncmNPYmplY3RdPVwiZ3JjTGlzdFwiXG4gIFtzZWxlY3RlZEdSQ109XCJyZXNwb25zaWJpbGl0eUZvcm0uc2VsZWN0ZWRHUkNPYmplY3RzIHwgcmVmRGlzY29ubmVjdFwiIFtsb2FkZXJdPVwiZ3JjTG9hZGVyXCIgW3RhYmxlQ2FyZF09XCJvdGhlckdSQ0NhcmRcIlxuICBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRHUkNUYWJcIiBbY2FyZExvYWRlcl09XCJncmNUYWJMb2FkZXJcIiAoZ2V0T3RoZXJHUkNPYmplY3RzKT1cImdldE90aGVyR1JDT2JqZWN0cygkZXZlbnQpXCJcbiAgKHNhdmVPdGhlckdSQyk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdHUkNfT0JKRUNUUycsICRldmVudClcIlxuICAoY2xvc2VPdGhlckdSQyk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdHUkNfT0JKRUNUUycsIGZhbHNlKVwiPjwvYXBwLWdyYy1vYmplY3QtbGlzdD4iXX0=
|