vcomply-workflow-engine 6.0.41 → 6.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/esm2022/lib/report-a-case/components/rc-details/rc-details.component.mjs +5 -7
  2. package/esm2022/lib/sharedComponents/document-section/document-section.component.mjs +40 -9
  3. package/esm2022/lib/sharedComponents/policy-template/policy-template.module.mjs +5 -5
  4. package/esm2022/lib/sharedComponents/policy-template/select-template-list/select-template-list.component.mjs +4 -8
  5. package/esm2022/lib/sharedComponents/policy-template/template-list-table/template-list-table.component.mjs +3 -9
  6. package/esm2022/lib/sharedComponents/policy-template/view-policy/view-policy/view-policy.component.mjs +93 -0
  7. package/esm2022/lib/sharedComponents/policy-template/view-policy/view-policy.module.mjs +19 -0
  8. package/esm2022/lib/workflow-engine-container/workflow-engine-container.component.mjs +1 -11
  9. package/esm2022/lib/workflow-policy/ms-word.constants.mjs +22 -0
  10. package/esm2022/lib/workflow-policy/workflow-policy.component.mjs +3 -3
  11. package/esm2022/lib/workflow-services/policy-api.service.mjs +38 -0
  12. package/fesm2022/vcomply-workflow-engine.mjs +203 -42
  13. package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
  14. package/lib/sharedComponents/document-section/document-section.component.d.ts +10 -2
  15. package/lib/sharedComponents/policy-template/policy-template.module.d.ts +2 -2
  16. package/lib/sharedComponents/policy-template/select-template-list/select-template-list.component.d.ts +1 -3
  17. package/lib/sharedComponents/policy-template/template-list-table/template-list-table.component.d.ts +3 -6
  18. package/lib/sharedComponents/policy-template/view-policy/view-policy/view-policy.component.d.ts +25 -0
  19. package/lib/sharedComponents/policy-template/view-policy/view-policy.module.d.ts +9 -0
  20. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +0 -2
  21. package/lib/workflow-policy/ms-word.constants.d.ts +21 -0
  22. package/lib/workflow-services/policy-api.service.d.ts +27 -0
  23. package/package.json +1 -1
@@ -1967,11 +1967,11 @@ export class WorkflowPolicyComponent {
1967
1967
  this.iframeService.redirectIfInIframe(this.templateUrl, true);
1968
1968
  }
1969
1969
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, deps: [{ token: i1.PolicyService }, { token: i2.SnackBarService }, { token: i3.UiKitService }, { token: i4.AuthService }, { token: i5.ResponsibilityService }, { token: i6.Router }, { token: i6.ActivatedRoute }, { token: i7.FrequencyService }, { token: i8.PlatformLocation }, { token: i0.ChangeDetectorRef }, { token: i9.RestApiService }, { token: i10.CommonService }, { token: i11.OrganizationUserService }, { token: i12.OrganizationCommonService }, { token: i13.ComplianceCommonService }, { token: i14.IframeService }], target: i0.ɵɵFactoryTarget.Component }); }
1970
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowPolicyComponent, selector: "app-workflow-policy", inputs: { mode: "mode", policyId: "policyId", feature: "feature", convertFileData: "convertFileData", selectedCategory: "selectedCategory", isSendForAttestation: "isSendForAttestation", templateId: "templateId" }, outputs: { pickerChanged: "pickerChanged", showConfirmationAlert: "showConfirmationAlert", populateOption: "populateOption", disconnectRefresh: "disconnectRefresh", shiftToEditMode: "shiftToEditMode" }, host: { listeners: { "document:click": "documentClick($event)" } }, viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "formatEvidence", first: true, predicate: ["formatEvidence"], descendants: true }, { propertyName: "datePickerPopUp", first: true, predicate: ["datePicker"], descendants: true, read: ElementRef }], ngImport: i0, template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\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\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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 greenBg\"\n appPopover\n (click)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img\n *ngIf=\"!policyForm?.addReviewers\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n 1\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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 greenBg\"\n appPopover\n (click)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\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\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/attestations.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\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\n (click)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\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\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\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\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_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\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_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\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\"\n alt=\"im\"\n *ngIf=\"!policyForm?.riskRating\"\n />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\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\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</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\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/associated-risks.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\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\n (click)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\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\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\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\n (click)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\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\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.programSelectedValues?.program?.category_id\n \"\n >\n <img\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/link-items.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', policyForm?.programSelectedValues)\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.programSelectedValues?.program?.name }}</span\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\n (click)=\"programResponsibilityPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button> -->\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n 'Reporting information security weaknesses'\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Reporting information security weaknesses\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\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\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram'\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n [feature]=\"feature\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.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: i15.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: i15.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i16.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i17.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i18.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i19.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i20.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i21.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i22.CsSelectComponent, selector: "cs-select", inputs: ["dropdownLabel", "dropdownSubLabel", "isRequired", "placeholder", "setMaxWidth"], outputs: ["valueChanged"] }, { kind: "component", type: i23.CsOptionComponent, selector: "cs-option", inputs: ["value", "color", "backgroundColor", "optionTooltip"] }, { kind: "component", type: i24.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "component", type: i25.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i26.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: i27.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i28.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: i29.SelectTemplateListComponent, selector: "app-select-template-list", inputs: ["selectedCategoryId", "feature"], outputs: ["onTemplateSelect"] }, { kind: "component", type: i30.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData"], outputs: ["updateFiles"] }, { kind: "component", type: i31.CheckboxListComponent, selector: "app-checkbox-list", inputs: ["itemsList", "selectedItems", "identifierKey", "displayKey", "tooltipKey", "config", "twoColumn", "loaded"], outputs: ["closeList", "saveList"] }, { kind: "component", type: i32.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: i33.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: i34.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i35.CheckpointsPolicyContainerComponent, selector: "app-checkpoints-policy-container", inputs: ["requiredPoint", "checkpointData"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i36.DocumentSectionComponent, selector: "lib-document-section", inputs: ["selectedDocumentType", "templateView", "policyId", "policyName", "organization_id", "member_obj_id", "userInfo", "templateUrl", "isTemplateOpened"], outputs: ["disconnectRefresh", "editPolicy", "openTemplate"] }, { kind: "component", type: i37.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i38.ApprovalWorkflowComponent, selector: "app-approval-workflow", inputs: ["approverWorkFlowList", "allApprovers", "selectedCategory", "editApprovalWorkflow", "createApprovalClick", "editWorkflowLevel"], outputs: ["selectedWorkflowNext", "listCancelClicked", "saveApprovalWorkflow", "closeCreateClicked"] }, { kind: "component", type: i39.PolicyAccessComponent, selector: "app-policy-access", inputs: ["policyAccessType", "SelectedCategory", "orgUsersList", "groupList", "selectedUsers", "selectedGroups", "disabledIds", "usersAccessList", "groupsAccessList", "disabledGroupIds", "futureUsersWillSelect"], outputs: ["close", "saveCheckPoint", "setPolicyAccessType"] }, { kind: "component", type: i40.LinkProgramComponent, selector: "vc-link-program", inputs: ["policy", "currentTab", "mode", "programsList", "selectedProgram", "selectedCategories", "selectedLinkProgram", "hideProgramsList"], outputs: ["changeTab", "updatedProgramDetails", "save", "close", "refreshLinkedPolicies"] }, { kind: "component", type: i41.LinkRelatedPoliciesComponent, selector: "app-link-related-policies", inputs: ["selectedPolicies", "mode", "policyId"], outputs: ["closeLinkPolicyList", "selectedList"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
1970
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: WorkflowPolicyComponent, selector: "app-workflow-policy", inputs: { mode: "mode", policyId: "policyId", feature: "feature", convertFileData: "convertFileData", selectedCategory: "selectedCategory", isSendForAttestation: "isSendForAttestation", templateId: "templateId" }, outputs: { pickerChanged: "pickerChanged", showConfirmationAlert: "showConfirmationAlert", populateOption: "populateOption", disconnectRefresh: "disconnectRefresh", shiftToEditMode: "shiftToEditMode" }, host: { listeners: { "document:click": "documentClick($event)" } }, viewQueries: [{ propertyName: "datePicker", first: true, predicate: ["datePicker"], descendants: true }, { propertyName: "formatEvidence", first: true, predicate: ["formatEvidence"], descendants: true }, { propertyName: "datePickerPopUp", first: true, predicate: ["datePicker"], descendants: true, read: ElementRef }], ngImport: i0, template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\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\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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 greenBg\"\n appPopover\n (click)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img\n *ngIf=\"!policyForm?.addReviewers\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n 1\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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 greenBg\"\n appPopover\n (click)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\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\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/attestations.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\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\n (click)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\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\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\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\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_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\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_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\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\"\n alt=\"im\"\n *ngIf=\"!policyForm?.riskRating\"\n />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\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\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</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\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/associated-risks.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\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\n (click)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\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\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\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\n (click)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\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\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.programSelectedValues?.program?.category_id\n \"\n >\n <img\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/link-items.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', policyForm?.programSelectedValues)\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.programSelectedValues?.program?.name }}</span\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\n (click)=\"programResponsibilityPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button> -->\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n 'Reporting information security weaknesses'\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Reporting information security weaknesses\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\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\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram'\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [feature]=\"feature\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.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: i15.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: i15.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i16.MarxEditorComponent, selector: "vcomply-editor", inputs: ["editorConfig"], outputs: ["comment", "sendSavedFiles", "popup"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i17.CsRadioComponent, selector: "app-cs-radio", inputs: ["disabled", "readonly", "name", "checked", "value", "oneLine"], outputs: ["checkedEvent"] }, { kind: "component", type: i18.CsSwitchComponent, selector: "app-cs-switch", inputs: ["disabled", "ngValue", "value", "tooltipMessage", "position"], outputs: ["ngValueChange"] }, { kind: "directive", type: i19.ToolTipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "placement", "type", "tooltipMandatory", "showTooltip", "animate"] }, { kind: "component", type: i20.PopoverComponent, selector: "app-popover", inputs: ["dontCloseonClick"] }, { kind: "directive", type: i21.PopoverDirective, selector: "[appPopover]", inputs: ["refrence", "placement"] }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i22.CsSelectComponent, selector: "cs-select", inputs: ["dropdownLabel", "dropdownSubLabel", "isRequired", "placeholder", "setMaxWidth"], outputs: ["valueChanged"] }, { kind: "component", type: i23.CsOptionComponent, selector: "cs-option", inputs: ["value", "color", "backgroundColor", "optionTooltip"] }, { kind: "component", type: i24.DatePickerComponent, selector: "dp-date-picker", inputs: ["config", "mode", "placeholder", "disabled", "displayDate", "theme", "minDate", "maxDate", "minTime", "maxTime"], outputs: ["open", "close", "onChange", "onGoToCurrent", "onLeftNav", "onRightNav", "onSelect"] }, { kind: "component", type: i25.LoaderInlineComponent, selector: "app-loader-inline" }, { kind: "component", type: i26.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: i27.ResponsibilityCentersListComponent, selector: "app-responsibility-centers-list", inputs: ["responsibilityCentersList", "selectedResponsibilityCenters", "rcIdKey", "radioSelection", "pluralText", "singularText", "loaded"], outputs: ["saveSelectedList", "closeRcList"] }, { kind: "component", type: i28.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: i29.SelectTemplateListComponent, selector: "app-select-template-list", inputs: ["selectedCategoryId"], outputs: ["onTemplateSelect"] }, { kind: "component", type: i30.FormatAndEvidenceComponent, selector: "app-format-and-evidence", inputs: ["mode", "categories", "organization_id", "formatEvidanceData"], outputs: ["updateFiles"] }, { kind: "component", type: i31.CheckboxListComponent, selector: "app-checkbox-list", inputs: ["itemsList", "selectedItems", "identifierKey", "displayKey", "tooltipKey", "config", "twoColumn", "loaded"], outputs: ["closeList", "saveList"] }, { kind: "component", type: i32.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: i33.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: i34.FrequencyContainerComponent, selector: "app-frequency-container", inputs: ["frequencyDetails", "mode", "feature", "pageType"], outputs: ["selectedFrequency", "closeFrequency"] }, { kind: "component", type: i35.CheckpointsPolicyContainerComponent, selector: "app-checkpoints-policy-container", inputs: ["requiredPoint", "checkpointData"], outputs: ["closeCheckPoint", "saveCheckPoint"] }, { kind: "component", type: i36.DocumentSectionComponent, selector: "lib-document-section", inputs: ["selectedDocumentType", "feature", "templateView", "policyId", "policyName", "organization_id", "member_obj_id", "userInfo", "templateUrl", "isTemplateOpened"], outputs: ["disconnectRefresh", "editPolicy", "openTemplate"] }, { kind: "component", type: i37.AssessmentListComponent, selector: "app-assessment-list", inputs: ["isEdit", "mode", "selectedAssessment", "selectedAssessmentData", "program_ids"], outputs: ["onAssessmentSelect", "cancelAssessment"] }, { kind: "component", type: i38.ApprovalWorkflowComponent, selector: "app-approval-workflow", inputs: ["approverWorkFlowList", "allApprovers", "selectedCategory", "editApprovalWorkflow", "createApprovalClick", "editWorkflowLevel"], outputs: ["selectedWorkflowNext", "listCancelClicked", "saveApprovalWorkflow", "closeCreateClicked"] }, { kind: "component", type: i39.PolicyAccessComponent, selector: "app-policy-access", inputs: ["policyAccessType", "SelectedCategory", "orgUsersList", "groupList", "selectedUsers", "selectedGroups", "disabledIds", "usersAccessList", "groupsAccessList", "disabledGroupIds", "futureUsersWillSelect"], outputs: ["close", "saveCheckPoint", "setPolicyAccessType"] }, { kind: "component", type: i40.LinkProgramComponent, selector: "vc-link-program", inputs: ["policy", "currentTab", "mode", "programsList", "selectedProgram", "selectedCategories", "selectedLinkProgram", "hideProgramsList"], outputs: ["changeTab", "updatedProgramDetails", "save", "close", "refreshLinkedPolicies"] }, { kind: "component", type: i41.LinkRelatedPoliciesComponent, selector: "app-link-related-policies", inputs: ["selectedPolicies", "mode", "policyId"], outputs: ["closeLinkPolicyList", "selectedList"] }, { kind: "pipe", type: i8.SlicePipe, name: "slice" }, { kind: "pipe", type: i8.DatePipe, name: "date" }] }); }
1971
1971
  }
1972
1972
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WorkflowPolicyComponent, decorators: [{
1973
1973
  type: Component,
1974
- args: [{ selector: 'app-workflow-policy', template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\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\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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 greenBg\"\n appPopover\n (click)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img\n *ngIf=\"!policyForm?.addReviewers\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n 1\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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 greenBg\"\n appPopover\n (click)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\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\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/attestations.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\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\n (click)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\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\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\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\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_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\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_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\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\"\n alt=\"im\"\n *ngIf=\"!policyForm?.riskRating\"\n />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\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\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</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\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/associated-risks.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\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\n (click)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\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\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\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\n (click)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\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\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.programSelectedValues?.program?.category_id\n \"\n >\n <img\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/link-items.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', policyForm?.programSelectedValues)\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.programSelectedValues?.program?.name }}</span\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\n (click)=\"programResponsibilityPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button> -->\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n 'Reporting information security weaknesses'\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Reporting information security weaknesses\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\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\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram'\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n [feature]=\"feature\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.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"] }]
1974
+ args: [{ selector: 'app-workflow-policy', template: "<!-- <p>workflow-policy works!</p> -->\n\n<ng-container *ngIf=\"!showCreateDocuments\">\n <div class=\"workflow-policy\">\n <!-- Policy Name -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.policyName\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/what.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm?.policyName || activeSelector === 'name'\"\n />\n\n <svg\n *ngIf=\"policyForm?.policyName && activeSelector !== 'name'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Policy Name <span class=\"required\">*</span>\n </label>\n <input\n type=\"text\"\n (keydown)=\"activeSelector = 'name'\"\n (focusin)=\"activateSelector('name', true)\"\n *ngIf=\"policyForm.policyName == '' || activeSelector === 'name'\"\n (focusout)=\"activateSelector('name', false)\"\n [ngModel]=\"policyForm.policyName\"\n (ngModelChange)=\"policyForm.policyName = changeName($event)\"\n placeholder=\"Name this policy\"\n />\n <div\n class=\"selected\"\n *ngIf=\"policyForm.policyName.length && activeSelector !== 'name'\"\n >\n <div class=\"chip-container\">\n <span class=\"value\">{{ policyForm.policyName }}</span>\n </div>\n <button\n class=\"edit\"\n (click)=\"activateSelector('name', true)\"\n type=\"button\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <p\n *ngIf=\"submitted && !policyForm.policyName.trim()\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please enter a name for this policy.\n </p>\n <vcomply-editor\n [(ngModel)]=\"policyForm.policyNotes\"\n [editorConfig]=\"description\"\n ></vcomply-editor>\n <!-- <app-cs-switch\n [(ngValue)]=\"policyForm.availableOnPortal\"\n (ngValueChange)=\"availabilityOnPortal($event)\"\n >\n Do you want this policy to be available on the portal?\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'The policies that you intend to make accessible to the entire organization can be added to the policy portal. It is like a shared catalog of all active & updated policies that any logged in user can read/download for reference.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n >\n </app-cs-switch>\n <app-cs-switch\n *ngIf=\"policyForm.availableOnPortal\"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >\n Accept suggestions\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe932;</i\n ></app-cs-switch> -->\n </div>\n </div>\n </div>\n\n <!-- Policy Category -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'category'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'category' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedCategories?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedCategories?.length == 0 ||\n activeSelector === 'category'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/category.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedCategories?.length > 0 &&\n activeSelector !== 'category'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >Policy Category <span class=\"required\">*</span>\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedCategories?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('category', true)\"\n placeholder=\"Select a category for this policy.\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedCategories?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"\n let category of policyForm?.selectedCategories?.slice(0, 1)\n \"\n >\n <i\n (click)=\"remove('category', category)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"category.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ category.item_name }}</span\n >\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\"\n *ngIf=\"policyForm?.selectedCategories?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"category.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.selectedCategories?.slice(1).length }}\n </button>\n </div>\n\n <!-- <div class=\"chip-container\" [class.more-one]=\"policyForm?.selectedCategories?.length>1\"\n [class.plus]=\"policyForm?.selectedCategories?.length>2\">\n <span class=\"chip\" *ngFor=\"let category of policyForm?.selectedCategories?.slice(0,2)\"><i\n class=\"icons\" (click)=\"remove('category',category)\">&#xe90d;</i>\n {{category.item_name}}</span>\n <button class=\"count\" *ngIf=\"policyForm?.selectedCategories?.length > 2\" type=\"button\"\n appPopover (click)=\"category.popover()\" placement=\"right\">+\n {{policyForm?.selectedCategories?.slice(2).length}}</button>\n </div> -->\n <button\n *ngIf=\"activeSelector !== 'category'\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('category', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #category [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let category of policyForm?.selectedCategories | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('category', category)\"\n >&#xe90d;</i\n >\n {{ category.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <p\n *ngIf=\"submitted && policyForm?.selectedCategories?.length == 0\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Please select the category for this policy.\n </p>\n </div>\n\n <div class=\"vx-form-group\" *ngIf=\"policyForm?.customTags?.length > 0\">\n <ng-container *ngFor=\"let tag of policyForm?.customTags\">\n <label class=\"vx-control-panel vx-mt-2\">{{ tag.tagname }}</label>\n <input\n type=\"text\"\n [(ngModel)]=\"tag.value\"\n placeholder=\"{{ tag.tagname }}\"\n />\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Effective Date -->\n <div\n class=\"form-group-row\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/when.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input\n type=\"text\"\n readonly\n placeholder=\"Select the effective date of the policy.\"\n [value]=\"policyForm.policyDueDate | date : 'dd MMM yyyy'\"\n (click)=\"openDatePicker()\"\n id=\"effective-date\"\n />\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker\n #datePicker\n (onSelect)=\"datePickerOverlay = false; closeDatePicker($event)\"\n [config]=\"dateConfig\"\n [(ngModel)]=\"policyForm.policyDueDate\"\n >\n </dp-date-picker>\n <div\n class=\"vx-overlay\"\n (click)=\"closeDatePicker($event)\"\n *ngIf=\"datePickerOverlay\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Policy Owner -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'owners'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'owners' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_owners?.length\">\n <img\n *ngIf=\"!policyForm.policy_owners?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/im-creating.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY OWNER(S)</label>\n </div>\n <div\n *ngIf=\"!policyForm.policy_owners?.length\"\n (click)=\"activateSelector('owners', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select owners for this policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm.policy_owners?.length\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('owners', policyForm?.policy_owners[0], 0)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.policy_owners[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.policy_owners[0]?.member_name }}</span\n >\n\n <button\n *ngIf=\"policyForm?.policy_owners?.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 greenBg\"\n appPopover\n (click)=\"policyUserPopover.popover()\"\n placement=\"left\"\n >\n + {{ policyForm?.policy_owners.length - 1 }}\n </button>\n </div>\n <div\n *ngIf=\"false\"\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-1 vx-mr-1\"\n >\n &\n </div>\n <div\n *ngIf=\"false\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyGroupPopover.popover()\"\n placement=\"right\"\n >\n +4\n </button>\n </div>\n <app-popover #policyUserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let owner of policyForm?.policy_owners | slice : 1;\n let i = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"owner?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n (click)=\"remove('owners', owner, i + 1)\"\n class=\"icons\"\n >&#xe90d;</i\n >\n {{ owner?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #policyGroupPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n (click)=\"activateSelector('owners', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"submitted && !policyForm?.policy_owners?.length\"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select owners for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Review -->\n <div\n class=\"form-group-row\"\n [class.active]=\"\n activeSelector === 'reviewer' || activeSelector === 'reviewerFrequency'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.addReviewers\">\n <img\n *ngIf=\"!policyForm?.addReviewers\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.addReviewers\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">REVIEW</label>\n <div\n class=\"reviewSelection vx-p-3 vx-pb-0\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"vx-fs-13 vx-paragraph-txt vx-mb-1\">\n Does this policy need to be reviewed?\n </div>\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(true)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n YES\n </div></app-cs-radio\n >\n <app-cs-radio\n name=\"review-type\"\n [checked]=\"!policyForm?.addReviewers\"\n (checkedEvent)=\"typeSelected(false)\"\n ><div class=\"vx-fs-11 vx-fw-500 vx-paragraph-txt vx-mr-3\">\n NO\n </div></app-cs-radio\n >\n </div>\n\n <ng-container *ngIf=\"policyForm?.addReviewers\">\n <label class=\"vx-control-panel vx-mt-2\">REVIEWER</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n [appScrollInView]=\"scrollToBottom\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <div\n class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n Select the person responsible for reviewing this policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n (click)=\"remove('reviewer', reviewer)\"\n class=\"icons cross vx-fs-12 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewer?.member_name }}</span\n >\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n *ngIf=\"activeSelector !== 'reviewer'\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <label class=\"vx-control-panel vx-mt-3\">REVIEW FREQUENCY</label>\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n When does this policy needs to be reviewed?\n </div>\n <div\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\"\n >\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n [class.active]=\"activeSelector === 'reviewerFrequency'\"\n >\n <div\n class=\"selectBoxText vx-fs-13 vx-paragraph-txt\"\n [appTooltip]=\"reviewerFrequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{ reviewerFrequencyPlaceholder }}\n </div>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- New Approval Workflow -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\" [class.disabled]=\"policyApprovalFlag !== 0\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\"\n >APPROVAL <span class=\"required\">*</span></label\n >\n <button\n (click)=\"\n createApprovalWorkflow(); activateSelector('approvers', true)\n \"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n class=\"createNewBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0\"\n >\n CREATE A NEW APPROVAL WORKFLOW\n </button>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length === 0 ||\n !selectedWorkflow[0]?.workflow_name\n \"\n (click)=\"\n clickApprovalWorkflow(true); activateSelector('approvers', true)\n \"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the approval workflow for this policy\n </div>\n </div>\n <div\n *ngIf=\"\n selectedWorkflow?.length > 0 && selectedWorkflow[0]?.workflow_name\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-mb-2\"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"removeWorkflow()\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"selectedWorkflow[0]?.workflow_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ selectedWorkflow[0]?.workflow_name }}</span\n >\n </div>\n <button\n (click)=\"editWorkflow(selectedWorkflow[0])\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n <ng-container *ngIf=\"selectedWorkflow?.length > 0\">\n <div\n *ngFor=\"\n let approval of selectedWorkflow[0]?.approval_workflow;\n let approvalIndex = index\n \"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"level-left vx-d-flex vx-align-center\">\n <div class=\"vx-d-block\">\n <div\n class=\"level-name vx-fs-9 vx-fw-500 vx-paragraph-txt vx-tt-uppercase vx-lh-3\"\n [appTooltip]=\"\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n {{\n approval?.alias_name\n ? approval?.alias_name\n : approval?.level1\n }}\n </div>\n <div\n class=\"vx-fs-9 vx-fw-500 vx-label-txt vx-tt-uppercase vx-lh-3\"\n >\n {{\n approval?.type === \"ROUNDROBIN\"\n ? \"ROUND-ROBIN\"\n : approval?.type === \"ANYONE\"\n ? \"ANY ONE\"\n : approval?.type\n }}\n </div>\n </div>\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2 vx-ml-2\"\n >\n <!-- <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n > -->\n <div\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential' &&\n approval?.approvers?.length < 2\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n {{ 1 == approval?.approvers?.length ? \"Final\" : 1 }}\n </div>\n <div\n *ngIf=\"\n approval?.approvers?.length > 1 &&\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >\n 1\n </div>\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"approval?.approvers[0]?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ approval?.approvers[0]?.member_name }}</span\n >\n <button\n *ngIf=\"approval?.approvers?.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\n (click)=\"workflowPopover.popover()\"\n placement=\"right\"\n >\n +{{ approval?.approvers?.length - 1 }}\n </button>\n </div>\n <app-popover #workflowPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of approval?.approvers | slice : 1;\n let approvalIndex = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"approver?.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <!-- <i class=\"icons\">&#xe90d;</i> -->\n <span\n *ngIf=\"\n approval?.type?.toLowerCase() === 'sequential'\n \"\n class=\"workflowLavel vx-fs-11 vx-fw-500 vx-pl-1 vx-pr-1 vx-lh-4 vx-mr-1 vx-text-center\"\n >{{\n approvalIndex + 1 ===\n approval?.approvers?.length - 1\n ? \"Final\"\n : approvalIndex + 2\n }}</span\n >\n {{ approver?.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <!-- <div class=\"vx-d-flex vx-align-center\">\n <button (click)=\"editLevelClicked(approval,approvalIndex)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n <button (click)=\"deleteLevel(approvalIndex)\"\n class=\"deleteBtn vx-fs-11 vx-fw-600 vx-tt-uppercase vx-p-0 vx-m-0 vx-ml-4 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe9ae;</i> DELETE\n </button>\n </div> -->\n </div>\n </ng-container>\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers[0]?.approval_workflow?.length &&\n !policyApprovalFlag &&\n !policyForm?.selectedApprovers[0]?.approvers?.length\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n </div>\n </div>\n </div>\n\n <!-- Policy Access -->\n <div\n *ngIf=\"true\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'policyAccess'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'policyAccess' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"true\">\n <img\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/lock-scope.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length ||\n policyForm?.availableOnPortal\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">POLICY PORTAL ACCESS</label>\n </div>\n <div\n *ngIf=\"\n !policyForm?.policy_access_owners?.length &&\n !policyForm?.policy_access_groups?.length &&\n !policyForm?.availableOnPortal\n \"\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"!policyForm?.selectedCategories?.length\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Who should be able to view this policy?\n </div>\n </div>\n\n <ng-container *ngIf=\"!policyForm?.availableOnPortal\">\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3\"\n *ngIf=\"\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n >\n <div\n class=\"vx-d-flex vx-align-center vx-justify-between vx-mt-2 vx-mb-2\"\n >\n <div class=\"vx-d-flex vx-align-center\">\n <div\n *ngIf=\"policyForm?.policy_access_owners?.length\"\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'policyAccess',\n policyForm?.policy_access_owners[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_owners[0]?.employee_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_owners[0]?.employee_name\n }}</span\n >\n <button\n *ngIf=\"policyForm?.policy_access_owners?.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 greenBg\"\n appPopover\n (click)=\"policyAccessPopover.popover()\"\n placement=\"left\"\n >\n +{{ policyForm?.policy_access_owners.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.policy_access_owners.length > 0 &&\n policyForm?.policy_access_groups.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.policy_access_groups.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"\n remove(\n 'accessGroup',\n policyForm?.policy_access_groups[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.policy_access_groups[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm?.policy_access_groups[0]?.group_name\n }}</span\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\n (click)=\"accessGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.policy_access_groups.length > 1\"\n >\n +{{ policyForm?.policy_access_groups.length - 1 }}\n </button>\n </div>\n\n <app-popover #policyAccessPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let user of policyForm?.policy_access_owners\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"user?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('policyAccess', user)\"\n >&#xe90d;</i\n >\n {{ user?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #accessGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.policy_access_groups\n | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n *ngIf=\"policyForm?.policy_access_type === 1\"\n (click)=\"remove('accessGroup', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <!-- <div class=\"vx-mt-4 vx-mb-2\">\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 0\" (checkedEvent)=\"setAccessField(0)\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Everyone who has access to this Policy Category\n </div></app-cs-radio\n >\n <app-cs-radio\n [name]=\"'policyFormAccessType'\" [checked]=\"policyForm?.policy_access_type === 1\" (checkedEvent)=\"setAccessField(1)\"\n class=\"vx-mt-1\"\n ><div class=\"vx-fs-12 vx-paragraph-txt\">\n Select users/groups\n </div></app-cs-radio\n >\n </div> -->\n </div>\n </ng-container>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.availableOnPortal\"\n >\n <span class=\"vx-fs-13 vx-paragraph-txt\"\n >Visible to All Current & Future Users</span\n >\n\n <button\n (click)=\"activateSelector('policyAccess', true)\"\n class=\"edit vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n *ngIf=\"\n policyForm.availableOnPortal ||\n policyForm?.policy_access_owners?.length ||\n policyForm?.policy_access_groups?.length\n \"\n [(ngValue)]=\"policyForm.acceptSuggestions\"\n >ACCEPT SUGGESTIONS\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'If enabled, users can provide improvement suggestions to the policies that are listed on the Policy Portal.'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <!-- Attestations -->\n <div\n class=\"form-group-row\"\n [class.active]=\"false\"\n [class.disabled]=\"false\"\n *ngIf=\"false\"\n >\n <div class=\"left\" [class.checked]=\"false\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/attestations.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"false\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <div class=\"vx-d-flex vx-align-center vx-justify-between\">\n <label class=\"vx-control-panel\">ATTESTATIONS</label>\n </div>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons required to attest to this Policy\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"'Samantha Jones'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >Samantha Jones</span\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\n (click)=\"policyAttestationPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button>\n </div>\n <app-popover #policyAttestationPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"'Harshvardhan Kariwala'\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Harshvardhan Kariwala\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <div class=\"vx-mt-2\">\n <app-cs-switch\n >REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons vx-fs-12 vx-txt-blue vx-ml-1 vx-mr-2\"\n [appTooltip]=\"\n 'Requires e-signature for attestation info text here...'\n \"\n placement=\"bottom-right\"\n delay=\"0\"\n type=\"white\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\">WHEN?</label>\n <div\n class=\"selectButton vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"selectButtonPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\"\n >\n What is the attestation schedule for this<br />policy?\n </div>\n <div class=\"vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase\">\n SET A FREQUENCY\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div class=\"selectBoxText vx-fs-13 vx-paragraph-txt\">\n Every Wednesday by 11:59 pm\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <label class=\"vx-control-panel vx-mt-2\"\n >ASSESSMENT OF UNDERSTANDING</label\n >\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">5 Questions</span>\n </div>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Approval Workflow -->\n <div\n class=\"form-group-row\"\n *ngIf=\"false\"\n [class.active]=\"activeSelector === 'approvers'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'approvers' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedApprovers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedApprovers?.length == 0 ||\n activeSelector === 'approvers'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/approval.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedApprovers?.length > 0 &&\n activeSelector !== 'approvers'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div\n class=\"vx-form-group approval-workflow\"\n [class.disabled]=\"policyApprovalFlag !== 0\"\n >\n <label class=\"vx-control-panel\">\n Approval workflow <span class=\"required\">*</span>\n <button\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n class=\"button\"\n >\n Create a new Approval Workflow\n </button>\n </label>\n <div\n class=\"select\"\n [class.disabled]=\"approverWorkFlowList?.length == 0\"\n *ngIf=\"\n policyForm?.selectedApprovers[0]?.approvers?.length == 0 ||\n policyForm?.selectedApprovers.length == 0\n \"\n >\n <cs-select\n [ngModel]=\"selectedApprovalWorkflow\"\n (ngModelChange)=\"selectedWorkflowChange($event)\"\n [placeholder]=\"'Select approval workflow for this policy'\"\n name=\"selectedApprovalWorkflow\"\n [setMaxWidth]=\"true\"\n >\n <cs-option\n *ngFor=\"let data of approverWorkFlowList\"\n [value]=\"data\"\n >\n {{ data.workflow_name }}\n </cs-option>\n <cs-option\n [value]=\"-1\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >Create a new approval workflow</cs-option\n >\n </cs-select>\n </div>\n <ng-container\n *ngIf=\"policyForm?.selectedApprovers[0]?.approvers?.length > 0\"\n >\n <div\n class=\"selected\"\n *ngFor=\"let level of policyForm?.selectedApprovers; let i = index\"\n >\n <div class=\"workflow-label\">\n <p class=\"title\">Level {{ i + 1 }}</p>\n <p class=\"description\">{{ level.name }}</p>\n </div>\n <div class=\"vx-d-flex vx-align-center\">\n <div class=\"chip-container\">\n <span\n class=\"chip\"\n *ngFor=\"\n let approver of level.approvers.slice(0, 1);\n let j = index\n \"\n ><i class=\"icons\" (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span class=\"step\" *ngIf=\"level.name == 'SEQUENTIAL'\">{{\n j + 1\n }}</span\n >{{ approver.member_name }}</span\n >\n\n <button\n class=\"count\"\n *ngIf=\"level.approvers?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"labelName.popover()\"\n placement=\"left\"\n >\n +\n\n {{ level.approvers.slice(1).length }}\n </button>\n <app-popover #labelName [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let approver of level.approvers | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('approvers', approver, i)\"\n >&#xe90d;</i\n >\n <span\n class=\"step\"\n *ngIf=\"level.name == 'SEQUENTIAL'\"\n >\n {{\n j == level.approvers.slice(1).length - 1\n ? \"Final\"\n : j + 2\n }}\n </span>\n {{ approver.member_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"\n activateSelector('approvers', true, level.name);\n approversListIndex = i\n \"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <button\n class=\"close-btn\"\n (click)=\"remove('workflowLevel', level, i)\"\n >\n <i class=\"icons\">&#xe90d;</i>\n </button>\n </div>\n </div>\n </ng-container>\n\n <p\n *ngIf=\"\n submitted &&\n !policyForm?.selectedApprovers?.length &&\n !policyApprovalFlag\n \"\n [appScrollInView]=\"true\"\n class=\"error-message\"\n >\n Select or create an approval workflow for this policy.\n </p>\n\n <label\n class=\"vx-control-panel\"\n *ngIf=\"policyForm.selectedApprovers[0]?.approvers?.length > 0\"\n ><button\n class=\"button\"\n (click)=\"\n activateSelector('approvers', true);\n addMoreLevels = true;\n workflowType = 'SEQUENTIAL'\n \"\n >\n + Add More Levels\n </button></label\n >\n </div>\n </div>\n </div>\n\n <!-- Who / now Attestation -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'assignees'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'assignees' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedAssignees?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedAssignees?.length == 0 ||\n activeSelector === 'assignees'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/who.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 &&\n activeSelector !== 'assignees'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Attestation</label>\n <div\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center vx-mb-2\"\n *ngIf=\"\n (policyForm?.selectedAssignees?.length == 0 && !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n groupEnabled &&\n policyForm?.selectedGroupAssignee.length == 0)\n \"\n (click)=\"activateSelector('assignees', true)\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select the persons responsible for attesting this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between vx-mb-2\"\n *ngIf=\"\n policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees?.slice(0, 1)\n \"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('assignees', assignee)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"assignee.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ assignee.employee_name }}</span\n >\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\n (click)=\"assigneePopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedAssignees?.length > 1\"\n >\n +{{ policyForm?.selectedAssignees?.slice(1).length }}\n </button>\n </div>\n <ng-container *ngIf=\"groupEnabled\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.selectedAssignees.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('assignees', policyForm?.selectedAssignees[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.selectedAssignees[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedAssignees[0]?.employee_name }}</span\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\n (click)=\"UserPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedAssignees.length > 1\"\n >\n +{{ policyForm?.selectedAssignees.length - 1 }}\n </button>\n </div>\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.selectedAssignees.length > 0 &&\n policyForm?.selectedGroupAssignee.length > 0\n \"\n >\n &\n </div>\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove(\n 'groupAssignees',\n policyForm?.selectedGroupAssignee[0]\n )\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm?.selectedGroupAssignee[0]?.group_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.selectedGroupAssignee[0]?.group_name }}</span\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\n (click)=\"group.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.selectedGroupAssignee.length > 1\"\n >\n +{{ policyForm?.selectedGroupAssignee.length - 1 }}\n </button>\n </div>\n </ng-container>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('assignees', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length == 0 &&\n policyForm?.frequency_details &&\n !groupEnabled) ||\n (policyForm?.selectedAssignees?.length == 0 &&\n policyForm.selectedGroupAssignee.length == 0 &&\n policyForm?.frequency_details &&\n groupEnabled) ||\n (isSendForAttestation &&\n policyForm?.selectedAssignees?.length === 0))\n \"\n id=\"whovalidatemsg\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the persons required to attest to this Policy.\n </p>\n <app-cs-switch\n [(ngValue)]=\"policyForm.requiresSignatureForAttestation\"\n [class.disabled]=\"policyForm?.selectedAssignees?.length == 0\"\n class=\"who-toggle\"\n >THIS POLICY REQUIRES E-SIGNATURE FOR ATTESTATION\n <i\n class=\"icons\"\n [appTooltip]=\"\n 'If selected, the readers will be required to attest this policy using their electronic signature.'\n \"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n <app-popover #assigneePopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #UserPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let assignee of policyForm?.selectedAssignees | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('assignees', assignee)\"\n >&#xe90d;</i\n >\n {{ assignee.employee_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\n *ngFor=\"\n let data of policyForm?.selectedGroupAssignee | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('groupAssignees', data)\"\n >&#xe90d;</i\n >\n {{ data.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n\n <!-- overseer -->\n <app-popover #overseerPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_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\n *ngFor=\"\n let data of policyForm?.CCGroupEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccGroupEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer end -->\n\n <!-- overseer fail start -->\n <app-popover #overseerFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let overseer of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', overseer)\"\n >&#xe90d;</i\n >\n {{ overseer?.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #overseerFailGroup [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let data of policyForm?.CCFailEmailGroup | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"remove('ccGroupFailEmail', data)\"\n >&#xe90d;</i\n >\n {{ data?.group_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <!-- overseer fail end -->\n </div>\n </div>\n </div>\n\n <!-- When -->\n <div\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'frequency'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'frequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">When?</label>\n\n <div\n *ngIf=\"policyForm?.frequency_details == ''\"\n class=\"select button-sec\"\n >\n <div\n class=\"custom-input frequency-custom-input\"\n (click)=\"activateSelector('frequency', true)\"\n >\n {{ frequencyPlaceholder }}\n </div>\n\n <button (click)=\"activateSelector('frequency', true)\" type=\"button\">\n Set A frequency\n </button>\n </div>\n <!-- <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec\"\n > -->\n <div\n *ngIf=\"policyForm?.frequency_details != ''\"\n class=\"selected button-sec selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"remove('frequency', rc)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"frequencyPlaceholder\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ frequencyPlaceholder }}</span\n >\n </div>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n <!-- </div>\n <span class=\"chip\">{{ frequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'frequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('frequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button> -->\n </div>\n <p\n *ngIf=\"\n submitted &&\n ((policyForm?.selectedAssignees?.length > 0 &&\n !policyForm?.frequency_details &&\n !groupEnabled) ||\n ((policyForm?.selectedAssignees?.length > 0 ||\n policyForm?.selectedGroupAssignee?.length > 0) &&\n !policyForm?.frequency_details &&\n groupEnabled))\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select an attestation schedule for this policy.\n </p>\n\n <!-- <label class=\"vx-control-panel\">Effective Date</label>\n <div class=\"date-time-picker\">\n <div class=\"picker-group\">\n <input type=\"text\" readonly placeholder=\"Select the date from which this policy goes into effect.\"\n [value]=\"policyForm.policyDueDate | date: 'dd MMM yyyy'\" (click)=\"openDatePicker();\">\n <i class=\"icons\">&#xe92d;</i>\n <dp-date-picker #datePicker (onSelect)=\"datePickerOverlay = false;closeDatePicker($event)\"\n [config]=\"dateConfig\" [(ngModel)]=\"policyForm.policyDueDate\">\n </dp-date-picker>\n <div class=\"vx-overlay\" (click)=\"closeDatePicker($event)\" *ngIf=\"datePickerOverlay\"></div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n\n <!-- Checkpoints / Assessment of Understanding -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"true\"\n [class.active]=\"activeSelector === 'checkpoints'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'checkpoints' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">\n Assessment of Understanding\n <!-- <button *ngIf=\"policyForm?.checkpointDetails?.length===0\" class=\"button\" (click)=\"activateSelector('checkpoints',true)\">+ Add Checkpoints</button> -->\n </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.checkpointDetails?.length === 0\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <!-- <input type=\"text\" placeholder=\"Set up a questionnaire to confirm the reader\u2019s understanding of the policy.\" readonly> -->\n <div class=\"custom-input\">\n Set up a questionnaire to confirm the reader\u2019s<br />understanding\n of the policy.\n </div>\n </div>\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.checkpointDetails?.length > 0\"\n >\n <!-- <div class=\"chip-container\">\n <span class=\"chip\">{{policyForm?.checkpointDetails?.length + (policyForm?.checkpointDetails?.length > 1 ?' Checkpoints':' Checkpoint')}}</span>\n\n <span class=\"checkpoint-point-text first\">TOTAL POINTS: <span class=\"no\">{{policyForm?.totalQuestion}}</span><br><em>Each question carries 1 point</em></span>\n\n <span class=\"checkpoint-point-text\">POINTS REQUIRED TO ATTEST : <span class=\"no\">{{policyForm?.passingMarks}}</span></span>\n\n </div> -->\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('checkpoints', policyForm?.checkpointDetails)\"\n >&#xe9ae;</i\n >\n <span class=\"chipName vx-fs-11 vx-label-txt\">{{\n policyForm?.checkpointDetails?.length +\n (policyForm?.checkpointDetails?.length > 1\n ? \" Questions\"\n : \" Question\")\n }}</span>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('checkpoints', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <!-- <app-popover #checkpointPopOver [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let checkpoint of policyForm?.checkpointDetails | slice: 1; let j = index\">\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('checkpoints',checkpoint,j+1)\">&#xe90d;</i>\n {{ checkpoint?.question }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover> -->\n </div>\n </div>\n </div>\n\n <!-- Risk Classification -->\n <div\n class=\"form-group-row\"\n *ngIf=\"showRiskClassification && false\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\" [class.checked]=\"policyForm.riskRating\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/risks.svg\"\n alt=\"im\"\n *ngIf=\"!policyForm?.riskRating\"\n />\n\n <svg\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n *ngIf=\"policyForm?.riskRating\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Risk Classification</label>\n <div class=\"classification\">\n <label\n class=\"low\"\n *ngFor=\"let class of riskClassification\"\n [ngClass]=\"[class.class]\"\n >\n <input\n type=\"radio\"\n name=\"classification\"\n [value]=\"class.value\"\n [checked]=\"policyForm?.riskRating === class.value\"\n [(ngModel)]=\"policyForm.riskRating\"\n />\n <span>{{ class.name }}</span>\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Responsibility Center -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addResponsibilityCenters\"\n [class.active]=\"activeSelector === 'rc'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'rc' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.selectedRCs?.length > 0\">\n <img\n *ngIf=\"\n policyForm?.selectedRCs?.length == 0 || activeSelector === 'rc'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/responsibility-center.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.selectedRCs?.length > 0 && activeSelector !== 'rc'\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Responsibility Center</label>\n <div class=\"select\" *ngIf=\"policyForm?.selectedRCs?.length == 0\">\n <input\n type=\"text\"\n (click)=\"activateSelector('rc', true)\"\n placeholder=\"Select Responsibility Center(s) that this policy relates to.\"\n readonly\n />\n </div>\n\n <div class=\"selected\" *ngIf=\"policyForm?.selectedRCs?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let rc of policyForm?.selectedRCs?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('rc', rc)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"rc.item_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ rc.item_name }}</span\n >\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\"\n appPopover\n (click)=\"rcPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.selectedRCs?.length > 1\"\n >\n +{{ policyForm?.selectedRCs?.slice(1).length }}\n </button>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('rc', true)\"\n >\n <i class=\"icons\">&#xe9ba;</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\n *ngFor=\"\n let rc of policyForm?.selectedRCs | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('rc', rc)\">&#xe90d;</i>\n {{ rc.item_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Version -->\n <div\n *ngIf=\"policyForm.addVersion\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.disabled]=\"\n activeSelector && sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm.policy_version\">\n <img\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/associated-risks.svg\"\n alt=\"name\"\n *ngIf=\"!policyForm.policy_version\"\n />\n\n <svg\n *ngIf=\"policyForm.policy_version\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">VERSION</label>\n <input\n [(ngModel)]=\"policyForm.policy_version\"\n (change)=\"onVersion($event)\"\n type=\"text\"\n placeholder=\"Specify the policy version.\"\n />\n <p\n *ngIf=\"!isVersionValid\"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n {{ versionErrorMessage }}\n </p>\n </div>\n </div>\n </div>\n\n <!-- Reviewer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addReviewers && false\"\n [class.active]=\"activeSelector === 'reviewer'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'reviewer' &&\n activeSelector !== 'reviewerFrequency' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <img\n *ngIf=\"\n policyForm?.selectedReviewers?.length == 0 ||\n activeSelector === 'reviewer'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/reviewer.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"\n policyForm?.selectedReviewers?.length > 0 &&\n activeSelector !== 'reviewer'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Reviewer </label>\n <div\n class=\"select\"\n *ngIf=\"policyForm?.selectedReviewers?.length == 0\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewer', true)\"\n placeholder=\"Select the person responsible for reviewing this policy\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"policyForm?.selectedReviewers?.length > 0\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let reviewer of policyForm?.selectedReviewers\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('reviewer', reviewer)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"reviewer.member_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ reviewer.member_name }}</span\n >\n </ng-container>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('reviewer', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length == 0 &&\n policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select a reviewer for this policy.\n </p>\n\n <label class=\"vx-control-panel\">When? </label>\n\n <div\n *ngIf=\"policyForm?.review_frequency_details == ''\"\n class=\"select button-sec\"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n [placeholder]=\"reviewerFrequencyPlaceholder\"\n readonly\n />\n <button\n (click)=\"activateSelector('reviewerFrequency', true)\"\n type=\"button\"\n >\n Set A frequency\n </button>\n </div>\n <div\n *ngIf=\"policyForm?.review_frequency_details != ''\"\n class=\"selected button-sec\"\n >\n <span class=\"chip\">{{ reviewerFrequencyPlaceholder }}</span>\n <button\n *ngIf=\"activeSelector !== 'reviewerFrequency'\"\n type=\"button\"\n class=\"edit\"\n (click)=\"activateSelector('reviewerFrequency', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i>Edit\n </button>\n </div>\n <p\n *ngIf=\"\n submitted &&\n policyForm?.selectedReviewers?.length > 0 &&\n !policyForm?.review_frequency_details\n \"\n class=\"error-message\"\n [appScrollInView]=\"true\"\n >\n Select the review schedule for this policy.\n </p>\n\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('reviewer_attachments', $event)\"\n #formatEvidence\n [mode]=\"'policyReviewer'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.documentsAndLinks\"\n >\n </app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Overseer -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addOverseers\"\n [class.active]=\"\n activeSelector === 'ccEmail' || activeSelector === 'ccFail'\n \"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.CCEmail?.length > 0 || policyForm?.CCFailEmail?.length > 0\n \"\n >\n <img\n *ngIf=\"\n (policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCEmail?.length == 0) ||\n activeSelector === 'ccEmail' ||\n activeSelector === 'ccFail'\n \"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/oversight.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"\n (policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCEmail?.length > 0) &&\n activeSelector !== 'ccEmail' &&\n activeSelector !== 'ccFail'\n \"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">Oversight</label>\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCEmail?.length == 0 &&\n policyForm?.CCGroupEmail.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccEmail', true)\"\n placeholder=\"Who should have oversight of this policy?\"\n readonly\n />\n </div>\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCEmail?.length > 0 ||\n policyForm?.CCGroupEmail.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccEmail of policyForm?.CCEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccEmail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccEmail.employee_name }}</span\n >\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\n (click)=\"ccEmailPopover.popover()\"\n placement=\"left\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCEmail?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccEmail', policyForm?.CCEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCEmail[0].employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCEmail[0].employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCEmail?.length > 1\"\n >\n +{{ policyForm?.CCEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCEmail.length > 0 &&\n policyForm?.CCGroupEmail?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCGroupEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccGroupEmail', policyForm?.CCGroupEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCGroupEmail[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCGroupEmail[0]?.group_name }}</span\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\n (click)=\"overseerGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCGroupEmail?.length > 1\"\n >\n +{{ policyForm?.CCGroupEmail?.length - 1 }}\n </button>\n </div>\n </div>\n\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccEmail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n\n <div\n class=\"select\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length == 0 &&\n policyForm?.CCFailEmailGroup?.length == 0\n \"\n >\n <input\n type=\"text\"\n (click)=\"activateSelector('ccFail', true)\"\n placeholder=\"Who should be notified if the policy is not attested on time?\"\n readonly\n />\n </div>\n\n <div\n class=\"selected\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 ||\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"!groupEnabled\"\n >\n <ng-container\n *ngFor=\"let ccFail of policyForm?.CCFailEmail?.slice(0, 1)\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', ccFail)\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"ccFail.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ ccFail.employee_name }}</span\n >\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\n (click)=\"ccFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.slice(1).length }}\n </button>\n </div>\n\n <div *ngIf=\"groupEnabled\" class=\"chip-container\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"groupEnabled && policyForm?.CCFailEmail.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"remove('ccFail', policyForm?.CCFailEmail[0])\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmail[0]?.employee_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmail[0]?.employee_name }}</span\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 greenBg\"\n appPopover\n (click)=\"overseerFailPopover.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmail?.length > 1\"\n >\n +{{ policyForm?.CCFailEmail?.length - 1 }}\n </button>\n </div>\n\n <div\n class=\"vx-fs-12 vx-paragraph-txt vx-ml-2 vx-mr-2\"\n *ngIf=\"\n policyForm?.CCFailEmail?.length > 0 &&\n policyForm?.CCFailEmailGroup?.length > 0\n \"\n >\n &\n </div>\n\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 0\"\n >\n <i\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n (click)=\"\n remove('ccGroupFailEmail', policyForm?.CCFailEmailGroup[0])\n \"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.CCFailEmailGroup[0]?.group_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.CCFailEmailGroup[0]?.group_name }}</span\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\n (click)=\"overseerFailGroup.popover()\"\n placement=\"right\"\n *ngIf=\"policyForm?.CCFailEmailGroup?.length > 1\"\n >\n +{{ policyForm?.CCFailEmailGroup?.length - 1 }}\n </button>\n </div>\n </div>\n <button\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector('ccFail', true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #ccEmailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccEmail of policyForm?.CCEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccEmail', ccEmail)\"\n >&#xe90d;</i\n >\n {{ ccEmail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-popover #ccFailPopover [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let ccFail of policyForm?.CCFailEmail | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i class=\"icons\" (click)=\"remove('ccFail', ccFail)\"\n >&#xe90d;</i\n >\n {{ ccFail.employee_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n </div>\n </div>\n </div>\n\n <!-- Related Documents -->\n <div\n class=\"form-group-row\"\n [appScrollInView]=\"scrollToBottom\"\n *ngIf=\"policyForm.addAssociatedDocuments\"\n [class.disabled]=\"activeSelector && activeSelector !== 'name'\"\n >\n <div class=\"left\">\n <img\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length == 0\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/format-evidence.svg\"\n alt=\"im\"\n />\n\n <svg\n *ngIf=\"policyForm.associatedDocuments.formatFiles?.length > 0\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">RELATED DOCUMENTS</label>\n <app-format-and-evidence\n (updateFiles)=\"saveSelectedList('associatedDocuments', $event)\"\n [mode]=\"'policy'\"\n [organization_id]=\"organization_id\"\n [formatEvidanceData]=\"policyForm?.associatedDocuments\"\n ></app-format-and-evidence>\n </div>\n </div>\n </div>\n\n <!-- Link Programs & Responsibilities -->\n <div\n *ngIf=\"policyForm?.addLinkProgram\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'linkProgram'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'linkProgram' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div\n class=\"left\"\n [class.checked]=\"\n policyForm?.programSelectedValues?.program?.category_id\n \"\n >\n <img\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/link-items.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\"\n >LINK PROGRAMS & RESPONSIBILITIES</label\n >\n <div\n *ngIf=\"!policyForm?.programSelectedValues?.program?.category_id\"\n (click)=\"activateSelector('linkProgram', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select Programs & responsibilities that are<br />associated with\n this policy.\n </div>\n </div>\n\n <div\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n *ngIf=\"policyForm?.programSelectedValues?.program?.category_id\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i\n (click)=\"\n remove('linkProgram', policyForm?.programSelectedValues)\n \"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policyForm?.programSelectedValues?.program?.name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policyForm?.programSelectedValues?.program?.name }}</span\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\n (click)=\"programResponsibilityPopover.popover()\"\n placement=\"left\"\n >\n +4\n </button> -->\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li *ngFor=\"let data of [1, 1, 1, 1, 1, 1, 1]\">\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n 'Reporting information security weaknesses'\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n Reporting information security weaknesses\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n (click)=\"activateSelector('linkProgram', true)\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Assessment -->\n <div\n *ngIf=\"policyForm.addLinkAssessment\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === 'isAssessment'\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isAssessment' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"policyForm?.assessment?.length\">\n <img\n *ngIf=\"!policyForm?.assessment?.length\"\n src=\"https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/assessments.svg\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"policyForm?.assessment?.length\"\n class=\"checkIcon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK ASSESSMENTS</label>\n <div\n *ngIf=\"policyForm?.assessment?.length === 0\"\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select assessments that are associated with this<br />policy.\n </div>\n </div>\n\n <div\n *ngIf=\"policyForm?.assessment?.length > 0\"\n class=\"selectBoxSuccess vx-pl-2 vx-pr-3 vx-d-flex vx-align-center vx-justify-between\"\n >\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{\n policyForm.assessment[0]?.assessmentDetails?.assessment_name\n }}</span\n >\n </div>\n <app-popover\n #programResponsibilityPopover\n [dontCloseonClick]=\"true\"\n >\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"let assessment of policyForm.assessment | slice : 1\"\n >\n <div class=\"avatar-card\">\n <span\n class=\"value\"\n [appTooltip]=\"\n assessment?.assessmentDetails?.assessment_name\n \"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >\n <i class=\"icons\">&#xe90d;</i>\n {{ assessment?.assessmentDetails?.assessment_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <button\n (click)=\"activateSelector('isAssessment', true)\"\n class=\"editBtn vx-fs-11 vx-fw-600 vx-txt-blue vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"\n >\n <i class=\"icons vx-mr-1\">&#xe90c;</i> EDIT\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Link Related Polices -->\n\n <div\n *ngIf=\"policyForm.addLinkPolicies\"\n [appScrollInView]=\"scrollToBottom\"\n class=\"form-group-row\"\n [class.active]=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [class.disabled]=\"\n activeSelector &&\n activeSelector !== 'isLinkedPolices' &&\n sideSelectorElements.includes(activeSelector)\n \"\n >\n <div class=\"left\" [class.checked]=\"SelectedListOfPolicies\">\n <img\n *ngIf=\"!SelectedListOfPolicies?.length\"\n [src]=\"LINKS.linkedPolicyImage\"\n alt=\"\"\n />\n\n <svg\n *ngIf=\"SelectedListOfPolicies?.length\"\n class=\"checkIcon\"\n [xmlns]=\"LINKS.checked\"\n viewBox=\"0 0 52 52\"\n >\n <circle\n class=\"checkIcon__circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkIcon__check\"\n fill=\"none\"\n d=\"M14.1 27.2l7.1 7.2 16.7-16.8\"\n />\n </svg>\n </div>\n <div class=\"right\">\n <div class=\"vx-form-group\">\n <label class=\"vx-control-panel\">LINK RELATED POLICIES</label>\n <div\n *ngIf=\"SelectedListOfPolicies?.length === 0\"\n (click)=\"activateSelector('isLinkedPolices', true)\"\n class=\"selectBoxEnable vx-pl-3 vx-pr-3 vx-d-flex vx-align-center\"\n [class.disabled]=\"false\"\n >\n <div class=\"selectBoxPlacehoder vx-fs-13 vx-paragraph-txt vx-lh-4\">\n Select policies that are associated with this policy.\n </div>\n </div>\n\n <div class=\"selected\" *ngIf=\"SelectedListOfPolicies?.length > 0\">\n <div\n class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\"\n >\n <ng-container\n *ngFor=\"let policy of SelectedListOfPolicies.slice(0, 1)\"\n >\n <i\n (click)=\"remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\"\n class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\"\n >&#xe9ae;</i\n >\n <span\n class=\"chipName vx-fs-11 vx-label-txt\"\n [appTooltip]=\"policy?.contract_name\"\n placement=\"bottom-left\"\n delay=\"0\"\n type=\"black\"\n [tooltipMandatory]=\"false\"\n >{{ policy?.contract_name }}</span\n >\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\"\n *ngIf=\"SelectedListOfPolicies?.length > 1\"\n type=\"button\"\n appPopover\n (click)=\"relatedPolicy.popover()\"\n placement=\"left\"\n >\n +{{ SelectedListOfPolicies?.slice(1).length }}\n </button>\n </div>\n <button\n *ngIf=\"activeSelector !== CONSTANTS.LINK_POLICY\"\n class=\"edit\"\n type=\"button\"\n (click)=\"activateSelector(CONSTANTS.LINK_POLICY, true)\"\n >\n <i class=\"icons\">&#xe9ba;</i> Edit\n </button>\n </div>\n <app-popover #relatedPolicy [dontCloseonClick]=\"true\">\n <div class=\"wf-action-list\">\n <ul class=\"action-item\">\n <li\n *ngFor=\"\n let policy of SelectedListOfPolicies | slice : 1;\n let j = index\n \"\n >\n <div class=\"avatar-card\">\n <span class=\"value\">\n <i\n class=\"icons\"\n (click)=\"\n remove(CONSTANTS.LINK_POLICY, policy?.contract_id)\n \"\n >&#xe90d;</i\n >\n {{ policy?.contract_name }}\n </span>\n </div>\n </li>\n </ul>\n </div>\n </app-popover>\n <app-cs-switch\n [(ngValue)]=\"policyForm.isPortalDisplayEnabled\"\n [class.disabled]=\"policyForm?.LinkedPolicies == 0\"\n class=\"who-toggle\"\n >DISPLAY ON THE POLICY PORTAL\n <i\n class=\"icons\"\n [appTooltip]=\"CONSTANTS.LINK_POLICY_HELP_TEXT\"\n placement=\"bottom-right\"\n type=\"white\"\n delay=\"0\"\n [tooltipMandatory]=\"true\"\n >&#xe91f;</i\n ></app-cs-switch\n >\n </div>\n </div>\n </div>\n </div>\n\n <app-checkbox-list\n [config]=\"categoryConfig\"\n [twoColumn]=\"false\"\n [itemsList]=\"categoryList\"\n [selectedItems]=\"policyForm.selectedCategories\"\n [identifierKey]=\"'_id'\"\n [displayKey]=\"'item_name'\"\n [tooltipKey]=\"'item_name'\"\n *ngIf=\"activeSelector === 'category'\"\n (saveList)=\"saveSelectedList('category', $event)\"\n (closeList)=\"disableSelector()\"\n [loaded]=\"!categoriesListLoaded\"\n >\n </app-checkbox-list>\n <!-- <app-checkbox-list [config]=\"approvalWorkflowConfig\" [twoColumn]=\"true\"\n [itemsList]=\"\"\n [selectedItems]=\"policyForm.issueCCUsers\" [identifierKey]=\"'employee_email'\" [displayKey]=\"'employee_name'\" [tooltipKey]=\"'employee_email'\"\n *ngIf=\"activeSelector==='ISSUE_CC'\" (saveList)=\"selectorAction($event,'ISSUE_CC')\"\n (closeList)=\"fieldDeselector('ISSUE_CC')\">\n</app-checkbox-list> -->\n\n <app-responsibility-centers-list\n *ngIf=\"activeSelector === 'rc'\"\n [responsibilityCentersList]=\"rcList\"\n [selectedResponsibilityCenters]=\"policyForm.selectedRCs\"\n [rcIdKey]=\"'item_id'\"\n (saveSelectedList)=\"saveSelectedList('rc', $event)\"\n (closeRcList)=\"disableSelector()\"\n [loaded]=\"rcListLoaded\"\n >\n </app-responsibility-centers-list>\n\n <app-link-related-policies\n *ngIf=\"activeSelector === CONSTANTS.LINK_POLICY\"\n [policyId]=\"policyId\"\n [mode]=\"mode\"\n [selectedPolicies]=\"SelectedListOfPolicies\"\n (closeLinkPolicyList)=\"disableSelector()\"\n (selectedList)=\"saveSelectedList(CONSTANTS.LINK_POLICY, $event)\"\n ></app-link-related-policies>\n\n <app-users-radio-list\n *ngIf=\"activeSelector === 'reviewer'\"\n [itemEmailKey]=\"'member_email'\"\n [usersList]=\"allReviewers\"\n [headerText]=\"'Select a Reviewer'\"\n [selectedUsers]=\"policyForm.selectedReviewers\"\n [userIdKey]=\"'member_id'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('reviewer', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-users-radio-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccEmail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccEmail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccEmail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCEmail\"\n [selectedGroups]=\"policyForm.CCGroupEmail\"\n (save)=\"saveSelectedList('ccEmail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'ccFail' && !groupEnabled\"\n [usersList]=\"overseersList\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [userIdKey]=\"'employee_id'\"\n [itemNameKey]=\"'employee_name'\"\n (saveSelectedList)=\"saveSelectedList('ccFail', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-owner-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'ccFail' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"overseersList\"\n [groupList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.CCFailEmail\"\n [selectedGroups]=\"policyForm.CCFailEmailGroup\"\n (save)=\"saveSelectedList('ccFail', $event)\"\n (cancel)=\"disableSelector()\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-group-users-list\n *ngIf=\"activeSelector === 'assignees' && !groupEnabled\"\n [usersList]=\"assigneesList\"\n [groupsList]=\"overseerGroupsList\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [userIdKey]=\"'my_member_id'\"\n (saveSelectedList)=\"saveSelectedList('assignees', $event)\"\n (closeUsersList)=\"disableSelector()\"\n >\n </app-group-users-list>\n\n <user-group-list\n *ngIf=\"activeSelector === 'assignees' && groupEnabled\"\n [groupEnabled]=\"true\"\n [userlist]=\"ownerlist\"\n [groupList]=\"overseerGroupsList\"\n (save)=\"saveSelectedList('assignees', $event)\"\n (cancel)=\"disableSelector()\"\n [selectedGroups]=\"policyForm.selectedGroupAssignee\"\n [selectedUsers]=\"policyForm.selectedAssignees\"\n [featureflag]=\"groupEnabled\"\n >\n </user-group-list>\n\n <app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n >\n </app-owner-list>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'frequency'\"\n [mode]=\"'policy'\"\n [frequencyDetails]=\"frequencyDetails\"\n (selectedFrequency)=\"frequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <app-frequency-container\n *ngIf=\"activeSelector === 'reviewerFrequency'\"\n [mode]=\"'reviewerFrequency'\"\n [frequencyDetails]=\"reviewerFrequencyDetails\"\n (selectedFrequency)=\"reviewerFrequencyData($event)\"\n [feature]=\"feature\"\n [pageType]=\"'policy'\"\n (closeFrequency)=\"disableSelector()\"\n ></app-frequency-container>\n\n <vc-link-program\n *ngIf=\"activeSelector === 'linkProgram'\"\n (close)=\"disableSelector()\"\n [policy]=\"policyForm\"\n [selectedProgram]=\"policyForm?.programSelectedValues\"\n [mode]=\"mode\"\n [selectedLinkProgram]=\"selectedLinkProgram\"\n (changeTab)=\"changeTab('linkedPrograms')\"\n (updatedProgramDetails)=\"updatedProgramDetails($event)\"\n >\n </vc-link-program>\n\n <app-checkpoints-policy-container\n (closeCheckPoint)=\"disableSelector()\"\n [checkpointData]=\"policyForm?.checkpointDetails\"\n [requiredPoint]=\"policyForm?.passingMarks\"\n *ngIf=\"activeSelector === 'checkpoints'\"\n (saveCheckPoint)=\"saveSelectedList('checkpoints', $event)\"\n ></app-checkpoints-policy-container>\n <app-loader-inline *ngIf=\"loader\"></app-loader-inline>\n\n <app-approval-workflow\n *ngIf=\"enableApprovalWorkflow\"\n [selectedCategory]=\"policyForm?.selectedCategories\"\n [approverWorkFlowList]=\"approverWorkFlowList\"\n [allApprovers]=\"allApprovers\"\n (listCancelClicked)=\"listCancelClicked($event)\"\n (selectedWorkflowNext)=\"selectedApprovalWorkflow($event)\"\n (saveApprovalWorkflow)=\"approvalWorkflowAPICall($event)\"\n [editApprovalWorkflow]=\"editApprovalWorkflow\"\n [createApprovalClick]=\"createApprovalClick\"\n (closeCreateClicked)=\"closeClickedCreateForm()\"\n [editWorkflowLevel]=\"editWorkflowLevel\"\n ></app-approval-workflow>\n <!-- <app-select-approvers></app-select-approvers> -->\n\n <app-policy-access\n *ngIf=\"activeSelector === 'policyAccess'\"\n [policyAccessType]=\"policyForm?.policy_access_type\"\n (close)=\"disableSelector()\"\n [orgUsersList]=\"usersList\"\n [usersAccessList]=\"usersAccessList\"\n [groupList]=\"overseerGroupsList\"\n [groupsAccessList]=\"groupsAccessList\"\n [selectedUsers]=\"policyForm?.policy_access_owners\"\n [selectedGroups]=\"policyForm?.policy_access_groups\"\n [disabledIds]=\"usersAccessListIds\"\n [disabledGroupIds]=\"groupsAccessListIds\"\n [futureUsersWillSelect]=\"policyForm?.availableOnPortal\"\n (saveCheckPoint)=\"saveSelectedList('policyAccess', $event)\"\n (setPolicyAccessType)=\"policyForm.policy_access_type = $event\"\n >\n </app-policy-access>\n</ng-container>\n<ng-container *ngIf=\"showCreateDocuments\">\n <!-- <app-create-documents *ngIf=\"showCreateDocuments\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n ></app-create-documents> -->\n <lib-document-section\n *ngIf=\"showCreateDocuments\"\n [templateView]=\"isTemplateClosed\"\n [organization_id]=\"organization_id\"\n [member_obj_id]=\"member_obj_id\"\n [userInfo]=\"userInfo\"\n [policyId]=\"policyId\"\n [feature]=\"feature\"\n [templateUrl]=\"templateUrl\"\n [isTemplateOpened]=\"templateView\"\n [policyName]=\"policyForm.policyName\"\n (disconnectRefresh)=\"disconnectRefresh.emit(false)\"\n (editPolicy)=\"editPolicyFromDocuments()\"\n (openTemplate)=\"templateView = true\"\n ></lib-document-section>\n</ng-container>\n\n<app-assessment-list\n *ngIf=\"activeSelector === 'isAssessment'\"\n [program_ids]=\"''\"\n [isEdit]=\"policyForm?.assessment?.length\"\n (cancelAssessment)=\"saveSelectedList('isAssessment', false)\"\n [selectedAssessment]=\"policyForm?.assessment[0]\"\n [mode]=\"'policy'\"\n (onAssessmentSelect)=\"\n onAssessmentSelect($event); saveSelectedList('isAssessment', false)\n \"\n></app-assessment-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'approvers' && false\"\n [listHeading]=\"'Select Approvers'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"true\"\n [selectedUsers]=\"\n addMoreLevels\n ? []\n : policyForm.selectedApprovers[approversListIndex].approvers\n \"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('approvers', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [reviewerWorkflowType]=\"workflowType\"\n (reviewerWorkflowTypeChange)=\"reviewerTypeChange($event)\"\n [workflowList]=\"workflowList\"\n [workflowText]=\"'Approval Workflow'\"\n>\n</app-owner-list>\n\n<app-owner-list\n *ngIf=\"activeSelector === 'owners'\"\n [listHeading]=\"'Select Owner(s)'\"\n [singularText]=\"'User selected'\"\n [pluralText]=\"'Users selected'\"\n [usersList]=\"allApprovers\"\n [showWorkflow]=\"false\"\n [userIdKey]=\"'member_id'\"\n [itemEmailKey]=\"'member_email'\"\n [itemNameKey]=\"'member_name'\"\n (saveSelectedList)=\"saveSelectedList('owners', $event)\"\n (closeUsersList)=\"disableSelector()\"\n [mode]=\"mode\"\n [selectedUsers]=\"policyForm?.policy_owners ?? []\"\n>\n</app-owner-list>\n\n<app-select-template-list\n *ngIf=\"templateView\"\n [selectedCategoryId]=\"policyForm?.selectedCategories\"\n (onTemplateSelect)=\"onTemplateSelect($event)\"\n></app-select-template-list>\n", styles: ["@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";::ng-deep .workflow-policy{position:relative}::ng-deep .workflow-policy app-cs-switch{display:block}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value{color:#747576!important;font-size:11px!important;font-weight:500!important;justify-content:flex-end!important;line-height:16px;width:100%!important}::ng-deep .workflow-policy app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:12px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 8px 0 4px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected{height:56px;padding:4px 12px 8px;display:block}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label{min-width:auto;padding:0;text-align:left;margin:0 0 4px;border-right:none;width:100%;display:flex;align-items:center}::ng-deep .workflow-policy .form-group-row .right .approval-workflow .selected .workflow-label p.description{font-size:10px;margin-left:6px}::ng-deep .workflow-policy .form-group-row .right .approval-workflow cs-select .selection-wrap .input-group:before{display:none!important}::ng-deep .workflow-policy app-frequency-container app-frequency-weekly .frequency-weekly app-frequency-lifecycle .frequency-lifecycle-responsibility-inner-item{height:unset!important}.disabled{opacity:.5;pointer-events:none}.who-toggle{margin-top:10px}\n", "@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";::-webkit-scrollbar-track{background-color:#f1f1f1;position:absolute}::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}button{font-family:Poppins,sans-serif}::ng-deep input.textField{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;font-size:13px;color:#747576;padding:8px 12px;position:relative;height:2.5rem;width:100%;transition:all .2s ease-in-out}::ng-deep input.textField::placeholder{font-size:13px;color:#747576}::ng-deep input.textField:hover,::ng-deep input.textField:focus{outline:none;border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectBoxEnable:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#747576;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .selectBoxEnable:hover,::ng-deep .selectBoxEnable:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectBoxEnable.disabled{background:#f1f1f1;pointer-events:none;opacity:1}::ng-deep .selectBoxEnable.withBtn:after{display:none}::ng-deep .selectBoxEnable.withBtn button.setBtn{background:transparent;border-radius:0;border:none;min-width:98px}::ng-deep .selectBoxSuccess{background:#f8f8f8;border-radius:.25rem;border:1px solid #f1f1f1;min-height:2.5rem;position:relative}::ng-deep .selectBoxSuccess .selectBoxText{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:22rem}::ng-deep .selectBoxSuccess button{background:transparent;border-radius:0;border:none}::ng-deep .selectBoxSuccess button.deleteBtn{color:#d93b41}::ng-deep .selectBoxSuccess .level-left{border-right:1px solid #f1f1f1;height:2.375rem;width:5rem}::ng-deep .selectBoxSuccess .level-left .level-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:4.5rem}::ng-deep .chipContainer{background:#fff;border-radius:.125rem;box-shadow:0 0 2px #1e5dd340;height:1.5rem}::ng-deep .chipContainer .cross{cursor:pointer;min-width:16px;width:16px;height:16px;display:flex;align-items:center;justify-content:center;background:transparent;border-radius:2px;margin-left:-4px}::ng-deep .chipContainer .cross:hover{background:#f1f1f1}::ng-deep .chipContainer .chipName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:6rem}::ng-deep .chipContainer .chipName.no-width{max-width:unset}::ng-deep .chipContainer .chipName.full-width{max-width:25rem}::ng-deep .chipContainer button.countBtn{background:#1e5dd3;border-radius:1.25rem;border:none;min-width:1.5rem;height:1rem;margin:0 0 0 .5rem;padding:0 .25rem}::ng-deep .chipContainer button.countBtn.greenBg{background:#34aa44}::ng-deep .workflowLavel{background:#f1f1f1;border-radius:.125rem;color:#042e7d;min-width:1rem;height:1rem}::ng-deep .reviewSelection{border-radius:.25rem;border:1px solid #dbdbdb;transition:all .2s ease-in-out}::ng-deep .reviewSelection:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .selectButton{background:#fff;border-radius:.25rem;border:1px solid #dbdbdb;cursor:pointer;height:2.5rem;position:relative;transition:all .2s ease-in-out}::ng-deep .selectButton:hover,::ng-deep .selectButton:focus{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep button.createNewBtn{background:transparent;border-radius:0;border:none}::ng-deep .vx-form-group{display:block;position:relative;margin-bottom:20px}::ng-deep .vx-form-group:after{content:\"\";display:block;clear:both}::ng-deep .vx-form-group .select{position:relative}::ng-deep .vx-form-group .select:after{border-bottom-style:solid;border-bottom-width:1px;border-right-style:solid;border-right-width:1px;border-color:#707070;content:\"\";display:inline-block;right:12px;position:absolute;top:calc(50% - 4px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .vx-form-group .select input{cursor:pointer;padding-right:30px!important}::ng-deep .vx-form-group .select .custom-input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:3px 12px;line-height:16px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .vx-form-group .select .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:13px;width:94%;display:block;pointer-events:none;opacity:.8}::ng-deep .vx-form-group .select .custom-input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .select .custom-input.frequency-custom-input{padding-right:108px;display:flex;align-items:center}::ng-deep .vx-form-group .select+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .select+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .select+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .select~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .select~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .select.button-sec:after{display:none}::ng-deep .vx-form-group .select.button-sec button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;position:absolute;top:12px;right:8px;padding:0;margin:0}::ng-deep .vx-form-group .select+.vx-control-panel{margin-top:8px}::ng-deep .vx-form-group .select+.selected{margin-top:8px}::ng-deep .vx-form-group .select.select{margin-top:8px}::ng-deep .vx-form-group .upload-format{border:1px solid #dbdbdb;border-radius:4px;padding:8px 12px;display:block}::ng-deep .vx-form-group .upload-format span.text{line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:block;margin-bottom:6px}::ng-deep .vx-form-group .upload-format .radio-group{display:flex}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio{display:inline-block}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;margin-left:8px}::ng-deep .vx-form-group .upload-format .radio-group app-cs-radio+app-cs-radio{margin-left:12px}::ng-deep .vx-form-group .upload-format~.upload-format{margin-top:4px}::ng-deep .vx-form-group .form-tab{display:flex;justify-content:flex-start}::ng-deep .vx-form-group .form-tab button{background:transparent;color:#161b2f;font-size:11px;line-height:16px;text-transform:uppercase;cursor:pointer;padding:8px 8px 8px 0;border:none;outline:none;font-weight:500}::ng-deep .vx-form-group .form-tab button:disabled{opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .form-tab button+button{padding:8px}::ng-deep .vx-form-group .form-tab button.active{color:#1e5dd3}::ng-deep .vx-form-group .tab-group{border:1px solid #dbdbdb;border-radius:4px;padding:0;display:block;position:relative;transition:all .2s ease-in-out}::ng-deep .vx-form-group .tab-group:hover{border-color:#1e5dd3;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group .tab-group .upload-file{padding:16px 62px 16px 24px;display:flex;align-items:center;justify-content:space-between}::ng-deep .vx-form-group .tab-group .upload-file .image{width:80px}::ng-deep .vx-form-group .tab-group .upload-file .browse span{display:inline-block;font-size:12px;color:#747576;line-height:16px;padding:0 4px}::ng-deep .vx-form-group .tab-group .upload-file .browse .label{font-size:11px;color:#1e5dd3;line-height:16px;font-weight:600;text-transform:uppercase;margin:0;padding:0}::ng-deep .vx-form-group .tab-group .upload-file .browse .label input{opacity:0;position:absolute;margin:0;padding:0;inset:0;cursor:pointer;width:100%}::ng-deep .vx-form-group .tab-group.active{border-color:#1e5dd3}::ng-deep .vx-form-group .tab-group.uploaded{margin-top:4px}::ng-deep .vx-form-group .tab-group.uploaded .upload-file{padding:8px 0!important;text-align:center}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .image{display:none}::ng-deep .vx-form-group .tab-group.uploaded .upload-file .browse{width:100%;text-align:center}::ng-deep .vx-form-group .tab-group+label.vx-form-group{margin-top:8px;margin-bottom:4px}::ng-deep .vx-form-group .file-list{background:#fbfbfb;border:1px solid #f1f1f1;border-radius:4px;padding:12px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;position:relative}::ng-deep .vx-form-group .file-list span.file-name{color:#747576;line-height:16px;font-size:11px;font-weight:400;cursor:pointer;max-width:calc(100% - 20px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .vx-form-group .file-list .button-group{display:flex}::ng-deep .vx-form-group .file-list button{font-size:12px;color:#eb2424;cursor:pointer;display:flex;padding:0;border:none;outline:none;background:transparent}::ng-deep .vx-form-group .file-list button.edit{color:#1e5dd3}::ng-deep .vx-form-group .file-list button+button{margin-left:16px}::ng-deep .vx-form-group .file-list+.file-list{margin-top:4px}::ng-deep .vx-form-group .file-list .file-container{display:flex;justify-content:space-between;width:100%}::ng-deep .vx-form-group .file-list.policy{background:#fff}::ng-deep .vx-form-group .file-list cs-select{position:relative;margin-top:8px;width:100%}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group input.value{height:32px!important;font-size:13px!important}::ng-deep .vx-form-group .file-list cs-select .selection-wrap .input-group i{right:12px!important;top:12px!important}::ng-deep .vx-form-group .file-list app-line-loader{display:block;position:absolute;left:10px;right:10px;bottom:0}::ng-deep .vx-form-group label.vx-control-panel{color:#161b2f;font-size:11px;font-weight:500;line-height:16px;margin-bottom:8px;display:block;text-transform:uppercase;text-align:left}::ng-deep .vx-form-group label.vx-control-panel.custom-tag{font-size:10px}::ng-deep .vx-form-group label.vx-control-panel.vx-mt-8{margin-top:8px}::ng-deep .vx-form-group label.vx-control-panel span.required{color:#eb2424;font-size:14px;font-weight:500;position:relative;top:-2px}::ng-deep .vx-form-group label.vx-control-panel .button{background:transparent;border:none;display:inline-flex;float:right;color:#1e5dd3;text-transform:uppercase;font-weight:600;cursor:pointer;font-size:11px;padding:0;margin:0}::ng-deep .vx-form-group label.vx-control-panel app-cs-switch{float:right;display:block}::ng-deep .vx-form-group label.vx-control-panel i{margin-left:8px;font-size:12px;color:#1e5dd3;cursor:pointer;position:relative;top:1px}::ng-deep .vx-form-group label.vx-control-panel i.depreciation-icon{color:#e4b700;font-size:16px;position:relative;top:3px}::ng-deep .vx-form-group label.vx-control-panel .checkpoint-version{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:10px;font-weight:600;line-height:14px;margin-left:4px;padding:0 2px}::ng-deep .vx-form-group input[type=text],::ng-deep .vx-form-group .input{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;outline:none;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{color:#747576;font-weight:400}::ng-deep .vx-form-group input[type=text]:focus,::ng-deep .vx-form-group .input:focus,::ng-deep .vx-form-group input[type=text]:hover,::ng-deep .vx-form-group .input:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group input[type=text].error,::ng-deep .vx-form-group .input.error{border-color:#eb2424;color:#eb2424;margin-bottom:4px}::ng-deep .vx-form-group input[type=text].error:focus,::ng-deep .vx-form-group .input.error:focus{box-shadow:0 0 5px #d31e1e45}::ng-deep .vx-form-group input[type=text]:disabled,::ng-deep .vx-form-group .input:disabled{background:#f1f1f1;cursor:not-allowed;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group input[type=text]:disabled:hover,::ng-deep .vx-form-group .input:disabled:hover{border-color:#dbdbdb;box-shadow:none}::ng-deep .vx-form-group input[type=text] span.text,::ng-deep .vx-form-group .input span.text{font-size:13px;color:#747576;font-weight:400;display:block;width:100%}::ng-deep .vx-form-group input[type=text] .input-group,::ng-deep .vx-form-group .input .input-group{display:flex;align-items:center}::ng-deep .vx-form-group input[type=text] .input-group.counter,::ng-deep .vx-form-group .input .input-group.counter{min-width:96px;width:96px}::ng-deep .vx-form-group input[type=text] .input-group.counter button,::ng-deep .vx-form-group .input .input-group.counter button{height:24px;width:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:#747576;font-size:8px;cursor:pointer;outline:none}::ng-deep .vx-form-group input[type=text] .input-group.counter input,::ng-deep .vx-form-group .input .input-group.counter input{-webkit-appearance:textfield;-moz-appearance:textfield;height:24px;width:calc(100% - 48px);border:1px solid #f1f1f1;outline:none;padding:0 6px;text-align:center}::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-inner-spin-button,::ng-deep .vx-form-group input[type=text] .input-group.counter input::-webkit-outer-spin-button,::ng-deep .vx-form-group .input .input-group.counter input::-webkit-outer-spin-button{appearance:none;margin:0}::ng-deep .vx-form-group input[type=text]+.file-list,::ng-deep .vx-form-group .input+.file-list{margin-top:8px}::ng-deep .vx-form-group input[type=text]::placeholder,::ng-deep .vx-form-group .input::placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]:-ms-input-placeholder,::ng-deep .vx-form-group .input:-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group input[type=text]::-ms-input-placeholder,::ng-deep .vx-form-group .input::-ms-input-placeholder{font-size:13px}::ng-deep .vx-form-group .classification{height:40px;border-radius:4px;border:1px solid #dbdbdb;background:#fff;padding:8px 12px;display:flex;justify-content:space-between}::ng-deep .vx-form-group .classification label{margin:0 4px 0 0;width:100%;position:relative;z-index:1}::ng-deep .vx-form-group .classification label span{display:block;width:100%;height:24px;border:1px solid #f1f1f1;border-radius:2px;line-height:24px;font-size:10px;text-align:center;color:#747576;font-weight:500;position:relative;text-transform:uppercase}::ng-deep .vx-form-group .classification label span:before{height:2px;content:\"\";top:0;right:0;left:0;border-radius:2px;position:absolute;transition:all .2s ease-in-out}::ng-deep .vx-form-group .classification label input{opacity:0;position:absolute;inset:0;margin:0;padding:0;width:100%;height:100%;cursor:pointer;z-index:1}::ng-deep .vx-form-group .classification label input:checked+span{color:#fff}::ng-deep .vx-form-group .classification label input:checked+span:before{bottom:0;height:100%;z-index:-1}::ng-deep .vx-form-group .classification label.low span:before{background:#34aa44}::ng-deep .vx-form-group .classification label.low-med span:before{background:#f2bf19}::ng-deep .vx-form-group .classification label.med-high span:before{background:#f29619}::ng-deep .vx-form-group .classification label.high span:before{background:#eb2424}::ng-deep .vx-form-group .classification label:last-of-type{margin-right:0}::ng-deep .vx-form-group .input{display:flex;align-items:center}::ng-deep .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;padding:8px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;display:flex;align-items:center;position:relative;justify-content:space-between}::ng-deep .vx-form-group .selected.first-field{z-index:2}::ng-deep .vx-form-group .selected .chip-container{display:flex;width:calc(100% - 60px);align-items:center}::ng-deep .vx-form-group .selected .chip-container.checkpoints{width:calc(100% - 120px)}::ng-deep .vx-form-group .selected .chip-container span.chip{background:#fff;border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;padding:0 8px;color:#1e5dd3;font-size:12px;display:block;width:auto;max-width:100%;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .vx-form-group .selected .chip-container span.chip.disabled{background:#f1f1f1;box-shadow:none;color:#747576;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .selected .chip-container span.chip i{font-weight:400;margin-right:8px;cursor:pointer;font-size:10px;position:relative;top:1px}::ng-deep .vx-form-group .selected .chip-container span.chip span.step{background:#1e5dd3;border-radius:2px;color:#fff;font-size:9px;line-height:14px;padding:0 4px;font-weight:400;text-align:center;min-width:auto;margin-right:4px}::ng-deep .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question{display:flex;align-items:center;justify-content:space-between;width:100%}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.value{color:#1e5dd3;font-size:12px;font-weight:400;line-height:24px;padding:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 80px)}::ng-deep .vx-form-group .selected .chip-container span.chip.with-question span.label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-left:8px}::ng-deep .vx-form-group .selected .chip-container span.value{color:#747576;font-size:13px;line-height:20px;font-weight:400;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 52px);padding:0 4px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text{color:#747576;font-size:10px;font-weight:500;padding:0 8px;width:122px;line-height:14px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first{position:relative;min-width:162px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text.first:before{background:#f1f1f1;content:\"\";position:absolute;top:0;right:0;height:calc(100% + 12px);width:1px}::ng-deep .vx-form-group .selected .chip-container span.checkpoint-point-text .no{color:#1e5dd3}::ng-deep .vx-form-group .selected .chip-container.plus span.chip{max-width:calc(50% - 35px)}::ng-deep .vx-form-group .selected .chip-container.more-one span.chip{max-width:50%}::ng-deep .vx-form-group .selected .chip-container .chip-inner{background:#fff;border-radius:2px;box-shadow:0 2px 4px #1e5dd31a;line-height:24px;padding:0 4px 0 8px;display:flex;align-items:center}::ng-deep .vx-form-group .selected .chip-container .chip-inner .chip{background:transparent;border-radius:0;box-shadow:none;height:auto;line-height:unset;padding:0;color:#747576;max-width:100px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count{border-radius:20px;height:16px;padding:0 6px;border:none;font-size:9px;line-height:16px;margin-left:4px;min-width:20px}::ng-deep .vx-form-group .selected .chip-container .chip-inner button.count.user{background:#34aa44}::ng-deep .vx-form-group .selected .chip-container .chip-inner i.cross{cursor:pointer;position:relative;top:1px;font-size:8px}::ng-deep .vx-form-group .selected button.count{background:#1e5dd3;border-radius:2px;height:24px;padding:0 8px;border:1px solid #1e5dd3;cursor:pointer;outline:none;color:#fff;font:13px;font-weight:500;line-height:20px;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit{border:none;border-radius:0;background:transparent;outline:none;cursor:pointer;display:block;font-size:11px;font-weight:600;color:#1e5dd3;text-transform:uppercase;white-space:nowrap;margin-left:8px}::ng-deep .vx-form-group .selected button.edit i{font-weight:400;font-size:8px;margin-right:4px}::ng-deep .vx-form-group .selected button.close-btn{background:transparent;border:none;padding:0;margin-left:8px;font-size:10px;color:#c7381b;display:flex;align-items:center}::ng-deep .vx-form-group .selected .workflow-label{min-width:92px;padding:4px;text-align:center;margin-left:-8px;margin-right:8px;border-right:1px solid #f1f1f1}::ng-deep .vx-form-group .selected .workflow-label p{margin:0;display:block;text-transform:uppercase}::ng-deep .vx-form-group .selected .workflow-label p.title{font-size:9px;line-height:12px;color:#161b2f;font-weight:500}::ng-deep .vx-form-group .selected .workflow-label p.description{font-size:11px;line-height:16px;color:#161b2f;font-weight:600}::ng-deep .vx-form-group .selected .workflow-label+.chip-container{width:calc(100% - 148px)}::ng-deep .vx-form-group .selected+.selected{margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .selected+app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:5px;text-transform:uppercase}::ng-deep .vx-form-group .selected+app-cs-switch.who-toggle label.cs-switch span.value{color:#747576}::ng-deep .vx-form-group .selected+app-cs-radio{margin-top:8px!important}::ng-deep .vx-form-group .selected~app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group .selected~app-cs-radio label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group .selected.readOnly{pointer-events:none}::ng-deep .vx-form-group .selected span.chip{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .vx-form-group .select-list{position:absolute;background:#fff;box-shadow:0 0 5px #1e5dd345;top:100%;right:0;left:0;z-index:2}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item{width:100%;padding:12px 16px}::ng-deep .vx-form-group .select-list .vx-radio-group label.vx-radio-item:hover{background:#f8f8f8}::ng-deep .vx-form-group ::ng-deep vcomply-editor{margin-top:8px;display:block;pointer-events:auto!important;z-index:1}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container{border-radius:4px;border:1px solid #dbdbdb}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;max-height:100px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ul li{list-style:disc}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol{padding:0 0 0 10px;margin-top:0}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editable-block ol li{list-style:decimal}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools{z-index:1;border-top:1px solid #dbdbdb;transition:none;border-radius:0 0 3px 3px;position:static}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:focus-within .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover{border-color:#1e5dd3!important;box-shadow:0 3px 6px #1e5dd31a}::ng-deep .vx-form-group ::ng-deep vcomply-editor .editor-container:hover .editor-tools{border-color:#1e5dd3!important}::ng-deep .vx-form-group ::ng-deep vcomply-editor+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group app-cs-switch label.cs-switch span.value{font-size:11px;color:#747576;text-transform:uppercase}::ng-deep .vx-form-group app-cs-switch+app-cs-switch{margin-top:8px}::ng-deep .vx-form-group .date-time-picker{display:flex;justify-content:space-between;height:40px;border-radius:4px;border:1px solid #dbdbdb;padding:11px 0;background:#fff}::ng-deep .vx-form-group .date-time-picker:focus-within{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .vx-form-group .date-time-picker .picker-group{width:50%;position:relative;display:flex;align-items:center}::ng-deep .vx-form-group .date-time-picker .picker-group:first-of-type{border-right:1px solid #dbdbdb}::ng-deep .vx-form-group .date-time-picker .picker-group:only-of-type{border:none;width:100%}::ng-deep .vx-form-group .date-time-picker .picker-group input{height:38px;background:transparent;line-height:38px;font-size:13px;color:#747576;transition:all .2s ease-in-out;width:100%;font-weight:400;border:none;padding:0 12px 0 34px;outline:none}::ng-deep .vx-form-group .date-time-picker .picker-group input:focus,::ng-deep .vx-form-group .date-time-picker .picker-group input:hover{box-shadow:none;border:none}::ng-deep .vx-form-group .date-time-picker .picker-group input::placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input:-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group input::-ms-input-placeholder{color:#999;font-size:13px}::ng-deep .vx-form-group .date-time-picker .picker-group i{display:flex;justify-content:center;align-items:center;height:16px;width:12px;position:absolute;left:12px;top:0;color:#747576;font-size:12px;pointer-events:none}::ng-deep .vx-form-group app-cs-radio.main-filed{margin-top:4px;display:block;width:100%}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item{width:100%;position:relative}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.radio{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #dbdbdb;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;color:#707070}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item svg{position:absolute;top:8px;left:12px}::ng-deep .vx-form-group app-cs-radio.main-filed label.radio-item input:checked~span.value{background:#eefcf0;border-color:#34aa44}::ng-deep .vx-form-group app-cs-radio.disabled{pointer-events:none;opacity:.5;filter:grayscale(1);background:#f1f1f1}::ng-deep .vx-form-group .switch-row{display:flex}::ng-deep .vx-form-group .switch-row app-cs-switch{display:block;margin-top:8px}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value{white-space:nowrap;margin-right:0;text-transform:uppercase;color:#747576!important}::ng-deep .vx-form-group .switch-row app-cs-switch label.cs-switch span.value i{display:inline-flex;font-size:11px;cursor:pointer;color:#1e5dd3;align-items:center;line-height:16px;margin:0 4px}::ng-deep .vx-form-group .switch-row app-cs-switch+app-cs-switch{margin-left:8px}::ng-deep .vx-form-group .switch-row.align-right{justify-content:flex-end}::ng-deep .vx-form-group .switch-row.align-right label.cs-switch span.value{margin-right:8px}::ng-deep .vx-form-group .risk-type-field{background:#f8f8f8;border:1px solid #dbdbdb;border-radius:4px;height:40px;display:flex;align-items:center;padding:4px;position:relative;z-index:1}::ng-deep .vx-form-group .risk-type-field .type-item{width:50%;position:relative}::ng-deep .vx-form-group .risk-type-field .type-item button{background:transparent;border:none;border-radius:0;color:#747576;font-size:11px;font-weight:600;text-transform:uppercase;width:100%;height:32px;padding:0 12px;text-align:left}::ng-deep .vx-form-group .risk-type-field .type-item button.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item .info{color:#1e5dd3;font-size:12px;position:absolute;top:10px;right:12px;cursor:pointer}::ng-deep .vx-form-group .risk-type-field .type-item .info.disabled{background:transparent!important;color:#dbdbdb!important;filter:unset!important;opacity:unset!important;pointer-events:none;-webkit-user-select:none;user-select:none}::ng-deep .vx-form-group .risk-type-field .type-item.active button{color:#1e5dd3!important}::ng-deep .vx-form-group .risk-type-field .type-item:nth-child(2).active~.background-glider{transform:translate(100%)}::ng-deep .vx-form-group .risk-type-field .background-glider{background:#fff;border-radius:4px;box-shadow:0 1px 3px #161b2f26;position:absolute;display:flex;width:212px;height:32px;z-index:-1;transition:.25s ease-out}.left{width:36px;height:36px;margin-top:26px;margin-left:-58px;margin-right:20px;display:flex;justify-content:center;align-items:center;position:relative;z-index:10;border-radius:50%}.left.deadline-completed{margin-top:18px}.left.checked{background:transparent}.left img{width:36px}.left .checkIcon{width:32px;height:32px;background:#fff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}.left .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}.left .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}.right{width:100%}.right span.indicator{position:absolute;top:36px;left:-16px;font-size:12px;color:#f0b819;cursor:pointer}.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"] }]
1975
1975
  }], ctorParameters: function () { return [{ type: i1.PolicyService }, { type: i2.SnackBarService }, { type: i3.UiKitService }, { type: i4.AuthService }, { type: i5.ResponsibilityService }, { type: i6.Router }, { type: i6.ActivatedRoute }, { type: i7.FrequencyService }, { type: i8.PlatformLocation }, { type: i0.ChangeDetectorRef }, { type: i9.RestApiService }, { type: i10.CommonService }, { type: i11.OrganizationUserService }, { type: i12.OrganizationCommonService }, { type: i13.ComplianceCommonService }, { type: i14.IframeService }]; }, propDecorators: { pickerChanged: [{
1976
1976
  type: Output
1977
1977
  }], mode: [{
@@ -2009,4 +2009,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
2009
2009
  type: HostListener,
2010
2010
  args: ['document:click', ['$event']]
2011
2011
  }] } });
2012
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXBvbGljeS93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcG9saWN5L3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBVzNDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUtuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLHVCQUF1QjtJQTJLbEMsWUFDVSxhQUE0QixFQUM1QixRQUF5QixFQUN6QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixxQkFBNEMsRUFDNUMsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUMxQyxnQkFBa0MsRUFDMUIsU0FBNEIsRUFDNUIsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsdUJBQWdELEVBQ2hELHlCQUFvRCxFQUNwRCx1QkFBZ0QsRUFDaEQsYUFBNEI7UUFmNUIsa0JBQWEs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QVcsR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQzsrR0E5ekVVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHd6QkFrQkQsVUFBVSw2QkMzRDdDLCt4eklBK3JIQTs7NEZEdHBIYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCO3lqQkFPckIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0kscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNrQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ2IsY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFdUIsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBRTNCLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBNnZFNUQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICduZzItZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uQWxlcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpcm1hdGlvbi1hbGVydCc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbGljeUZvcm0gfSBmcm9tICcuLi93b3JrZmxvdy1pbnRlcmZhY2VzL2NyZWF0ZS1wb2xpY3ktZm9ybSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBQb2xpY3lTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcG9saWN5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZyZXF1ZW5jeVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtYXRBbmRFdmlkZW5jZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZm9ybWF0LWFuZC1ldmlkZW5jZS9mb3JtYXQtYW5kLWV2aWRlbmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvbGluay1wcm9ncmFtL3Jlc3RhcGkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUXzI0SFIsIERFRkFVTFRfVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cy90aW1lLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uVXNlclNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9vcmdhbml6YXRpb24tdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9jb21tb24td29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBsaWFuY2VDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvY29tbW9uLXdvcmtmbG93LXNlcnZpY2VzL2NvbXBsaWFuY2UtY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09OU1RBTlRTIH0gZnJvbSAnLi4vbGluay1yZWxhdGVkLXBvbGljaWVzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMSU5LUyB9IGZyb20gJy4uL3dvcmtmbG93L3NoYXJlZC9jb25zdGFudHMvY2RuLWxpbmsuY29uc3RhbnQnO1xuaW1wb3J0IHsgSWZyYW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2lmcmFtZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXBvbGljeScsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50Lmxlc3MnLCAnLi4vZm9ybXMubGVzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1BvbGljeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENPTlNUQU5UUzogYW55ID0gQ09OU1RBTlRTO1xuICBMSU5LUzogYW55ID0gTElOS1M7XG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XG4gIEBJbnB1dCgpIHBvbGljeUlkID0gJyc7XG4gIEBJbnB1dCgpIGZlYXR1cmU6IGFueTtcbiAgQE91dHB1dCgpIHNob3dDb25maXJtYXRpb25BbGVydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXIhOiBEYXRlUGlja2VyQ29tcG9uZW50O1xuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNoaWZ0VG9FZGl0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgY29udmVydEZpbGVEYXRhOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yeSA9ICcnO1xuICBASW5wdXQoKSBpc1NlbmRGb3JBdHRlc3RhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0ZW1wbGF0ZUlkOiBzdHJpbmcgPSAnJztcblxuICBAVmlld0NoaWxkKCdmb3JtYXRFdmlkZW5jZScpIGZvcm1hdEV2aWRlbmNlITogRm9ybWF0QW5kRXZpZGVuY2VDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0ZVBpY2tlclBvcFVwITogRWxlbWVudFJlZjtcblxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xuICAgIG1vZGU6ICdwcmltZScsXG4gICAgY29sb3JQYWxldHRlOiB0cnVlLFxuICAgIGxpbms6IHRydWUsXG4gICAgcGxhY2Vob2xkZXI6ICdBZGQgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBwb2xpY3kuJyxcbiAgfTtcbiAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnO1xuICBzY3JvbGxUb0JvdHRvbSA9IGZhbHNlO1xuICBuYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbiA9IGZhbHNlO1xuXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gIHJjTGlzdDogYW55ID0gW107XG4gIHVzZXJzTGlzdDogYW55ID0gW107XG4gIGFsbEFwcHJvdmVyczogYW55ID0gW107XG4gIGFsbFJldmlld2VyczogYW55ID0gW107XG4gIGFzc2lnbmVlc0xpc3Q6IGFueSA9IFtdO1xuICBvd25lcmxpc3Q6IGFueSA9IFtdO1xuICByZXZpZXdlcnNMaXN0OiBhbnkgPSBbXTtcbiAgb3ZlcnNlZXJzTGlzdDogYW55ID0gW107XG4gIHJjTGlzdExvYWRlZCA9IGZhbHNlO1xuICB1c2Vyc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgY2F0ZWdvcnlMaXN0OiBhbnkgPSBbXTtcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcbiAgd29ya0Zsb3dMaXN0OiBhbnlbXSA9IFtdO1xuICBhcHByb3ZlcldvcmtGbG93TGlzdDogYW55W10gPSBbXTtcbiAgc3VibWl0dGVkID0gZmFsc2U7XG4gIGNjRW1haWxPYmpJZHM6IGFueVtdID0gW107XG4gIGNjRmFpbEdyb3VwT2JqSWRzOiBhbnlbXSA9IFtdO1xuICB1c2Vyc0FjY2Vzc0xpc3Q6IGFueVtdID0gW107XG4gIHVzZXJzQWNjZXNzTGlzdElkczogYW55W10gPSBbXTtcbiAgZ3JvdXBzQWNjZXNzTGlzdElkczogYW55W10gPSBbXTtcbiAgZ3JvdXBzQWNjZXNzTGlzdDogYW55W10gPSBbXTtcbiAgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llczogYW55W10gPSBbXTtcblxuICBsb2FkZXIgPSBmYWxzZTtcbiAgY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgZ3JvdXBzTGlzdExvYWRlZCA9IGZhbHNlO1xuICBjYXRlZ29yeUNvbmZpZyA9IHtcbiAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IFBvbGljeSBDYXRlZ29yeScsXG4gICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdQb2xpY3kgQ2F0ZWdvcnkgU2VsZWN0ZWQnLFxuICAgIGZsb2F0aW5nVGV4dFBsdXJhbDogJ1BvbGljeSBDYXRlZ29yaWVzIFNlbGVjdGVkJyxcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBQb2xpY3kgQ2F0ZWdvcnknLFxuICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXG4gICAgc2VsZWN0QWxsRW5hYmxlZDogdHJ1ZSxcbiAgICB3b3JrZmxvdzogJ3BvbGljeScsXG4gIH07XG4gIGFwcHJvdmFsV29ya2Zsb3dDb25maWcgPSB7XG4gICAgcGFuZWxUaXRsZTogJ1NlbGVjdCB1c2VyKHMpJyxcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1VzZXIgc2VsZWN0ZWQnLFxuICAgIGZsb2F0aW5nVGV4dFBsdXJhbDogJ1VzZXJzIHNlbGVjdGVkJyxcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBVc2VyJyxcbiAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXG4gIH07XG5cbiAgYWRkTW9yZUxldmVscyA9IGZhbHNlO1xuICBhcHByb3ZlcnNMaXN0SW5kZXggPSAwO1xuICB3b3JrZmxvd0xpc3QgPSBbJ1NFUVVFTlRJQUwnLCAnUk9VTkQtUk9CSU4nLCAnQU5ZIE9ORSddO1xuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuICBkYXRlQ29uZmlnID0ge1xuICAgIGRpc2FibGVLZXlwcmVzczogdHJ1ZSxcbiAgICBmb3JtYXQ6ICdERCBNTSBZWVlZJyxcbiAgICB1blNlbGVjdE9uQ2xpY2s6IHRydWUsXG4gICAgb3Blbk9uQ2xpY2s6IGZhbHNlLFxuICAgIG9wZW5PbkZvY3VzOiBmYWxzZSxcbiAgfTtcbiAgZnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICBwYXR0ZXJuOiAnJyxcbiAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxuICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxuICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxuICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICB3aW5kb3c6IDAsXG4gICAgZmFpbGVkOiAwLFxuICAgIHRpbWU6IERFRkFVTFRfVElNRSxcbiAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwLFxuICB9O1xuICByZXZpZXdlckZyZXF1ZW5jeURldGFpbHMgPSB7XG4gICAgcGF0dGVybjogJycsXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICBkYXRlT2ZNb2RpZmllZDogMCxcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgd2luZG93OiAwLFxuICAgIGZhaWxlZDogMCxcbiAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgZmFpbGVkVGltZTogJycsXG4gICAgY29udGludW91c19mYWlsZWRfZGF5czogMyxcbiAgfTtcbiAgZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnV2hhdCBpcyB0aGUgYXR0ZXN0YXRpb24gc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5Pyc7XG4gIHJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQ/JztcblxuICBzaWRlU2VsZWN0b3JFbGVtZW50cyA9IFtcbiAgICAnYXBwcm92YWxXb3JrZmxvdycsXG4gICAgJ2Fzc2lnbmVlcycsXG4gICAgJ2FwcHJvdmVycycsXG4gICAgJ3Jldmlld2VyJyxcbiAgICAnY2NFbWFpbCcsXG4gICAgJ2NjRmFpbCcsXG4gICAgJ3JjJyxcbiAgICAnY2F0ZWdvcnknLFxuICAgICdmcmVxdWVuY3knLFxuICAgICdyZXZpZXdlckZyZXF1ZW5jeScsXG4gICAgJ2NoZWNrcG9pbnRzJyxcbiAgICAnbGlua1Byb2dyYW0nLFxuICAgICdpc0Fzc2Vzc21lbnQnLFxuICAgICdpc0xpbmtlZFBvbGljZXMnLFxuICAgICdvd25lcnMnLFxuICAgICdwb2xpY3lBY2Nlc3MnLFxuICBdO1xuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXG4gICAgeyBuYW1lOiAnTE9XJywgdmFsdWU6IDEsIGNsYXNzOiAnbG93JyB9LFxuICAgIHsgbmFtZTogJ0xPVy1NZWRpdW0nLCB2YWx1ZTogMiwgY2xhc3M6ICdsb3ctbWVkJyB9LFxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXG4gICAgeyBuYW1lOiAnSGlnaCcsIHZhbHVlOiA0LCBjbGFzczogJ2hpZ2gnIH0sXG4gIF07XG4gIHNob3dSaXNrQ2xhc3NpZmljYXRpb24gPSB0cnVlO1xuICBzaG93Q3JlYXRlRG9jdW1lbnRzID0gZmFsc2U7XG4gIG9yZ2FuaXphdGlvbl9pZCA9ICcnO1xuICBtZW1iZXJfb2JqX2lkID0gJyc7XG4gIG1lbWJlcklkID0gMDtcbiAgdXNlckluZm8hOiBhbnk7XG5cbiAgcG9saWN5QXBwcm92YWxGbGFnID0gMDtcbiAgYmFzZVVSTCA9ICcnO1xuICBncm91cEVuYWJsZWQ6IGFueSA9IHRydWU7XG4gIG92ZXJzZWVyR3JvdXBzTGlzdDogYW55W10gPSBbXTtcbiAgZW5hYmxlQXBwcm92YWxXb3JrZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1ZlcnNpb25WYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gIHNlbGVjdGVkTGlua1Byb2dyYW06IGFueSA9IHt9O1xuICB2ZXJzaW9uRXJyb3JNZXNzYWdlOiBzdHJpbmcgPVxuICAgICdZb3UgaGF2ZSBlbnRlcmVkIGFuIGluY29ycmVjdCBmb3JtYXQuIFRoZSB2ZXJzaW9uIGZpZWxkIGNhbiBlaXRoZXIgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLic7XG4gIHNlbGVjdGVkV29ya2Zsb3c6IGFueVtdID0gW107XG4gIGVkaXRBcHByb3ZhbFdvcmtmbG93ITogYW55O1xuICBhcHByb3ZhbFdvcmtmbG93SWRzOiBhbnlbXSA9IFtdO1xuICBkZWZhdWx0RWRpdEFwcHJvdmVyczogYW55ID0ge307XG4gIGNyZWF0ZUFwcHJvdmFsQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdFdvcmtmbG93TGV2ZWwgPSB7fTtcbiAgbm9Xb3JrZmxvd1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHRlbXBsYXRlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZVVybDogc3RyaW5nID0gJyc7XG4gIGlzVGVtcGxhdGVDbG9zZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9saWN5U2VydmljZTogUG9saWN5U2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lTZXJ2aWNlLFxuICAgIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBjaGFuZ2VSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVzdEFwaVNlcnZpY2U6IFJlc3RBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlOiBPcmdhbml6YXRpb25Vc2VyU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U6IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wbGlhbmNlQ29tbW9uU2VydmljZTogQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYmFzZVVSTCA9IGxvY2F0aW9uPy5vcmlnaW47XG4gICAgaWYgKHRoaXMuYmFzZVVSTCA9PSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJykge1xuICAgICAgdGhpcy5iYXNlVVJMID0gJ2h0dHBzOi8vZGV2LnYtY29tcGx5LmNvbSc7XG4gICAgfVxuICB9XG4gIHBvbGljeUZvcm06IFBvbGljeUZvcm0gPSB7XG4gICAgcG9saWN5TmFtZTogJycsXG4gICAgcG9saWN5Tm90ZXM6ICcnLFxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW10sXG4gICAgc2VsZWN0ZWRBcHByb3ZlcnM6IFtdLFxuICAgIHNlbGVjdGVkQXNzaWduZWVzOiBbXSwgLy9kb3VidCBpbiBuYW1lXG4gICAgc2VsZWN0ZWRHcm91cEFzc2lnbmVlOiBbXSxcbiAgICBzZWxlY3RlZFJldmlld2VyczogW10sXG5cbiAgICBzZWxlY3RlZFJDczogW10sXG4gICAgQ0NGYWlsRW1haWw6IFtdLFxuICAgIENDRmFpbEVtYWlsR3JvdXA6IFtdLFxuICAgIENDRW1haWw6IFtdLFxuICAgIENDR3JvdXBFbWFpbDogW10sXG4gICAgYXZhaWxhYmxlT25Qb3J0YWw6IGZhbHNlLFxuICAgIGFjY2VwdFN1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgICByZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uOiBmYWxzZSxcbiAgICByaXNrUmF0aW5nOiAxLFxuICAgIGFzc29jaWF0ZWREb2N1bWVudHM6IHtcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICB9LFxuICAgIHBvbGljeUR1ZURhdGU6IG1vbWVudCgpLFxuICAgIGN1c3RvbVRhZ3M6IFtdLFxuICAgIGNoZWNrcG9pbnREZXRhaWxzOiBbXSxcbiAgICBMaW5rZWRQb2xpY2llczogW10sXG4gICAgdG90YWxRdWVzdGlvbjogMCxcbiAgICBwYXNzaW5nTWFya3M6IDAsXG4gICAgZG9jdW1lbnRzQW5kTGlua3M6IHtcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcbiAgICB9LFxuICAgIGFkZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogZmFsc2UsXG4gICAgYWRkUmV2aWV3ZXJzOiBmYWxzZSxcbiAgICBhZGRDaGVja3BvaW50czogZmFsc2UsXG4gICAgYWRkT3ZlcnNlZXJzOiBmYWxzZSxcbiAgICBhZGRBc3NvY2lhdGVkRG9jdW1lbnRzOiBmYWxzZSxcbiAgICBhZGRWZXJzaW9uOiBmYWxzZSxcbiAgICBhZGRMaW5rQXNzZXNzbWVudDogZmFsc2UsXG4gICAgYWRkTGlua1Byb2dyYW06IGZhbHNlLFxuICAgIGFkZExpbmtQb2xpY2llczogZmFsc2UsXG4gICAgaXNQb3J0YWxEaXNwbGF5RW5hYmxlZDogZmFsc2UsXG5cbiAgICBmYWlsZWRfdGltZTogJycsXG4gICAgZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxuICAgIGZyZXF1ZW5jeV90ZXh0OiAnJyxcbiAgICBtYXJrX2ZhaWxlZF9hZnRlcjogMCxcbiAgICByZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGU6IDAsXG5cbiAgICByZXZpZXdGYWlsZWRBZnRlcjogMCxcbiAgICByZXZpZXdGYWlsZWRUaW1lOiAnJyxcbiAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxuICAgIHJldmlld19mcmVxdWVuY3lfdHlwZTogJycsXG4gICAgcmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogMCxcbiAgICByZXZpZXc6IGZhbHNlLFxuICAgIGxpbmtQcm9ncmFtOiB7fSxcbiAgICBwcm9ncmFtU2VsZWN0ZWRWYWx1ZXM6IHt9LFxuICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxuICAgIHJldmlld2VyX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxuICAgIHBvbGljeV92ZXJzaW9uOiAnJywgLy8gaXQgd2lsbCBhY2NlcHQgbWF0Y2hlcyBhbHBoYWJldHMsIGh5cGhlbnMgKC0pLCBkb3RzICguKSwgYW5kIG51bWVyaWMgdmFsdWVzIG9ubHkgYW5kIHNob3VsZCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIDYgY2hhcmFjdGVyc1xuICAgIGFzc2Vzc21lbnQ6IFtdLFxuICAgIHBvbGljeV9vd25lcnM6IFtdLFxuICAgIHBvbGljeV9ncm91cF9vd25lcnM6IFtdLFxuICAgIGJ1c2luZXNzQ3ljbGU6IHt9LFxuICAgIHBvbGljeV9pZDogMCxcbiAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IDAsXG4gICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IFtdLFxuICAgIHBvbGljeV9hY2Nlc3NfZ3JvdXBzOiBbXSxcbiAgfTtcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdGlhdGVBUEkoKTtcbiAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gIH1cblxuICBfaW5pdGlhdGVBUEkoKSB7XG4gICAgdGhpcy5ncm91cEVuYWJsZWQgPVxuICAgICAgdGhpcy5mZWF0dXJlPy5pc0ZlYXR1cmVFbmFibGVkKCdmZl9wb2xpY3lfZ3JvdXBzJykgfHwgdHJ1ZTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcbiAgICAgIHRoaXMuX2luaXRpYXRlRWRpdEFQSSgpO1xuICAgIH1cbiAgICB0aGlzLmdldFVzZXJzTGlzdCgpO1xuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICB0aGlzLmxvYWRlciA9IHRoaXMubW9kZSA9PT0gJ0VESVQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuZ2V0T3JnRGV0YWlscygpO1xuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldFVzZXJEZXRhaWxzKCk/Ll9pZDtcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZT8uZ2V0VXNlckRldGFpbHMoKT8udXNlcjtcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZT8uZ2V0TWVtYmVySWQoKTtcbiAgICB0aGlzLmNoYW5nZVJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmJ1c2luZXNzQ3ljbGUgPSB0aGlzLnJlc3RBcGlTZXJ2aWNlPy5nZXRCdXNpbmVzc0N5Y2xlKCk7XG4gICAgLy90aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICB9XG5cbiAgX2luaXRpYXRlRWRpdEFQSSgpIHtcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcbiAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XG4gIH1cblxuICBnZXRPcmdEZXRhaWxzKCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnRGV0YWlsc0luZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXJlcz8uZW5hYmxlX3Jpc2tjbGFzcykge1xuICAgICAgICAgIHRoaXMuc2hvd1Jpc2tDbGFzc2lmaWNhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXM/Ll9pZCkge1xuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uX2lkID0gcmVzPy5faWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldExpbmtlZFBvbGljaWVzKHBvbGljeUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBvbGljeVNlcnZpY2UuTGlua2VkUG9saWNpZXNMaXN0KHBvbGljeUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzID0gWy4uLm5ldyBTZXQocmVzcG9uc2U/LmRhdGEpXS5yZXZlcnNlKCk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzPy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkXG4gICAgICAgICkubWFwKChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZCk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkID0gcmVzcG9uc2U/LmRpc3BsYXlPblBvcnRhbDtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgbGlzdGluZyBwYWdlcyB0aGUgbGVmdCBzaWRlIG9mIHBvbGljeSBmb3JtIHRvIHNldCBhbmQgZWRpdCB0aGUgZHJvcGRvd24gZmllbGRzIHZhbHVlc1xuICAgKiBAcGFyYW0gdHlwZSBob2xkcyBuYW1lIG9mIHBhcnRpY3VsYXIgbGlzdCBpcyB0byBiZSBkaXNwbGF5ZWRcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcbiAgICogQHBhcmFtIHdvcmtmbG93VHlwZSBpdCBzZXRzIHRoZSBhcHByb3ZhbCB3b3JrZmxvdyB0eXBlIHdoaWxlIGVkaXRpbmcgdGhlIGFwcHJvdmFsIHdvcmtmbG93LlxuICAgKi9cbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuLCB3b3JrZmxvd1R5cGU/OiBhbnkpIHtcbiAgICBpZiAod29ya2Zsb3dUeXBlKSB7XG4gICAgICB0aGlzLndvcmtmbG93VHlwZSA9IHdvcmtmbG93VHlwZTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncmMnOlxuICAgICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xuICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGxpc3RpbmcgcGFnZXNcbiAgICovXG4gIGRpc2FibGVTZWxlY3RvcigpIHtcbiAgICB0aGlzLmFkZE1vcmVMZXZlbHMgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgUmVzcG9uc2liaWxpdHkgY2VudGVycyBsaXN0XG4gICAqL1xuICBnZXRSQ0xpc3QoKSB7XG4gICAgdGhpcy5jb21wbGlhbmNlQ29tbW9uU2VydmljZT8uZ2V0UmNMaXN0SW5mbygpPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmNMaXN0ID0gcmVzO1xuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBsaXN0XG4gICAqL1xuICBnZXRVc2Vyc0xpc3QoKSB7XG4gICAgdGhpcy5vcmdhbml6YXRpb25Vc2VyU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2VycygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHRoaXMudXBkYXRlTWVtYmVySWRLZXkocmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMudXNlcnNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gcmVwbGFjZSBtZW1iZXJfaWQgdmFsdWUgdG8gbXlfbWVtYmVyX2lkXG4gIHVwZGF0ZU1lbWJlcklkS2V5KGxpc3Q6IGFueSkge1xuICAgIGxldCB1cGRhdGVkTGlzdCA9IGxpc3QubWFwKChlbGU6IGFueSkgPT4gKHtcbiAgICAgIC4uLmVsZSxcbiAgICAgIG1lbWJlcl9pZDogZWxlPy5teV9tZW1iZXJfaWQsXG4gICAgfSkpO1xuICAgIHJldHVybiB1cGRhdGVkTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIFBvbGljeSBDYXRlZ29yaWVzIGxpc3RcbiAgICovXG4gIGdldENhdGVnb3JpZXNMaXN0KCkge1xuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRDYXRlZ29yaWVzTGlzdCgpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IHJlcztcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb3JnYW5pemF0aW9uIHVzZXJzIGdyb3VwcyBsaXN0XG4gICAqL1xuICBnZXRHcm91cHNMaXN0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBvbGljeUdyb3VwcygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzLmRhdGE7XG4gICAgICAgIGNvbnN0IGdyb3VwczogYW55ID0gW107XG4gICAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGdyb3VwTmFtZTogZWxlbWVudC5ncm91cF9uYW1lLFxuICAgICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgZ3JvdXBzLnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvL0dldCB0aGUgbGlzdCBvZiBvdmVyc2VlcnMgZ3JvdXAuXG4gIG92ZXJzZWVyR3JvdXBMaXN0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlPy5nZXRPcmdhbml6YXRpb25PdmVyc2VlcnNHcm91cHMoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QgPSByZXM/LmRhdGE7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhcHByb3ZlcnMgd29ya2Zsb3cgZnJvbSB0aGUgc2VsZWN0ZWQgd29ya2Zsb3cgb24gQXBwcm92ZXJzIHdvcmtmbG93IGxpc3RcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHByZWRlZmluZWQgd29ya2Zsb3dcbiAgICovXG4gIHNlbGVjdGVkV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCA9PT0gLTEpIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtdO1xuICAgICAgLy8gdGhpcy5hZGRNb3JlTGV2ZWxzID0gdHJ1ZVxuICAgICAgLy8gdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRhdGEgPSBjbG9uZURlZXAoZXZlbnQuYXBwcm92YWxfd29ya2Zsb3cpO1xuICAgICAgY29uc3QgbmV3QXJyYXkgPSBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0ubmFtZSA9IGl0ZW0udHlwZTtcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbS5hcHByb3ZlcnMubWFwKChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWQpO1xuICAgICAgICBpdGVtLmFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbEFwcHJvdmVycywgaWRzLCAnbWVtYmVyX2lkJyk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBuZXdBcnJheS5maWx0ZXIoXG4gICAgICAgIChsZXZlbDogYW55KSA9PiBsZXZlbC5hcHByb3ZlcnMubGVuZ3RoID4gMFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBBcHByb3ZlcnMgd29ya2Zsb3cgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xuICAgKiBAcGFyYW0gaWQgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXG4gICAqL1xuICBnZXRBcHByb3ZlcldvcmtGbG93KGlkOiBhbnksIGRhdGE/OiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldFdvcmtmbG93TGlzdChpZCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5hcHByb3ZlcldvcmtGbG93TGlzdCA9IHJlczsgLy8gZ2V0dGluZyBhbGwgYXBwcm92ZXIgc2F2ZWQgd29ya2Zsb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XG4gICAgICAgICAgdGhpcy5hcHByb3ZlcldvcmtGbG93TGlzdD8uZm9yRWFjaCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHM/LmluY2x1ZGVzKHdvcmtmbG93Py5faWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ucHVzaCh3b3JrZmxvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhcHByb3ZhbERhdGE6IGFueSA9IFtdO1xuICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubm9Xb3JrZmxvd1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBhcHByb3ZhbFdvcmtmbG93OiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVXb3JrZmxvdygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycykuZm9yRWFjaCgoYXBwcm92ZXJzTGV2ZWwpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVyc1thcHByb3ZlcnNMZXZlbF0uYXBwcm92ZXJzID1cbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2FwcHJvdmVyc0xldmVsXT8uYXBwcm92ZXJzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAoYXBwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHAubWVtYmVyX25hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHByb3ZlclVzZXIgPSB0aGlzLnVzZXJzTGlzdD8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyOiBhbnkpID0+IHVzZXIubXlfbWVtYmVyX2lkID09IGFwcC5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlclVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5tZW1iZXJfbmFtZSA9IGFwcHJvdmVyVXNlcj8ubWVtYmVyX25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXBwcm92YWxXb3JrZmxvdy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDE6IGFwcHJvdmVyc0xldmVsLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBwcm92YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgICB3b3JrZmxvd19uYW1lOiAnJyxcbiAgICAgICAgICAgICAgd29ya2Zsb3dfbW9kdWxlOiAnUE9MSUNZJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHt9LFxuICAgICAgICAgICAgICBhcHByb3ZhbF93b3JrZmxvdzogYXBwcm92YWxXb3JrZmxvdyxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfYXJyOiBbXSxcbiAgICAgICAgICAgICAgY3JlYXRvcjoge30sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3QoXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBbZGF0YS5SZXZpZXdlck1lbWJlcklkXSxcbiAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvdygpIHtcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBbXTtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBbXTtcbiAgICB0aGlzLmVkaXRBcHByb3ZhbFdvcmtmbG93ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgQXBwcm92ZXJzIGFuZCByZXZpZXdlcnMgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xuICAgKiBAcGFyYW0gY2F0ZWdvcnlJZHMgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXG4gICAqL1xuICBnZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KFxuICAgIGNhdGVnb3J5SWRzOiBhbnksXG4gICAgYXBwcm92ZXJJZHM/OiBhbnksXG4gICAgcmV2aWV3ZXJJZHM/OiBhbnksXG4gICAgcG9saWN5PzogYW55XG4gICkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFsbEFwcHJvdmVycyA9IFtdO1xuICAgIHRoaXMuYWxsUmV2aWV3ZXJzID0gW107XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldFJldmlld2VycyhjYXRlZ29yeUlkcykuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgcmVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMgPSB1bmlxQnkoXG4gICAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLmNvbmNhdChlbGVtZW50LmFsbF9hcHByb3ZlcnMpLFxuICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzID0gdW5pcUJ5KFxuICAgICAgICAgICAgICBlbGVtZW50LmFsbF9hcHByb3ZlcnMuY29uY2F0KFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWxsX2F1dGhvcnNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykgdGhpcy5zZXRPd25lcnNPbkxvYWQoKTtcbiAgICAgICAgICAgIGlmIChwb2xpY3k/LnBvbGljeV9vd25lcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgICAgICAgICAgIHBvbGljeT8ucG9saWN5X293bmVycyA/PyBbXSxcbiAgICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRVc2Vyc0FjY2Vzc0xpc3RCeUNhdGVnb3J5KGVsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcHByb3Zlcklkcz8uYXBwcm92ZXJzKSB7XG4gICAgICAgICAgbGV0IG9iaiA9IGFwcHJvdmVySWRzPy5hcHByb3ZlcnM7XG4gICAgICAgICAgbGV0IGFwcHJvdmVyTGV2ZWxzID0gW107XG4gICAgICAgICAgLy8gZm9yICh2YXIgaXRlbSBpbiBvYmopIHtcbiAgICAgICAgICAvLyAgIGNvbnN0IGlkcyA9IG9ialtpdGVtXT8uYXBwcm92ZXJzPy5tYXAoXG4gICAgICAgICAgLy8gICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWRcbiAgICAgICAgICAvLyAgICk7XG5cbiAgICAgICAgICAvLyAgIGxldCBkYXRhID0ge1xuICAgICAgICAgIC8vICAgICBuYW1lOiBvYmpbaXRlbV0/LnR5cGUsXG4gICAgICAgICAgLy8gICAgIGFwcHJvdmVyczogdGhpcy5zZXRMaXN0KHRoaXMuYWxsQXBwcm92ZXJzLCBpZHMsICdtZW1iZXJfaWQnKSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gICBpZiAoZGF0YS5uYW1lID09ICdST1VORFJPQklOJykge1xuICAgICAgICAgIC8vICAgICBkYXRhLm5hbWUgPSAnUk9VTkQtUk9CSU4nO1xuICAgICAgICAgIC8vICAgfSBlbHNlIGlmIChkYXRhLm5hbWUgPT0gJ0FOWU9ORScpIHtcbiAgICAgICAgICAvLyAgICAgZGF0YS5uYW1lID0gJ0FOWSBPTkUnO1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgYXBwcm92ZXJMZXZlbHMucHVzaChkYXRhKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgaWYgKGFwcHJvdmVySWRzPy5hcHByb3ZlcnMpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSBhcHByb3Zlcklkcz8uYXBwcm92ZXJzO1xuICAgICAgICAgICAgbGV0IGFwcHJvdmVyTGV2ZWxzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIG9iaikge1xuICAgICAgICAgICAgICBjb25zdCBpZHMgPSBvYmpbaXRlbV0/LmFwcHJvdmVycz8ubWFwKFxuICAgICAgICAgICAgICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogb2JqW2l0ZW1dPy5uYW1lID8/IG9ialtpdGVtXT8udHlwZSxcbiAgICAgICAgICAgICAgICBhcHByb3ZlcnM6IG9ialtpdGVtXT8uYXBwcm92ZXJzLFxuICAgICAgICAgICAgICAgIGFwcHJvdmFsX2RvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxldmVsMTogb2JqW2l0ZW1dPy5sZXZlbDEgfHwgaXRlbSxcbiAgICAgICAgICAgICAgICBhbGlhc19uYW1lOiBvYmpbaXRlbV0/LmFsaWFzX25hbWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIC8vQ3JlYXRpbmcgaXNzdWUgaW4gYXBwcm92YWwgd29ya2Zsb3cgcGF5bG9hZCAodHlwZSkgd2hpbGUgZWRpdGluZyBwb2xpY3lcbiAgICAgICAgICAgICAgLy8gaWYgKGRhdGEudHlwZSA9PSAnUk9VTkRST0JJTicpIHtcbiAgICAgICAgICAgICAgLy8gICBkYXRhLnR5cGUgPSAnUk9VTkQtUk9CSU4nO1xuICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSAnQU5ZT05FJykge1xuICAgICAgICAgICAgICAvLyAgIGRhdGEudHlwZSA9ICdBTlkgT05FJztcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICBhcHByb3ZlckxldmVscy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmVyTGV2ZWxzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiBhcHByb3ZlckxldmVscyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmV2aWV3ZXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMsXG4gICAgICAgICAgICAgIHJldmlld2VySWRzLFxuICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqKioqKipcbiAgICogSXQgaXMgdG8gcG9wdWxhdGUgbW9yZSBvcHRpb25zIGVsZW1lbnRzIHdoaWxlIGVkaXRpbmcgdGhlIHBvbGljeSBmb3JtXG4gICAqL1xuICBwb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCkge1xuICAgIGNvbnN0IGFjdGl2YXRlZE9wdGlvbnMgPSBbXTtcbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycykge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVNQT05TSUJJTElUWV9DRU5URVInKTtcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpOyB9XG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cykgeyBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTJyk7IH1cbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZE92ZXJzZWVycykge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZEFzc29jaWF0ZWREb2N1bWVudHMpIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVMQVRFRF9ET0NVTUVOVFMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbikge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdWRVJTSU9OJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50Lmxlbmd0aCkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX0FTU0VTU01FTlRTJyk7XG4gICAgICB0aGlzLmdldEFzc2Vzc21lbnREZXRhaWxzKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0gJiZcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxuICAgICkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX1BST0dSQU1fUkVTUE9OU0lCSUxJVElFUycpO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUycpO1xuICAgIH1cbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoYWN0aXZhdGVkT3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGFkZCBhbmQgcmVtb3ZlIHRoZSBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uIHRvIHRoZSBwb2xpY3kgRm9ybVxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgZGV0YWlscyByZWxhdGVkIHRvIGNoZWNrZWQgdmFsdWUsIGNvZGUgcGFydGljdWxhciBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uc1xuICAgKi9cbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgY2FzZSAnUkVTUE9OU0lCSUxJVFlfQ0VOVEVSJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnUkVWSUVXRVInOlxuICAgICAgLy8gICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBjYXNlICdDSEVDS1BPSU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnT1ZFUlNFRVInOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSRUxBVEVEX0RPQ1VNRU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdWRVJTSU9OJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZFZlcnNpb24gPSBldmVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0xJTktfUFJPR1JBTV9SRVNQT05TSUJJTElUSUVTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX0FTU0VTU01FTlRTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50ID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX1JFTEFURURfUE9MSUNJRVMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua1BvbGljaWVzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XG4gICAqL1xuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcbiAgICBjb25zdCBlZGl0TG9hZGVyID1cbiAgICAgIHRoaXMubW9kZSA9PT0gJ0VESVQnXG4gICAgICAgID8gdGhpcy5yY0xpc3RMb2FkZWQgJiZcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkICYmXG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkXG4gICAgICAgIDogdHJ1ZTtcbiAgICBpZiAodGhpcy51c2Vyc0xpc3RMb2FkZWQgJiYgZWRpdExvYWRlcikge1xuICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YSAmJiB0aGlzLmNvbnZlcnRGaWxlRGF0YS5maWxlTmFtZSkge1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLnN1YnN0cmluZyhcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuc2VsZWN0ZWRDYXRlZ29yeV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICAgIHRoaXMuZWRpdFBvbGljeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBjb25maXJtYXRpb24gcG9wdXAgd2hlbiBhdmFpbGFiaWxpdHkgb24gUG9saWN5IHBvcnRhbCB0b2dnbGUgaW4gT05cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHRvZ2dsZSB2YWx1ZSB3aGljaCBpcyBhbHdheXMgdHJ1ZSBvciBmYWxzZVxuICAgKi9cbiAgYXZhaWxhYmlsaXR5T25Qb3J0YWwoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uRGV0YWlsczogQ29uZmlybWF0aW9uQWxlcnQgPSB7XG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYFRoZSBwb2xpY2llcyB0aGF0IHlvdSBpbnRlbmQgdG8gbWFrZSBhY2Nlc3NpYmxlIHRvIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uIGNhbiBiZSBhZGRlZCB0byB0aGUgcG9saWN5IHBvcnRhbC5cbiAgICAgICAgSXQgaXMgbGlrZSBhIHNoYXJlZCBjYXRhbG9nIG9mIGFsbCBhY3RpdmUgJiB1cGRhdGVkIHBvbGljaWVzIHRoYXQgYW55IGxvZ2dlZCBpbiB1c2VyIGNhbiByZWFkLyBkb3dubG9hZCBmb3IgcmVmZXJlbmNlLlxuICAgICAgICBIZW5jZSwgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgeW91IHRvIHNldCB1cCBhbiBhdHRlc3RhdGlvbiBzY2hlZHVsZSBvciBzZWxlY3RcbiAgICAgICAgcmVhZGVycyB0byBhdHRlc3QgdGhlIHBvbGljaWVzLmAsXG4gICAgICAgIGFjdGlvbjogJ1BPTElDWV9QT1JUQUwnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkFsZXJ0LmVtaXQoY29uZmlybWF0aW9uRGV0YWlscyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIHRoZSBpbnB1dCBmcm9tIHRoZSBDb25maXJtYXRpb24gZGlhbG9nIG9mIGF2YWlsYWJsZSBvbiBQb2xpY3kgcG9ydGFsXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBvcHRpb24gZnJvbSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGljaCBpcyBhbHdheXMgZWl0aGVyICdZRVMnIG9yICdOTydcbiAgICovXG4gIGNvbmZpcm1Qb2xpY3lQb3J0YWwoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCA9IGV2ZW50ID09ICdZRVMnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChldmVudCA9PSAnTk8nKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcG9saWN5Rm9ybSB3aXRoIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlIGxpc3RpbmcsIGZyZXF1ZW5jeSwgZmlsZSB1cGxvYWQgY29tcG9uZW50c1xuICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIGZpZWxkIG9uIFBvbGljeSBmb3JtLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRJdGVtcyBjb250YWlucyB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtcyBmcm9tIHRoZSBsaXN0XG4gICAqL1xuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLnJjTGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdpdGVtX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IFtdO1xuICAgICAgICB0aGlzLnJlc2V0UG9saWN5QWNjZXNzRGV0YWlscygpO1xuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChvYmplY3RJZHMpO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhZyA9IGVsZW1lbnQuY3VzdG9tX3RhZ3M7XG4gICAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnbmFtZSA9PSB0YWdEYXRhLnRhZ25hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGxldCB1c2VySWRzLCBncm91cElkcztcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMudXNlcnMsICdtZW1iZXJfaWQnKTtcbiAgICAgICAgICBncm91cElkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMuZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXG4gICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZXJJZHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgdXNlcklkcyxcbiAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMsXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxuICAgICAgICBsZXQgc2VsZWN0ZWRVc2VySWRzLCBzZWxlY3RlZEdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zPy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIHNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zPy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0dyb3VwRW1haWwgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VySWRzLFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2NFbWFpbE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgICAgbGV0IHNlbGVjdGVkRmFpbFVzZXJJZHMsIHNlbGVjdGVkRmFpbEdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZhaWxVc2VySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy51c2VycyxcbiAgICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZhaWxHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXAgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmFpbEdyb3VwSWRzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEZhaWxVc2VySWRzLFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXBwcm92ZXJzJzpcbiAgICAgICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuYWRkTW9yZUxldmVscykge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxuICAgICAgICAgICAgYXBwcm92ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1t0aGlzLmFwcHJvdmVyc0xpc3RJbmRleF0gPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy53b3JrZmxvd1R5cGUsXG4gICAgICAgICAgYXBwcm92ZXJzLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld2VyX2F0dGFjaG1lbnRzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5maWxlcyA/PyBbXTtcblxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3MgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmxpbmtzID8/IFtdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc29jaWF0ZWREb2N1bWVudHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlcyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uY2hlY2twb2ludERldGFpbHMgPz8gW107XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID8/IDA7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBzZWxlY3RlZEl0ZW1zPy5yZXF1aXJlZFBvaW50ID8/IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3duZXJzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbGljeUFjY2Vzcyc6XG4gICAgICAgIGxldCBhY2Nlc3NJZHMsIGFjY2Vzc0dyb3VwSWRzO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmZ1dHVyZVVzZXJzV2lsbFNlbGVjdDtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgYWNjZXNzSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIGFjY2Vzc0dyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgYWNjZXNzR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2Nlc3NJZHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgYWNjZXNzSWRzLFxuICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXNMaW5rZWRQb2xpY2VzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5saXN0T2ZTZWxlY3RlZFBvbGljaWVzKFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnNlbGVjdGVkUG9saWN5TGlzdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMgPSBzZWxlY3RlZEl0ZW1zPy5zZWxlY3RlZFBvbGljeUxpc3Q7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gIH1cblxuICBsaXN0T2ZTZWxlY3RlZFBvbGljaWVzKHNlbGVjdGVkUG9saWNpZXM6IGFueSkge1xuICAgIHJldHVybiBzZWxlY3RlZFBvbGljaWVzPy5tYXAoKHBvbGljeTogYW55KSA9PiBwb2xpY3k/LmNvbnRyYWN0X2lkKTtcbiAgfVxuXG4gIC8vcmV0dXJuIHRoZSBfaWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3ZlcnNlZXIgZ3JvdXAuXG4gIGdldEdyb3VwT2JqZWN0SWQob3ZlcnNlZXJHcm91cD86IGFueSkge1xuICAgIGxldCBvdmVyc2Vlckdyb3VwSWRBcnJheSA9IG92ZXJzZWVyR3JvdXAubWFwKChlbGU6IGFueSkgPT4gZWxlLl9pZCk7XG4gICAgcmV0dXJuIG92ZXJzZWVyR3JvdXBJZEFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHBhcnRpY3VsYXIgZWxlbWVudCBmcm9tIHNlbGVjdGVkIGxpc3RcbiAgICogQHBhcmFtIHR5cGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciBjYXNlXG4gICAqIEBwYXJhbSBldmVudCBob2xkcyB0aGUgaWQgb3Iga2V5IG9mIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0gcmVtb3ZlSW5kZXggY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MuZmluZEluZGV4KFxuICAgICAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3Muc3BsaWNlKHJjSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKG93bmVyOiBhbnkpID0+IG93bmVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdncm91cEFzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8uc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzLnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NFbWFpbCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbC5maW5kSW5kZXgoXG4gICAgICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsLnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0dyb3VwRW1haWwnOlxuICAgICAgICBjb25zdCBjY0dyb3VwSW5kZXg6IGFueSA9IHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbD8uc3BsaWNlKGNjR3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2NFbWFpbE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRmFpbCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVyTm90aWZ5SW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwuZmluZEluZGV4KFxuICAgICAgICAgIChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbC5zcGxpY2Uob3ZlcnNlZXJOb3RpZnlJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NHcm91cEZhaWxFbWFpbCc6XG4gICAgICAgIGNvbnN0IGNjRmFpbEdyb3VwSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwPy5zcGxpY2UoY2NGYWlsR3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXBwcm92ZXJzJzpcbiAgICAgICAgY29uc3QgYXBwcm92ZXJzSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbXG4gICAgICAgICAgcmVtb3ZlSW5kZXhcbiAgICAgICAgXS5hcHByb3ZlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWQgPT0gZXZlbnQubWVtYmVyX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1tyZW1vdmVJbmRleF0uYXBwcm92ZXJzLnNwbGljZShcbiAgICAgICAgICBhcHByb3ZlcnNJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbcmVtb3ZlSW5kZXhdLmFwcHJvdmVycy5sZW5ndGggPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxuICAgICAgICAgIChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5pdGVtX2lkID09IGV2ZW50Lml0ZW1faWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGV2ZW50LmN1c3RvbV90YWdzO1xuICAgICAgICBpZiAodGFnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleENUID0gdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ25hbWUgPT0gdGFnRGF0YS50YWduYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4Q1QgIT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3Muc3BsaWNlKGluZGV4Q1QsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UoXG4gICAgICAgICAgMCxcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtID0gT2JqZWN0LmFzc2lnbih0aGlzLnBvbGljeUZvcm0pO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChvYmplY3RJZHMpO1xuICAgICAgICB0aGlzLnJlc2V0UG9saWN5QWNjZXNzRGV0YWlscygpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2hlY2twb2ludHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnRvdGFsUXVlc3Rpb24gPSAwO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucGFzc2luZ01hcmtzID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3b3JrZmxvd0xldmVsJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlbW92ZVdvcmtmbG93KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGlua1Byb2dyYW0nOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSB7XG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIHJlbW92ZWQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcG9saWN5SWRzOiBbdGhpcy5wb2xpY3lGb3JtPy5wb2xpY3lfaWQgPz8gMF0sXG4gICAgICAgICAgICAgIHByb2dyYW1JZDogdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtPy5faWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ293bmVycyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X293bmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbGljeUFjY2Vzcyc6XG4gICAgICAgIGNvbnN0IHVzZXJBY2Nlc3NJbmRleCA9IHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMuZmluZEluZGV4KFxuICAgICAgICAgIChvd25lcjogYW55KSA9PiBvd25lcj8uZW1wbG95ZWVfaWQgPT0gZXZlbnQ/LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/LnNwbGljZSh1c2VyQWNjZXNzSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FjY2Vzc0dyb3VwJzpcbiAgICAgICAgY29uc3QgZ3JvdXBBY2Nlc3NJbmRleDogYW55ID1cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/LnNwbGljZShncm91cEFjY2Vzc0luZGV4LCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxuICAgICAgICB0aGlzLnJlbW92ZUZyZXF1ZW5jeSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lzTGlua2VkUG9saWNlcyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcyA9IHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcz8uZmlsdGVyKFxuICAgICAgICAgIChwb2xpY3lJZDogYW55KSA9PiBldmVudCAhPT0gcG9saWN5SWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzID0gdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzPy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkICE9PSBldmVudFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgYXNzaWduZWVzIGFuZCBvdmVyc2VlcnMgbGlzdCBzdWNoIHRoYXQgYm90aCBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNhbWUgdXNlcnMgYmFzZWQgb24gc2VsZWN0aW9uXG4gICAqL1xuICByZWZyZXNoQWxsTGlzdHMoKSB7XG4gICAgbGV0IGFzc2lnbmVlc0lkczogYW55ID0gW107XG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLnVzZXJzTGlzdCk7XG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyk7XG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsKTtcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAodGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsKTtcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYXNzaWduZWVzSWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG5cbiAgICBhc3NpZ25lZXNJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZXNJZHMpXTtcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XG5cbiAgICAvLyB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShyZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSkpO1xuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICEoXG4gICAgICAgICAgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8XG4gICAgICAgICAgb3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZClcbiAgICAgICAgKVxuICAgICk7XG4gICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICBjb25zdCB1c2VyT2JqID0gdGhpcy5hc3NpZ25lZXNMaXN0O1xuICAgICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgIHVzZXIubWVtYmVyX2lkID0gdXNlci5teV9tZW1iZXJfaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub3duZXJsaXN0ID0gdXNlck9iajtcbiAgICB9XG4gICAgLy8gdGhpcy5yZXZpZXdlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEoYXNzaWduZWVzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpKSk7XG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgIShcbiAgICAgICAgICBhc3NpZ25lZXNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZCkgfHxcbiAgICAgICAgICByZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZClcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aG9sZSBsaXN0IGJhc2VkIG9uIHNlbGVjdGVkIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xuICAgKiBAcGFyYW0gbGlzdCBpdCBpcyB0aGUgbWFpbiBsaXN0ICB3aGljaCBjb250YWlucyBhbGwgZWxlbWVudHMgbGlzdFxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBmaWx0ZXIgc2VsZWN0ZWQgbGlzdCBmcm9tIHRoZSBsaXN0XG4gICAqIEBwYXJhbSBpZHMgc2VsZWN0ZWQgaWRzIGFycmF5XG4gICAqL1xuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IFtdO1xuICAgIGlkcz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGxpc3Q/LmZpbmRJbmRleChcbiAgICAgICAgKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xuICAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBleHRyYWN0IGlkIGZyb20gdGhlIGxpc3RcbiAgICovXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKGVsZSkgPT4ge1xuICAgICAgaWYgKGVsZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBlbGVba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXZpZXdlciB0eXBlIGluIGFwcHJvdmFsIHdvcmtmbG93XG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCByZXZpZXdlciB0eXBlXG4gICAqL1xuICByZXZpZXdlclR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMud29ya2Zsb3dUeXBlID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmcmVxdWVuY3kgaW4gZWRpdCAgbW9kZVxuICAgKi9cbiAgZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZXZlbnQ6IGFueSwgbW9kZTogJ1NFTEVDVCcgfCAnUE9QVUxBVEUnID0gJ1NFTEVDVCcpIHtcbiAgICAvL25lZWRzIHRvIGRpc2N1c3Mgd2l0aCBiYWNrZW5kIGFib3V0IGVkaXQgYW5kIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscywgLy9cbiAgICAgIHdpbmRvdzogZXZlbnQ/LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSxcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8ubWFya19mYWlsZWRfYWZ0ZXIsXG4gICAgICBmYWlsZWRfdGltZV91dGM6ICcnLFxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZmFpbGVkX3RpbWUgIT0gJycgPyBldmVudC5mYWlsZWRfdGltZSA6IERFRkFVTFRfMjRIUixcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LmFzc2lnbmVlX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICksXG4gICAgICBzdGFydERhdGU6ICcnLFxuICAgICAgcmVwb3J0SWQ6IDAsXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50LmZhaWxlZF90aW1lICE9ICcnID8gZXZlbnQuZmFpbGVkX3RpbWUgOiBERUZBVUxUXzI0SFJcbiAgICAgICksXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQuZnJlcXVlbmN5X3RleHQsXG4gICAgfTtcblxuICAgIHRoaXMuZnJlcXVlbmN5RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBmcmVxdWVuY3kgZGV0YWlscyBpbiB0aGUgcG9saWN5Rm9ybVxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGV2ZW50LnBhdHRlcm47XG4gICAgKHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9IGV2ZW50LnBsYWNlaG9sZGVyKSxcbiAgICAgICh0aGlzLnBvbGljeUZvcm0ubWFya19mYWlsZWRfYWZ0ZXIgPSBldmVudC5mYWlsZWRBZnRlcik7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IGV2ZW50LndpbmRvdztcbiAgICB0aGlzLnBvbGljeUZvcm0uZmFpbGVkX3RpbWUgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NpZ25lZV9zdGFydF9kYXRlID0gbW9tZW50KGV2ZW50LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXG4gICAgKTtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIGZhbHNlKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGV2ZW50LnBhdHRlcm4sXG4gICAgICBmcmVxdWVuY3lfdGltZTogZXZlbnQudGltZUluMTJocixcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZXZlbnQuZmFpbGVkQWZ0ZXIsXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZXZlbnQubGlmZWN5Y2xlRGV0YWlscyxcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IFtldmVudC5yZXBvcnRJZF0sXG4gICAgICBkb21fdXRjOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQucGxhY2Vob2xkZXIsXG4gICAgfTtcbiAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSBmcmVxdWVuY3kgZmllbGQgd2l0aCBzZWxlY3RlZCBkYXRhIGZyb20gZnJlcXVlbmN5IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIGZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy53aW5kb3cgPSBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSBldmVudD8uc3RhcnRfb2ZfZGF5X3V0YztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMztcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyXG4gICAgICA/IGV2ZW50LnBsYWNlaG9sZGVyXG4gICAgICA6ICdIb3cgb2Z0ZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIGF0dGVzdGVkPyc7XG4gIH1cblxuICByZXZpZXdlckZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICAvL25lZWRzIHRvIGRpc2N1c3Mgd2l0aCBiYWNrZW5kIGFib3V0IGVkaXQgYW5kIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMsIC8vXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlLFxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5yZXZpZXdGYWlsZWRBZnRlcixcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogJycsXG4gICAgICBsaWZlY3ljbGVEZXRhaWxzOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgICB0aW1lSW4yNEhyOlxuICAgICAgICBldmVudC5yZXZpZXdGYWlsZWRUaW1lICE9ICcnID8gZXZlbnQucmV2aWV3RmFpbGVkVGltZSA6IERFRkFVTFRfMjRIUixcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LnJldmlld2VyX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICksXG4gICAgICBzdGFydERhdGU6ICcnLFxuICAgICAgcmVwb3J0SWQ6IDAsXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSXG4gICAgICApLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnJldmlld2ZyZXF1ZW5jeURldGFpbHMsXG4gICAgfTtcblxuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEYXRhKGRhdGEpO1xuICB9XG5cbiAgcmVzZXRSZXZpZXdlckZyZXF1ZW5jeSgpIHtcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICAgIHBhdHRlcm46ICcnLFxuICAgICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICB3aW5kb3c6IDAsXG4gICAgICBmYWlsZWQ6IDAsXG4gICAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDMsXG4gICAgfTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSAnJztcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV90eXBlID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRUaW1lID0gREVGQVVMVF8yNEhSO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQgPyc7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgcmV2aWV3ZXIgZnJlcXVlbmN5IGRldGFpbHMgaW4gdGhlIHBvbGljeUZvcm1cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXG4gICAqL1xuICByZXZpZXdlckZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRBZnRlciA9IGV2ZW50LmZhaWxlZEFmdGVyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X3R5cGUgPSBldmVudC5wYXR0ZXJuLnNwbGl0KCd+JylbMF07XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSBldmVudC53aW5kb3c7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdlcl9zdGFydF9kYXRlID0gbW9tZW50KGV2ZW50LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXG4gICAgKTtcblxuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCBmYWxzZSk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBldmVudC5wYXR0ZXJuLFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZXZlbnQud2luZG93LFxuICAgICAgZmFpbGVkX2FmdGVyX2RheXM6IGV2ZW50LmZhaWxlZEFmdGVyLFxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXG4gICAgICBzdGFydF9vZl9kYXlfdXRjOiBldmVudC5zdGFydEZyb20sXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBbZXZlbnQucmVwb3J0SWRdLFxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnBsYWNlaG9sZGVyLFxuICAgIH07XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSByZXZpZXdlciBmcmVxdWVuY3kgZmllbGQgd2l0aCBzZWxlY3RlZCBkYXRhIGZyb20gZnJlcXVlbmN5IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIHJldmlld2VyRnJlcXVlbmN5UG9wdWxhdGlvbihldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IGV2ZW50Py5yZW1pbmRlcl9iZWZvcmVfZGF5cztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID1cbiAgICAgIGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDA7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZGF0ZU9mTW9kaWZpZWQgPSBldmVudD8uZG9tX3V0YztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBldmVudD8ucGxhY2Vob2xkZXJcbiAgICAgID8gZXZlbnQucGxhY2Vob2xkZXJcbiAgICAgIDogJ1doZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkID8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIHBvbGljeSBmb3JtXG4gICAqL1xuICB2YWxpZGF0ZVBvbGljeSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICB9LCAxMDApO1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWU7XG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGV2ZW50LnJlcGxhY2UocmUsICcnKS50cmltKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZS50cmltKCkgPT0gJycgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAoKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAhdGhpcy5ncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgKCh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBFbmFibGVkKSkpIHx8XG4gICAgICAodGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAoIXRoaXMuZ3JvdXBFbmFibGVkIHx8XG4gICAgICAgICAgKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5ncm91cEVuYWJsZWQpKSkgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5sZW5ndGggPT0gMCkgfHxcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09IDAgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92YWxfd29ya2Zsb3c/Lmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgPT09IDApIHx8XG4gICAgICAodGhpcy5mb3JtYXRFdmlkZW5jZSAmJiB0aGlzLmZvcm1hdEV2aWRlbmNlLm5ld0xpbmsuY29udGFpbnNFcnJvcikgfHxcbiAgICAgICF0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFuIGFwaSBjYWxsIHRvIGNyZWF0ZSBhIHBvbGljeVxuICAgKiBAcGFyYW0gcG9saWN5IGNvbnRhaW5zIHBvbGljeUZvcm0gZGF0YVxuICAgKi9cbiAgc3VibWl0UG9saWN5KCkge1xuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUG9saWN5KCk7XG4gICAgaWYgKCF2YWxpZCB8fCAhdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLm5vV29ya2Zsb3dTZWxlY3RlZCkge1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgIH1cbiAgICBjb25zdCBwb2xpY3kgPSB0aGlzLnBvbGljeUZvcm07XG4gICAgbGV0IGFwcHJvdmVyc0RhdGE6IGFueSA9IHRoaXMuY29udmVydEFwcHJvdmFsV29ya2Zsb3coXG4gICAgICBwb2xpY3kuc2VsZWN0ZWRBcHByb3ZlcnNcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBvbGljeS5wb2xpY3lEdWVEYXRlPy4kZCA/PyBwb2xpY3kucG9saWN5RHVlRGF0ZTtcbiAgICBsZXQgcmV2aWV3ZXJGaWxlc0FycmF5ID0gY2xvbmVEZWVwKHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlcyk7XG4gICAgY29uc3QgcmV2aWV3ZXJGaWxlcyA9IHJldmlld2VyRmlsZXNBcnJheS5tYXAoKGZpbGU6IGFueSkgPT4ge1xuICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlbmFtZTtcbiAgICAgIGZpbGUuZmlsZV9wYXRoID0gZmlsZS5maWxlcGF0aDtcbiAgICAgIGZpbGUub3JnX25hbWUgPSBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUuZmlsZW5hbWU7XG4gICAgICBkZWxldGUgZmlsZS5maWxlcGF0aDtcbiAgICAgIGRlbGV0ZSBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUubGlua1NldDtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH0pO1xuXG4gICAgbGV0IGF0dGVzdGF0aW9uRmlsZXNBcnJheSA9IGNsb25lRGVlcChcbiAgICAgIHBvbGljeS5hc3NvY2lhdGVkRG9jdW1lbnRzLmZvcm1hdEZpbGVzXG4gICAgKTtcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gYXR0ZXN0YXRpb25GaWxlc0FycmF5Lm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgIGVsZS5uYW1lID0gZWxlLmZpbGVuYW1lO1xuICAgICAgZWxlLmZpbGVfcGF0aCA9IGVsZS5maWxlcGF0aDtcbiAgICAgIGVsZS5vcmlnaW5hbF9maWxlX25hbWUgPSBlbGUub3JpZ2luYWxfZmlsZW5hbWU7XG4gICAgICBlbGUuZm9sZGVyX2lkID0gZWxlPy5mb2xkZXJfaWQgPyBlbGUuZm9sZGVyX2lkIDogMDtcbiAgICAgIGVsZS5wYXRoID0gZWxlPy5wYXRoID8gZWxlLnBhdGggOiBlbGUuZmlsZXBhdGggKyBlbGUuZmlsZW5hbWU7XG4gICAgICBlbGUuaXNMaW5rU2V0ID0gZWxlLmxpbmtTZXQ7XG4gICAgICBlbGUub3RoZXJfdHlwZSA9IGVsZT8ub3RoZXJzO1xuICAgICAgZGVsZXRlIGVsZS5maWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBlbGUuZmlsZXBhdGg7XG4gICAgICBkZWxldGUgZWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGVsZS5saW5rU2V0O1xuICAgICAgZGVsZXRlIGVsZS5maWxlX25hbWU7XG4gICAgICBkZWxldGUgZWxlLm90aGVycztcbiAgICAgIHJldHVybiBlbGU7XG4gICAgfSk7XG4gICAgY29uc3QgcmV2aWV3ZXJJRCA9IHRoaXMucmV0dXJuSWRzKHBvbGljeS5zZWxlY3RlZFJldmlld2VycywgJ21lbWJlcl9pZCcpO1xuICAgIGNvbnN0IHBvbGljeUFjY2Vzc1VzZXJzSWRzID1cbiAgICAgIHRoaXMucmV0dXJuSWRzKHBvbGljeS5wb2xpY3lfYWNjZXNzX293bmVycywgJ21lbWJlcl9pZCcpID8/IFtdO1xuICAgIGNvbnN0IHBvbGljeUFjY2Vzc0dyb3Vwc0lkcyA9XG4gICAgICB0aGlzLnJldHVybklkcyhwb2xpY3kucG9saWN5X2FjY2Vzc19ncm91cHMsICdfaWQnKSA/PyBbXTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBwb2xpY3lfbmFtZTogcG9saWN5LnBvbGljeU5hbWUsXG4gICAgICBub3RlczogcG9saWN5LnBvbGljeU5vdGVzLFxuICAgICAgaXNfcG9ydGFsX2VuYWJsZTogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsID8gMSA6IDAsXG4gICAgICBpc19zdWdnZXRpb25fZW5hYmxlOiBwb2xpY3kuYWNjZXB0U3VnZ2VzdGlvbnMgPyAxIDogMCxcbiAgICAgIGNhdGVnb3J5X2lkX2FycjogdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkQ2F0ZWdvcmllcywgJ2l0ZW1faWQnKSxcbiAgICAgIGFwcHJvdmVyczogYXBwcm92ZXJzRGF0YSxcbiAgICAgIGFzc2lnbmVlX2lkczogdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHBvbGljeT8uc2VsZWN0ZWRBc3NpZ25lZXMsXG4gICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICkubWFwKChpZCkgPT4gTnVtYmVyKGlkKSksXG4gICAgICB1c2VyZ3JvdXBfaWRzOiB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRHcm91cEFzc2lnbmVlLCAnX2lkJykgPz8gW10sXG4gICAgICBJc19hcHByb3ZhbDogMCwgLy9uZWVkcyB0byBjaGVjayBpbiBmZVxuXG4gICAgICBhc3NvY2lhdGVkX2RvY3VtZW50czogcG9saWN5LmFkZEFzc29jaWF0ZWREb2N1bWVudHNcbiAgICAgICAgPyBhdHRlc3RhdGlvbkZpbGVzXG4gICAgICAgIDogW10sXG5cbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShwb2xpY3kuY3VzdG9tVGFncyksXG5cbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgPyBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgOiAnJyxcbiAgICAgIGZyZXF1ZW5jeV90ZXh0OiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHMgPyBwb2xpY3kuZnJlcXVlbmN5X3RleHQgOiAnJyxcbiAgICAgIHJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZVxuICAgICAgICA6IDAsXG4gICAgICBmYWlsZWRfdGltZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZhaWxlZF90aW1lIDogJycsXG4gICAgICBtYXJrX2ZhaWxlZF9hZnRlcjogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICAgIDogJycsXG4gICAgICAvLyBzdGFydERhdGU6IHBvbGljeS5wb2xpY3lEdWVEYXRlLnRvRGF0ZVN0cmluZygpLFxuICAgICAgc3RhcnREYXRlOiBtb21lbnQoc3RhcnREYXRlKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWScpLFxuXG4gICAgICBSZXZpZXdlckF0dGFjaG1lbnRzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlc1xuICAgICAgICAgID8gcmV2aWV3ZXJGaWxlc1xuICAgICAgICAgIDogW10sXG4gICAgICBSZXZpZXdlckxpbmtzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rc1xuICAgICAgICAgID8gcG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdExpbmtzXG4gICAgICAgICAgOiBbXSxcbiAgICAgIFJldmlld2VyTWVtYmVySWQ6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcmV2aWV3ZXJJRFswXSA/IHJldmlld2VySURbMF0gOiAwLFxuICAgICAgaXNSZXZpZXc6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiZcbiAgICAgICAgKHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlcyB8fFxuICAgICAgICAgIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rcykgJiZcbiAgICAgICAgcmV2aWV3ZXJJRFswXVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmV2aWV3RmFpbGVkQWZ0ZXI6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld0ZhaWxlZEFmdGVyXG4gICAgICAgICAgOiAwLFxuICAgICAgcmV2aWV3RmFpbGVkVGltZTpcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgPyBwb2xpY3kucmV2aWV3RmFpbGVkVGltZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X3R5cGU6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfdHlwZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXG4gICAgICAgICAgOiAwLFxuXG4gICAgICBlbnRpdGllczogdGhpcy5wb2xpY3lGb3JtPy5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSQ3MsICdpdGVtX2lkJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuICAgICAgcmlza19jbGFzczogcG9saWN5LnJpc2tSYXRpbmcudG9TdHJpbmcoKSxcblxuICAgICAgQ0NGYWlsRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NGYWlsRW1haWwsICdlbXBsb3llZV9lbWFpbCcpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJyxcbiAgICAgIENDRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuXG4gICAgICBjaGVja3BvaW50RGV0YWlsczogcG9saWN5LmNoZWNrcG9pbnREZXRhaWxzID8/IFtdLFxuICAgICAgdG90YWxRdWVzdGlvbjogcG9saWN5LnRvdGFsUXVlc3Rpb24gPyBwb2xpY3kudG90YWxRdWVzdGlvbiA6IDAsIC8vXG4gICAgICBwYXNzaW5nTWFya3M6IHBvbGljeS5wYXNzaW5nTWFya3MgPyBwb2xpY3kucGFzc2luZ01hcmtzIDogMCwgLy9cblxuICAgICAgcG9saWN5QXBwcm92YWxGbGFnOiAwLFxuXG4gICAgICBpc19zaWduYXR1cmVfcmVxdWlyZWQ6IHBvbGljeS5yZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uID8gMSA6IDAsXG4gICAgICBjY191c2VyZ3JvdXBfaWRzOiB0aGlzLmNjRW1haWxPYmpJZHMsXG4gICAgICBjY19mYWlsX3VzZXJncm91cF9pZHM6IHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMsXG4gICAgICByZXZpZXdlcl9zdGFydF9kYXRlOiBwb2xpY3kucmV2aWV3ZXJfc3RhcnRfZGF0ZSA/PyAnJyxcbiAgICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6IHBvbGljeS5hc3NpZ25lZV9zdGFydF9kYXRlLFxuICAgICAgcG9saWN5X3ZlcnNpb246IHBvbGljeS5hZGRWZXJzaW9uID8gcG9saWN5LnBvbGljeV92ZXJzaW9uIDogJycsXG4gICAgICBhc3Nlc3NtZW50OiBwb2xpY3kuYWRkTGlua0Fzc2Vzc21lbnRcbiAgICAgICAgPyBwb2xpY3kuYXNzZXNzbWVudC5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBlbGUuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGVsZS5jYXRlZ29yeV9pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBbXSxcbiAgICAgIHBvbGljeV9vd25lcnM6IHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGUubWVtYmVyX2lkXG4gICAgICApLFxuICAgICAgYXBwcm92YWxfd29ya2Zsb3dfaWQ6IHBvbGljeT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/Ll9pZFxuICAgICAgICA/IFtwb2xpY3k/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5faWRdXG4gICAgICAgIDogW10sXG4gICAgICBsaW5rUHJvZ3JhbTogT2JqZWN0LmtleXMocG9saWN5Py5saW5rUHJvZ3JhbSkubGVuZ3RoXG4gICAgICAgID8gcG9saWN5Py5saW5rUHJvZ3JhbVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICBidXNpbmVzc19jeWNsZTogT2JqZWN0LmtleXMocG9saWN5Py5saW5rUHJvZ3JhbSkubGVuZ3RoXG4gICAgICAgID8gcG9saWN5Py5idXNpbmVzc0N5Y2xlXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcG9saWN5X2FjY2Vzc190eXBlOiBwb2xpY3kucG9saWN5X2FjY2Vzc190eXBlID8/IDAsXG4gICAgICBwb2xpY3lfYWNjZXNzX293bmVyczogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsXG4gICAgICAgID8gW11cbiAgICAgICAgOiBwb2xpY3lBY2Nlc3NVc2Vyc0lkcyA/PyBbXSxcbiAgICAgIHBvbGljeV9hY2Nlc3NfZ3JvdXBzOiBwb2xpY3kuYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgPyBbXVxuICAgICAgICA6IHBvbGljeUFjY2Vzc0dyb3Vwc0lkcyA/PyBbXSxcbiAgICAgIGRpc3BsYXlPblBvcnRhbDogcG9saWN5LmlzUG9ydGFsRGlzcGxheUVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBsaW5rZWRQb2xpY2llczogWy4uLm5ldyBTZXQocG9saWN5LkxpbmtlZFBvbGljaWVzKV0sXG4gICAgfTtcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnKSB7XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2Uuc3VibWl0UG9saWN5KHBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wb2xpY3lJZCA9IHJlcy5faWQ7XG4gICAgICAgICAgaWYgKHRoaXMuY29udmVydEZpbGVEYXRhPy5maWxlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5saW5rRG9jdW1lbnRXaXRoUG9saWN5KHRoaXMuY29udmVydEZpbGVEYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZUlkKSB7XG4gICAgICAgICAgICB0aGlzLm9uVGVtcGxhdGVTZWxlY3QoW3sgX2lkOiB0aGlzLnRlbXBsYXRlSWQgfV0sIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxuICAgICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XG4gICAgICBpZiAodGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgIT09IDApIHtcbiAgICAgICAgZGVsZXRlIHBheWxvYWQuYXBwcm92ZXJzO1xuICAgICAgICBwYXlsb2FkLnBvbGljeUFwcHJvdmFsRmxhZyA9IDI7XG4gICAgICB9XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UudXBkYXRlUG9saWN5KHBheWxvYWQsIHRoaXMucG9saWN5SWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucG9saWN5SWQgPSByZXMuX2lkO1xuXG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VuZEZvckF0dGVzdGF0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgICAnVGhlIHBvbGljeSBoYXMgYmVlbiBzZW50IGZvciBhdHRlc3RhdGlvbicsXG4gICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBwb2xpY3kgaGFzIGJlZW4gdXBkYXRlZCcsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmwgPVxuICAgICAgICAgICAgICB0aGlzLmJhc2VVUkwgKyAnL2FsbC9wb2xpY3kvd29ya3Jvb20/aWQ9JyArIHRoaXMucG9saWN5SWQ7XG4gICAgICAgICAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XG4gICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wb2xpY3kvd29ya3Jvb20nXSwgeyBxdWVyeVBhcmFtczogeyBpZDogdGhpcy5wb2xpY3lJZCB9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBsaW5rRG9jdW1lbnRXaXRoUG9saWN5KGRvY3VtZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5maWxlTmFtZSAmJlxuICAgICAgKGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdwZGYnIHx8XG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdQREYnIHx8XG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdkb2N4JyB8fFxuICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnRE9DWCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2VcbiAgICAgICAgLmV4dHJhY3RGaWxlKGRvY3VtZW50LmZpbGVFeHRlbnNpb24sIGRvY3VtZW50LmZpbGVQYXRoLCB0aGlzLnBvbGljeUlkKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgPT09ICdkb25lJyB8fCByZXMuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ2RvY3gnIHx8XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnRE9DWCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS9lZGl0LXBvbGljeSddLCB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ3BkZicgfHxcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdQREYnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wb2xpY3kvd29ya3Jvb20nXSwge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogeyBpZDogdGhpcy5wb2xpY3lJZCB9LFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgICAgIFwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5LCBzaGFsbCB3ZT9cIixcbiAgICAgICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgIFwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5LCBzaGFsbCB3ZT9cIixcbiAgICAgICAgJ2FsZXJ0J1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbnMgdGhlIGRhdGUgcGlja2VyIG9uIHBvbGljeSBmb3JtXG4gICAqL1xuICBvcGVuRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSB0cnVlO1xuICAgIC8vIHRoaXMuc2V0QWN0aXZlRmllbGRTZWxlY3RvcignSVNTVUVfREFURV9USU1FJywgJ0lTU1VFX0RBVEVfVElNRScpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsb3NlcyB0aGUgZGF0ZSBwaWNrZXIgZnJvbSBwb2xpY3kgZm9ybVxuICAgKi9cbiAgY2xvc2VEYXRlUGlja2VyKGV2dDogYW55KSB7XG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuXG4gICAgaWYgKCFldnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2dD8uZGF0ZT8uJGQpIHtcbiAgICAgIGxldCBtb250aEFycmF5ID0gW1xuICAgICAgICAnSmFuJyxcbiAgICAgICAgJ0ZlYicsXG4gICAgICAgICdNYXInLFxuICAgICAgICAnQXByJyxcbiAgICAgICAgJ0p1bicsXG4gICAgICAgICdKdWwnLFxuICAgICAgICAnQXVnJyxcbiAgICAgICAgJ1NlcCcsXG4gICAgICAgICdPY3QnLFxuICAgICAgICAnTm92JyxcbiAgICAgICAgJ0RlYycsXG4gICAgICBdO1xuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoZXZ0Py5kYXRlPy4kZCkuZ2V0RGF0ZSgpO1xuICAgICAgY29uc3QgbW9udGhWYWx1ZSA9IG1vbnRoQXJyYXlbbmV3IERhdGUoZXZ0Py5kYXRlPy4kZCkuZ2V0TW9udGgoKV07XG4gICAgICBjb25zdCB5ZWFyVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgZGF0ZVN0ciA9IGAke2RhdGVWYWx1ZX0gJHttb250aFZhbHVlfSAke3llYXJWYWx1ZX1gO1xuICAgIH1cbiAgICBpZiAoZXZ0Py5kYXRlPy4kZCkge1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgPSBldnQ/LmRhdGU/LiRkO1xuICAgIH1cbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8uY2xvc2UoKTtcbiAgfVxuICBlZGl0UG9saWN5RnJvbURvY3VtZW50cygpIHtcbiAgICB0aGlzLm1vZGUgPSAnRURJVCc7XG4gICAgdGhpcy5zaGlmdFRvRWRpdE1vZGUuZW1pdCgpO1xuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSBmYWxzZTtcbiAgICB0aGlzLm5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRQb2xpY3koKTtcbiAgfVxuXG4gIGNoZWNrRm9yQ3JlYXRlRG9jdW1lbnRzKCkge1xuICAgIGNvbnN0IGRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2hvd0NyZWF0ZURvY3VtZW50cycpO1xuICAgIHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBkYXRhID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24pIHtcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzaG93Q3JlYXRlRG9jdW1lbnRzJyk7XG4gICAgfVxuICB9XG5cbiAgZWRpdFBvbGljeSgpIHtcbiAgICB0aGlzLm1vZGUgPSAnRURJVCc7XG5cbiAgICBpZiAodGhpcy5wb2xpY3lJZCkge1xuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmVkaXRQb2xpY3kodGhpcy5wb2xpY3lJZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzWzBdO1xuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWRzID0gZGF0YS5jYXRlZ29yeV9kZXRhaWxzX2Fyci5tYXAoXG4gICAgICAgICAgICAoaWQ6IGFueSkgPT4gaWQuY2F0T2JqSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucG9saWN5QXBwcm92YWxGbGFnID0gZGF0YS5wb2xpY3lBcHByb3ZhbEZsYWc7XG4gICAgICAgICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzID0gZGF0YT8uYXBwcm92YWxXb3JrZmxvd0RldGFpbHM/Lm1hcChcbiAgICAgICAgICAgICh3b3JrZmxvdzogYW55KSA9PiB3b3JrZmxvdz8uX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBbXTtcbiAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzID0gZGF0YT8uYXBwcm92ZXJzO1xuICAgICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJXb3JrRmxvdyhjYXRlZ29yeUlkcywgZGF0YSk7XG4gICAgICAgICAgdGhpcy5nZXRMaW5rZWRQb2xpY2llcyhkYXRhPy5faWQpO1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVQb2xpY3lGb3JtKGRhdGEsIGNhdGVnb3J5SWRzKTtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xuICAgICAgICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihkYXRhKTtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcG9wdWxhdGVQb2xpY3lGb3JtKGRhdGE6IGFueSwgY2F0ZWdvcnlJZHM6IGFueSkge1xuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSBkYXRhLlJldmlld2VyQXR0YWNobWVudHMubWFwKChmaWxlOiBhbnkpID0+IHtcbiAgICAgIGZpbGUuZmlsZW5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICBmaWxlLmZpbGVwYXRoID0gZmlsZS5maWxlX3BhdGg7XG4gICAgICBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZS5vcmdfbmFtZTtcbiAgICAgIGZpbGUuZmlsZV9uYW1lID0gZmlsZS5vcmdfbmFtZTtcbiAgICAgIGZpbGUubGlua1NldCA9ICcnO1xuICAgICAgZGVsZXRlIGZpbGUubmFtZTtcbiAgICAgIGRlbGV0ZSBmaWxlLmZpbGVfcGF0aDtcbiAgICAgIGRlbGV0ZSBmaWxlLm9yZ19uYW1lO1xuXG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9KTtcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50cy5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICBlbGUuZmlsZW5hbWUgPSBlbGUubmFtZTtcbiAgICAgIGVsZS5maWxlcGF0aCA9IGVsZS5maWxlX3BhdGg7XG4gICAgICBlbGUub3JpZ2luYWxfZmlsZW5hbWUgPSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xuICAgICAgZWxlLmZpbGVfbmFtZSA9IGVsZS5vcmlnaW5hbF9maWxlX25hbWU7XG4gICAgICBlbGUubGlua1NldCA9IGVsZS5pc0xpbmtTZXQ7XG4gICAgICBlbGUub3RoZXJzID0gZWxlPy5vdGhlcl90eXBlO1xuXG4gICAgICBkZWxldGUgZWxlLm5hbWU7XG4gICAgICBkZWxldGUgZWxlLmZpbGVfcGF0aDtcbiAgICAgIGRlbGV0ZSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xuICAgICAgZGVsZXRlIGVsZS5pc0xpbmtTZXQ7XG4gICAgICBkZWxldGUgZWxlPy5vdGhlcl90eXBlO1xuICAgICAgcmV0dXJuIGVsZTtcbiAgICB9KTtcbiAgICBjb25zdCBncm91cF9lbXBsb3llZUlkcyA9IGRhdGEuZ3JvdXBfZW1wbG95ZWVOYW1lcy5tYXAoXG4gICAgICAoaWQ6IGFueSkgPT4gaWQ/LmVtcGxveWVlX2lkXG4gICAgKTtcbiAgICBjb25zdCBncm91cF9JZHMgPSBkYXRhPy51c2VyZ3JvdXBfaWRzPy5tYXAoKGlkOiBhbnkpID0+IGlkKSA/PyBbXTtcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcbiAgICAgIGNhdGVnb3J5SWRzLFxuICAgICAgJ19pZCdcbiAgICApO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfaWQgPSBkYXRhPy5wb2xpY3lfaWQ7XG4gICAgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gZGF0YS5wb2xpY3lfbmFtZSksXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLnBvbGljeU5vdGVzID0gZGF0YS5ub3RlcyksXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBkYXRhLmN1c3RvbV90YWdzID8gZGF0YS5jdXN0b21fdGFncyA6IFtdKTtcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9XG4gICAgICBncm91cF9lbXBsb3llZUlkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgZ3JvdXBfZW1wbG95ZWVJZHMsICdteV9tZW1iZXJfaWQnKVxuICAgICAgICA6IFtdOyAvL2RvdWJ0IGluIG5hbWVcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWUgPVxuICAgICAgZ3JvdXBfSWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBncm91cF9JZHMsICdfaWQnKVxuICAgICAgICA6IFtdO1xuXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gZGF0YS5lbnRpdGllc1xuICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5yY0xpc3QsIGRhdGEuZW50aXRpZXMuc3BsaXQoJywnKSwgJ2l0ZW1faWQnKVxuICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSBkYXRhLkNDRmFpbEVtYWlsXG4gICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIGRhdGEuQ0NGYWlsRW1haWwsICdlbXBsb3llZV9lbWFpbCcpXG4gICAgICA6IFtdO1xuICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwID1cbiAgICAgIGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgZGF0YT8uY2NfZmFpbF91c2VyZ3JvdXBfaWRzLFxuICAgICAgICAgICAgJ19pZCdcbiAgICAgICAgICApXG4gICAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwgPSBkYXRhLkNDRW1haWxcbiAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgICBkYXRhLkNDRW1haWwuc3BsaXQoJywnKSxcbiAgICAgICAgICAnZW1wbG95ZWVfZW1haWwnXG4gICAgICAgIClcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbCA9XG4gICAgICBkYXRhPy5jY191c2VyZ3JvdXBfaWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBkYXRhPy5jY191c2VyZ3JvdXBfaWRzLCAnX2lkJylcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPSBkYXRhLmVuYWJsZVBvcnRhbCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBkYXRhLmVuYWJsZVN1Z2dlc3Rpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb24gPSBkYXRhLmlzX3NpZ25hdHVyZV9yZXF1aXJlZFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yaXNrUmF0aW5nID0gZGF0YS5yaXNrX2NsYXNzID8gTnVtYmVyKGRhdGEucmlza19jbGFzcykgOiAxO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50c1xuICAgICAgPyB7XG4gICAgICAgICAgZm9ybWF0RmlsZXM6IGF0dGVzdGF0aW9uRmlsZXMsXG4gICAgICAgIH1cbiAgICAgIDogeyBmb3JtYXRGaWxlczogW10gfTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSA9IGRhdGEuc3RhcnREYXRlXG4gICAgICA/IG1vbWVudChkYXRhLnN0YXJ0RGF0ZSlcbiAgICAgIDogbW9tZW50KCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzID0gZGF0YS5jaGVja3BvaW50c1xuICAgICAgPyBkYXRhLmNoZWNrcG9pbnRzXG4gICAgICA6IFtdO1xuICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID0gZGF0YS50b3RhbF9tYXJrcyA/IGRhdGEudG90YWxfbWFya3MgOiAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBkYXRhLnBhc3NfbWFya3MgPyBkYXRhLnBhc3NfbWFya3MgOiAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5kb2N1bWVudHNBbmRMaW5rcyA9IGRhdGEuUmV2aWV3ZXJBdHRhY2htZW50c1xuICAgICAgPyB7XG4gICAgICAgICAgZm9ybWF0RmlsZXM6IHJldmlld2VyRmlsZXMsXG4gICAgICAgICAgZm9ybWF0TGlua3M6IGRhdGEuUmV2aWV3ZXJMaW5rcyxcbiAgICAgICAgfVxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSwgZm9ybWF0TGlua3M6IFtdIH07XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9XG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZGF0YS5SZXZpZXdlck1lbWJlcklkID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cyA9XG4gICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID1cbiAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkQXNzb2NpYXRlZERvY3VtZW50cyA9XG4gICAgICBkYXRhLmFzc29jaWF0ZWRfZG9jdW1lbnRzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5jY0VtYWlsT2JqSWRzID1cbiAgICAgIGRhdGE/LmNjX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDAgPyBkYXRhPy5jY191c2VyZ3JvdXBfaWRzIDogW107XG4gICAgdGhpcy5jY0ZhaWxHcm91cE9iaklkcyA9XG4gICAgICBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHNcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IGRhdGE/LmFzc2Vzc21lbnQgPz8gW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50ID0gZGF0YT8uYXNzZXNzbWVudD8ubGVuZ3RoO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRWZXJzaW9uID0gZGF0YT8ucG9saWN5X3ZlcnNpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgLy8gdGhpcy5jaGVja0ZvckNyZWF0ZURvY3VtZW50cygpO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbiA9IGRhdGEucG9saWN5X3ZlcnNpb247XG4gICAgdGhpcy5wb2xpY3lGb3JtLnByb2dyYW1TZWxlY3RlZFZhbHVlcy5wcm9ncmFtID1cbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcbiAgICAgICAgPyBkYXRhPy5wcm9ncmFtQ2F0RGV0YWlsc1swXVxuICAgICAgICA6IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbSA9XG4gICAgICBkYXRhPy5wcm9ncmFtQ2F0RGV0YWlscyAmJiBkYXRhPy5wcm9ncmFtQ2F0RGV0YWlscz8ubGVuZ3RoXG4gICAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhPy5wcm9ncmFtQ2F0RGV0YWlsc1swXSkpXG4gICAgICAgIDoge307XG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgfVxuICBjaGFuZ2VOYW1lKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBsZXQgdGV4dCA9IGV2ZW50O1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzwoLio/KT4vZ2ksICcnKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHR5cGVTZWxlY3RlZChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgPSBldmVudDtcbiAgfVxuICBvblZlcnNpb24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHJlZ2V4TWF0Y2ggPSBuZXcgUmVnRXhwKCdeW0EtWmEtejAtOVxcXFwuLV0qJCcpO1xuICAgIHRoaXMuaXNWZXJzaW9uVmFsaWQgPSByZWdleE1hdGNoLnRlc3QodGhpcy5wb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uKTtcbiAgICBpZiAoIXRoaXMuaXNWZXJzaW9uVmFsaWQpIHtcbiAgICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24/Lmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgJ1lvdXIgaW5wdXQgaXMgaW52YWxpZC4gVGhlIHZlcnNpb24gZmllbGQgY2FuIG9ubHkgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLiBUaGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgaXMgMjAgY2hhcmFjdGVycy4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlzVmVyc2lvblZhbGlkICYmXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24/Lmxlbmd0aCA+IDIwXG4gICAgKSB7XG4gICAgICB0aGlzLnZlcnNpb25FcnJvck1lc3NhZ2UgPVxuICAgICAgICAnWW91ciBpbnB1dCBpcyBpbnZhbGlkLiBUaGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgaXMgMjAgY2hhcmFjdGVycy4nO1xuICAgIH1cbiAgfVxuXG4gIC8vdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSB3aGVuIHdlIGNsaWNrIG9uIGRpdiBzZWxlY3RcbiAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZXZlbnQ7XG4gICAgdGhpcy5jcmVhdGVBcHByb3ZhbENsaWNrID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgfVxuXG4gIGxpc3RDYW5jZWxDbGlja2VkKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcbiAgICAgIC8vIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RlZEFwcHJvdmFsV29ya2Zsb3coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtldmVudF07XG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzID0gZXZlbnQ/Ll9pZCA/IFtldmVudD8uX2lkXSA6IFtdO1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtldmVudF07XG4gICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcbiAgfVxuXG4gIHVwZGF0ZWRQcm9ncmFtRGV0YWlscyhldmVudDogYW55KSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmxpbmtQcm9ncmFtID0gZXZlbnQ/LmxpbmtQcm9ncmFtO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSBldmVudD8uc2VsZWN0ZWRWYWx1ZXM7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmJ1c2luZXNzQ3ljbGUgPSBldmVudD8uYnVzaW5lc3NDeWNsZTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgb25Bc3Nlc3NtZW50U2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IFtldmVudF07XG4gIH1cbiAgZ2V0QXNzZXNzbWVudERldGFpbHMoYXNzZXNzbWVudERldGFpbHM6IGFueSwgdHlwZT86IHN0cmluZykge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXG4gICAgICAuZ2V0QXNzZXNzbWVudERldGFpbHNCeUlEKGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlEZXRhaWxzID0gcmVzWzBdLmNhdGVnb3J5LmZpbmQoXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5faWQgPT0gYXNzZXNzbWVudERldGFpbHMuY2F0ZWdvcnlfaWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFzc2Vzc21lbnQgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNhdGVnb3J5X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCxcbiAgICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHtcbiAgICAgICAgICAgICAgICBpZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgICAgICBhc3Nlc3NtZW50X25hbWU6IHJlc1swXS5hc3Nlc3NtZW50X25hbWUsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiByZXNbMF0ucXVlc3Rpb25zQ291bnQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNhdGVnb3J5X2RldGFpbHM6IGNhdGVnb3J5RGV0YWlscyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZXRPd25lcnNPbkxvYWQoKSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmFsbEFwcHJvdmVycyxcbiAgICAgIFt0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCldLFxuICAgICAgJ21lbWJlcl9pZCdcbiAgICApO1xuICB9XG5cbiAgYXBwcm92YWxXb3JrZmxvd0FQSUNhbGwoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3Qgb2JqZWN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICdfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRBcHByb3ZhbFdvcmtmbG93KGFwcHJvdmVyTGlzdDogYW55KSB7XG4gICAgbGV0IHJldHVybkpzb246IGFueSA9IHt9O1xuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXBwcm92ZXJMaXN0KSk7XG4gICAgbW9kaWZpZWREYXRhPy5mb3JFYWNoKCh3b3JrZmxvdzogYW55KSA9PiB7XG4gICAgICB3b3JrZmxvdz8uYXBwcm92YWxfd29ya2Zsb3c/LmZvckVhY2goKGFwcHJvdmVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGkgPSBpbmRleCArIDE7XG4gICAgICAgIHJldHVybkpzb25bJ2xldmVsJyArIGldID0gYXBwcm92ZXI7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuSnNvbjtcbiAgfVxuXG4gIGRlbGV0ZUxldmVsKGluZGV4OiBhbnkpIHtcbiAgICAvLyBBcHByb3ZlciBMZXZlbCBkZWxldGVcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93LnNwbGljZShpbmRleCwgMSk7XG4gICAgZm9yIChcbiAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICBpIDwgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdy5sZW5ndGg7XG4gICAgICBpKytcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdLmFwcHJvdmFsX3dvcmtmbG93W2luZGV4XVsnbGV2ZWwxJ10gPT09XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydhbGlhc19uYW1lJ11cbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdW1xuICAgICAgICAgICdhbGlhc19uYW1lJ1xuICAgICAgICBdID0gYExldmVsICR7aSArIDF9YDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bJ2xldmVsMSddID0gYExldmVsICR7XG4gICAgICAgIGkgKyAxXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICBlZGl0V29ya2Zsb3coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0QXBwcm92YWxXb3JrZmxvdyA9IGV2ZW50O1xuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gIH1cblxuICAvL0Z1bmN0aW9uIHJlc3BvbnNpYmxlIHdoZW4gd2UgY2xpY2sgb24gQ1JFQVRFIEEgTkVXIEFQUFJPVkFMIFdPUktGTE9XXG4gIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKSB7XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZUFwcHJvdmFsQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgZWRpdExldmVsQ2xpY2tlZChlZGl0TGV2ZWw6IGFueSwgaW5kZXg6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0V29ya2Zsb3dMZXZlbCA9IHtcbiAgICAgIGVkaXRMZXZlbDogZWRpdExldmVsLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgIH07XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgfVxuXG4gIHNldEFjY2Vzc0ZpZWxkKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50ID09IDApIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMudXNlcnNBY2Nlc3NMaXN0O1xuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRMaXN0KCdwb2xpY3lBY2Nlc3MnLCB7XG4gICAgICAgIHVzZXJzOiB0aGlzLnVzZXJzQWNjZXNzTGlzdCxcbiAgICAgICAgZ3JvdXBzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJzQWNjZXNzTGlzdEJ5Q2F0ZWdvcnkoY2F0ZWdvcnlEZXRhaWxzOiBhbnkpIHtcbiAgICBsZXQgdW5pcXVlVXNlcnM6IGFueSA9IFtdO1xuICAgIGxldCB1bmlxdWVHcm91cHNJZDogYW55ID0gW107XG4gICAgdW5pcXVlVXNlcnMgPSB1bmlxQnkoXG4gICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9tYW5hZ2Vycz8uY29uY2F0KFxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9hcHByb3ZlcnMsXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYWxsX2F1dGhvcnNcbiAgICAgICksXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy51c2Vyc0FjY2Vzc0xpc3QgPSB1bmlxdWVVc2VycztcbiAgICB0aGlzLnVzZXJzQWNjZXNzTGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMudXNlcnNBY2Nlc3NMaXN0LCAnbWVtYmVyX2lkJyk7XG5cbiAgICB1bmlxdWVHcm91cHNJZCA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYXV0aG9yX3VzZXJncm91cF9pZHM/LmNvbmNhdChcbiAgICAgICAgICBjYXRlZ29yeURldGFpbHM/Lm93bmVyX3VzZXJncm91cF9pZHNcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBdO1xuICAgIHRoaXMuZ3JvdXBzQWNjZXNzTGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgdW5pcXVlR3JvdXBzSWQsXG4gICAgICAnX2lkJ1xuICAgICk7XG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICB0aGlzLmdyb3Vwc0FjY2Vzc0xpc3QsXG4gICAgICAnZ3JvdXBfaWQnXG4gICAgKTtcbiAgfVxuXG4gIHBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhwb2xpY3lEZXRhaWxzOiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gcG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc190eXBlO1xuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycyxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19ncm91cHMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3VwcyxcbiAgICAgICAgJ19pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID09IDApIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IFtdO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gW107XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRnJlcXVlbmN5KCkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5tYXJrX2ZhaWxlZF9hZnRlciA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFzc2lnbmVlX3N0YXJ0X2RhdGUgPSAnJztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gJyc7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gMDtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBkb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlUGlja2VyT2JqZWN0ID0ge1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgY2xhc3M6ICdlZmZlY3RpdmUtZGF0ZScsXG4gICAgICBwb3B1cDogdGhpcy5kYXRlUGlja2VyUG9wVXAsXG4gICAgICBjb21wb25lbnQ6IHRoaXMuZGF0ZVBpY2tlcixcbiAgICAgIG92ZXJsYXk6IHRoaXMuZGF0ZVBpY2tlck92ZXJsYXksXG4gICAgfTtcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuaGFuZGxlRG9jdW1lbnRDbGljayhkYXRlUGlja2VyT2JqZWN0KTtcbiAgfVxuXG4gIG9uVGVtcGxhdGVTZWxlY3QoZXZlbnQ6IGFueSwgaXNQcmVzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGV2ZW50Py5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNUZW1wbGF0ZUNsb3NlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcblxuICAgIGNvbnN0IHVuYW1lID0gdGhpcy51c2VySW5mbyA/IHRoaXMudXNlckluZm8ubmFtZSA6ICcnO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMubWVtYmVyX29ial9pZDtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5wb2xpY3lJZDtcbiAgICB0aGlzLnRlbXBsYXRlSWQgPSBldmVudFswXT8uX2lkO1xuICAgIHRoaXMucG9saWN5U2VydmljZVxuICAgICAgLnNhdmVQb2xpY3lEZXRhaWxzKHVuYW1lLCB1aWQsIGlkLCBuYW1lLCAnJywgMClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmlldyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25VcmwoKTtcbiAgICAgICAgaWYgKGlzUHJlc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9UZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldE5hdmlnYXRpb25VcmwoKSB7XG4gICAgY29uc3QgYmFzVXJsID1cbiAgICAgIHRoaXMuYmFzZVVSTCArXG4gICAgICAnL2FsbC9wb2xpY3kvZWRpdC1wb2xpY3k/aWQ9JyArXG4gICAgICB0aGlzLnBvbGljeUlkICtcbiAgICAgICcmdGVtcGxhdGVJZD0nICtcbiAgICAgIHRoaXMudGVtcGxhdGVJZDtcbiAgICB0aGlzLnRlbXBsYXRlVXJsID0gYmFzVXJsO1xuICB9XG5cbiAgbmF2aWdhdGVUb1RlbXBsYXRlKCkge1xuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodGhpcy50ZW1wbGF0ZVVybCwgdHJ1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gPHA+d29ya2Zsb3ctcG9saWN5IHdvcmtzITwvcD4gLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctcG9saWN5XCI+XG4gICAgPCEtLSBQb2xpY3kgTmFtZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeU5hbWVcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aGF0LnN2Z1wiXG4gICAgICAgICAgYWx0PVwibmFtZVwiXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucG9saWN5TmFtZSB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ25hbWUnXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lOYW1lICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgICAgUG9saWN5IE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImFjdGl2ZVNlbGVjdG9yID0gJ25hbWUnXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLCB0cnVlKVwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5TmFtZSA9PSAnJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ25hbWUnXCJcbiAgICAgICAgICAgIChmb2N1c291dCk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgZmFsc2UpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUgPSBjaGFuZ2VOYW1lKCRldmVudClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIHRoaXMgcG9saWN5XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUubGVuZ3RoICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgcG9saWN5Rm9ybS5wb2xpY3lOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiAhcG9saWN5Rm9ybS5wb2xpY3lOYW1lLnRyaW0oKVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHZjb21wbHktZWRpdG9yXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5Tm90ZXNcIlxuICAgICAgICAgICAgW2VkaXRvckNvbmZpZ109XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgPjwvdmNvbXBseS1lZGl0b3I+XG4gICAgICAgICAgPCEtLSA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cImF2YWlsYWJpbGl0eU9uUG9ydGFsKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIERvIHlvdSB3YW50IHRoaXMgcG9saWN5IHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgcG9ydGFsP1xuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdUaGUgcG9saWNpZXMgdGhhdCB5b3UgaW50ZW5kIHRvIG1ha2UgYWNjZXNzaWJsZSB0byB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbiBjYW4gYmUgYWRkZWQgdG8gdGhlIHBvbGljeSBwb3J0YWwuIEl0IGlzIGxpa2UgYSBzaGFyZWQgY2F0YWxvZyBvZiBhbGwgYWN0aXZlICYgdXBkYXRlZCBwb2xpY2llcyB0aGF0IGFueSBsb2dnZWQgaW4gdXNlciBjYW4gcmVhZC9kb3dubG9hZCBmb3IgcmVmZXJlbmNlLidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQWNjZXB0IHN1Z2dlc3Rpb25zXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MzI7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoPiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUG9saWN5IENhdGVnb3J5IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NhdGVnb3J5J1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2F0ZWdvcnknICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9jYXRlZ29yeS5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2F0ZWdvcnknXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxuICAgICAgICAgICAgPlBvbGljeSBDYXRlZ29yeSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NhdGVnb3J5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhIGNhdGVnb3J5IGZvciB0aGlzIHBvbGljeS5cIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JywgY2F0ZWdvcnkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY2F0ZWdvcnkuaXRlbV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNhdGVnb3J5Lml0ZW1fbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhdGVnb3J5LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGg+MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wbHVzXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMCwyKVwiPjxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JyxjYXRlZ29yeSlcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnkuaXRlbV9uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJjYXRlZ29yeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5J1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2F0ZWdvcnknLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNjYXRlZ29yeSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcnkgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JywgY2F0ZWdvcnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeS5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB0aGUgY2F0ZWdvcnkgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIiAqbmdJZj1cInBvbGljeUZvcm0/LmN1c3RvbVRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgcG9saWN5Rm9ybT8uY3VzdG9tVGFnc1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+e3sgdGFnLnRhZ25hbWUgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWcudmFsdWVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHRhZy50YWduYW1lIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVmZmVjdGl2ZSBEYXRlIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aGVuLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+RWZmZWN0aXZlIERhdGU8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXRpbWUtcGlja2VyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBlZmZlY3RpdmUgZGF0ZSBvZiB0aGUgcG9saWN5LlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSB8IGRhdGUgOiAnZGQgTU1NIHl5eXknXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJlZmZlY3RpdmUtZGF0ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cbiAgICAgICAgICAgICAgPGRwLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgI2RhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTsgY2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiZGF0ZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZHAtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZURhdGVQaWNrZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQb2xpY3kgT3duZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnb3duZXJzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9pbS1jcmVhdGluZy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UE9MSUNZIE9XTkVSKFMpPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3duZXJzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBvd25lcnMgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ293bmVycycsIHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnNbMF0sIDApXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXT8ubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvbGljeVVzZXJQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICArIHt7IHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0xIHZ4LW1yLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+U2FtYW50aGEgSm9uZXM8L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb2xpY3lHcm91cFBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICArNFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lVc2VyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvd25lciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJvd25lcj8ubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdvd25lcnMnLCBvd25lciwgaSArIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvd25lcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcG9saWN5R3JvdXBQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbMSwgMSwgMSwgMSwgMSwgMSwgMV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInSGFyc2h2YXJkaGFuIEthcml3YWxhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnNodmFyZGhhbiBLYXJpd2FsYVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3duZXJzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmICFwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IG93bmVycyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXZpZXcgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1xuICAgICAgXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yZXZpZXdlci5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5SRVZJRVc8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicmV2aWV3U2VsZWN0aW9uIHZ4LXAtMyB2eC1wYi0wXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1iLTFcIj5cbiAgICAgICAgICAgICAgRG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkP1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgIG5hbWU9XCJyZXZpZXctdHlwZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiXG4gICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwidHlwZVNlbGVjdGVkKHRydWUpXCJcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0zXCI+XG4gICAgICAgICAgICAgICAgWUVTXG4gICAgICAgICAgICAgIDwvZGl2PjwvYXBwLWNzLXJhZGlvXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgIG5hbWU9XCJyZXZpZXctdHlwZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIlxuICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cInR5cGVTZWxlY3RlZChmYWxzZSlcIlxuICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTNcIj5cbiAgICAgICAgICAgICAgICBOT1xuICAgICAgICAgICAgICA8L2Rpdj48L2FwcC1jcy1yYWRpb1xuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+UkVWSUVXRVI8L2xhYmVsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciByZXZpZXdpbmcgdGhpcyBwb2xpY3lcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmV2aWV3ZXIgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1NhbWFudGhhIEpvbmVzJ1wiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyByZXZpZXdlcj8ubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0zXCI+UkVWSUVXIEZSRVFVRU5DWTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzID09ICcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWRzIHRvIGJlIHJldmlld2VkP1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFRleHQgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyByZXZpZXdlckZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2VsZWN0IHRoZSByZXZpZXcgc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBOZXcgQXBwcm92YWwgV29ya2Zsb3cgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycydcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9hcHByb3ZhbC5zdmdcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycydcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCIgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXG4gICAgICAgICAgICAgID5BUFBST1ZBTCA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBjcmVhdGVBcHByb3ZhbFdvcmtmbG93KCk7IGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNyZWF0ZU5ld0J0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDUkVBVEUgQSBORVcgQVBQUk9WQUwgV09SS0ZMT1dcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgICAhc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KHRydWUpOyBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1tYi0yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtbXQtMiB2eC1tYi0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVdvcmtmbG93KClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRXb3JrZmxvdyhzZWxlY3RlZFdvcmtmbG93WzBdKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGFwcHJvdmFsIG9mIHNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93O1xuICAgICAgICAgICAgICAgIGxldCBhcHByb3ZhbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tYi0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGV2ZWwtbGVmdCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZXZlbC1uYW1lIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LWxoLTNcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFsaWFzX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcHByb3ZhbD8uYWxpYXNfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy5sZXZlbDFcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hbGlhc19uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gYXBwcm92YWw/LmFsaWFzX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8ubGV2ZWwxXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTkgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbGgtM1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LnR5cGUgPT09IFwiUk9VTkRST0JJTlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJST1VORC1ST0JJTlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LnR5cGUgPT09IFwiQU5ZT05FXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkFOWSBPTkVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTIgdngtbWwtMlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgPiAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnICYmXG4gICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoIDwgMlxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAxID09IGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA/IFwiRmluYWxcIiA6IDEgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJhcHByb3ZhbD8uYXBwcm92ZXJzWzBdPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgYXBwcm92YWw/LmFwcHJvdmVyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwid29ya2Zsb3dQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgK3t7IGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjd29ya2Zsb3dQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBhcHByb3ZhbD8uYXBwcm92ZXJzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWxJbmRleCA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImFwcHJvdmVyPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsSW5kZXggKyAxID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkZpbmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsSW5kZXggKyAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHByb3Zlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0TGV2ZWxDbGlja2VkKGFwcHJvdmFsLGFwcHJvdmFsSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZWxldGVMZXZlbChhcHByb3ZhbEluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZUJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWwtNCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT4gREVMRVRFXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZhbF93b3JrZmxvdz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICFwb2xpY3lBcHByb3ZhbEZsYWcgJiZcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBvciBjcmVhdGUgYW4gYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUG9saWN5IEFjY2VzcyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInRydWVcIlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncG9saWN5QWNjZXNzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncG9saWN5QWNjZXNzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJ0cnVlXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggJiZcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAhcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9sb2NrLXNjb3BlLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlBPTElDWSBQT1JUQUwgQUNDRVNTPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncG9saWN5QWNjZXNzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFdobyBzaG91bGQgYmUgYWJsZSB0byB2aWV3IHRoaXMgcG9saWN5P1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW10LTIgdngtbWItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9saWN5QWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb2xpY3lBY2Nlc3NQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXNzR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2Nlc3NHcm91cC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBY2Nlc3NQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ1c2VyPy5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3BvbGljeUFjY2VzcycsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5lbXBsb3llZV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNhY2Nlc3NHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYWNjZXNzR3JvdXAnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInZ4LW10LTQgdngtbWItMlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidwb2xpY3lGb3JtQWNjZXNzVHlwZSdcIiBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDBcIiAoY2hlY2tlZEV2ZW50KT1cInNldEFjY2Vzc0ZpZWxkKDApXCJcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dFwiPlxuICAgICAgICAgICAgICAgICAgICBFdmVyeW9uZSB3aG8gaGFzIGFjY2VzcyB0byB0aGlzIFBvbGljeSBDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3BvbGljeUZvcm1BY2Nlc3NUeXBlJ1wiIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiIChjaGVja2VkRXZlbnQpPVwic2V0QWNjZXNzRmllbGQoMSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtbXQtMVwiXG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHVzZXJzL2dyb3Vwc1xuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIlxuICAgICAgICAgICAgICA+VmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyczwvc3BhblxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdCB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICA+QUNDRVBUIFNVR0dFU1RJT05TXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXR0ZXN0YXRpb25zIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJmYWxzZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2F0dGVzdGF0aW9ucy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QVRURVNUQVRJT05TPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5TYW1hbnRoYSBKb25lczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9saWN5QXR0ZXN0YXRpb25Qb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICArNFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBdHRlc3RhdGlvblBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInSGFyc2h2YXJkaGFuIEthcml3YWxhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICBIYXJzaHZhcmRoYW4gS2FyaXdhbGFcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICA+UkVRVUlSRVMgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ1JlcXVpcmVzIGUtc2lnbmF0dXJlIGZvciBhdHRlc3RhdGlvbiBpbmZvIHRleHQgaGVyZS4uLidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgID4mI3hlOTFmOzwvaVxuICAgICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LW10LTJcIj5XSEVOPzwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBXaGF0IGlzIHRoZSBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpczxiciAvPnBvbGljeT9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2VcIj5cbiAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgRXZlcnkgV2VkbmVzZGF5IGJ5IDExOjU5IHBtXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCJcbiAgICAgICAgICAgID5BU1NFU1NNRU5UIE9GIFVOREVSU1RBTkRJTkc8L2xhYmVsXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPjUgUXVlc3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXBwcm92YWwgV29ya2Zsb3cgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAqbmdJZj1cImZhbHNlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2FwcHJvdmFsLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidngtZm9ybS1ncm91cCBhcHByb3ZhbC13b3JrZmxvd1wiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgICBBcHByb3ZhbCB3b3JrZmxvdyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xuICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBBcHByb3ZhbCBXb3JrZmxvd1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYXBwcm92ZXJXb3JrRmxvd0xpc3Q/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjcy1zZWxlY3RcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93XCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRXb3JrZmxvd0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5J1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZEFwcHJvdmFsV29ya2Zsb3dcIlxuICAgICAgICAgICAgICBbc2V0TWF4V2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjcy1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcHByb3ZlcldvcmtGbG93TGlzdFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZGF0YS53b3JrZmxvd19uYW1lIH19XG4gICAgICAgICAgICAgIDwvY3Mtb3B0aW9uPlxuICAgICAgICAgICAgICA8Y3Mtb3B0aW9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIi0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+Q3JlYXRlIGEgbmV3IGFwcHJvdmFsIHdvcmtmbG93PC9jcy1vcHRpb25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9jcy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpdGxlXCI+TGV2ZWwge3sgaSArIDEgfX08L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7IGxldmVsLm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGxldmVsLmFwcHJvdmVycy5zbGljZSgwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXBwcm92ZXJzJywgYXBwcm92ZXIsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXBcIiAqbmdJZj1cImxldmVsLm5hbWUgPT0gJ1NFUVVFTlRJQUwnXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBqICsgMVxuICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+e3sgYXBwcm92ZXIubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsZXZlbC5hcHByb3ZlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGFiZWxOYW1lLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICArXG5cbiAgICAgICAgICAgICAgICAgICAge3sgbGV2ZWwuYXBwcm92ZXJzLnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2xhYmVsTmFtZSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGxldmVsLmFwcHJvdmVycyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdhcHByb3ZlcnMnLCBhcHByb3ZlciwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGV2ZWwubmFtZSA9PSAnU0VRVUVOVElBTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPT0gbGV2ZWwuYXBwcm92ZXJzLnNsaWNlKDEpLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJGaW5hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGogKyAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHByb3Zlci5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUsIGxldmVsLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBhcHByb3ZlcnNMaXN0SW5kZXggPSBpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1idG5cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnd29ya2Zsb3dMZXZlbCcsIGxldmVsLCBpKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5QXBwcm92YWxGbGFnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IG9yIGNyZWF0ZSBhbiBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgPjxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYWRkTW9yZUxldmVscyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICsgQWRkIE1vcmUgTGV2ZWxzXG4gICAgICAgICAgICA8L2J1dHRvbj48L2xhYmVsXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBXaG8gLyBub3cgQXR0ZXN0YXRpb24gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXNzaWduZWVzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aG8uc3ZnXCJcbiAgICAgICAgICBhbHQ9XCJpbVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25lZXMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5BdHRlc3RhdGlvbjwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbWItMlwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmICFncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgIChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID09IDApXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2Fzc2lnbmVlcycsIHRydWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IHRoZSBwZXJzb25zIHJlc3BvbnNpYmxlIGZvciBhdHRlc3RpbmcgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtbWItMlwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFncm91cEVuYWJsZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJhc3NpZ25lZS5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduZWVQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwRW5hYmxlZFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSgnYXNzaWduZWVzJywgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXT8uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlVzZXJQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICdncm91cEFzc2lnbmVlcycsXG4gICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWVbMF0/Lmdyb3VwX25hbWVcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWVbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJncm91cC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAgICAgICAgICFncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgICAgKGlzU2VuZEZvckF0dGVzdGF0aW9uICYmXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09PSAwKSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBpZD1cIndob3ZhbGlkYXRlbXNnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCB0aGUgcGVyc29ucyByZXF1aXJlZCB0byBhdHRlc3QgdG8gdGhpcyBQb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0ucmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvblwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2hvLXRvZ2dsZVwiXG4gICAgICAgICAgICA+VEhJUyBQT0xJQ1kgUkVRVUlSRVMgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCB0aGUgcmVhZGVycyB3aWxsIGJlIHJlcXVpcmVkIHRvIGF0dGVzdCB0aGlzIHBvbGljeSB1c2luZyB0aGVpciBlbGVjdHJvbmljIHNpZ25hdHVyZS4nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICA+JiN4ZTkxZjs8L2lcbiAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICA+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNhc3NpZ25lZVBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2lnbmVlIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsIGFzc2lnbmVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgYXNzaWduZWUuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI1VzZXJQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNncm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnZ3JvdXBBc3NpZ25lZXMnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciAtLT5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgb3ZlcnNlZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8uZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyR3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjR3JvdXBFbWFpbCcsIGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZW5kIC0tPlxuXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBmYWlsIHN0YXJ0IC0tPlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJGYWlsUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWwgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgb3ZlcnNlZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8uZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyRmFpbEdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/Lmdyb3VwX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBmYWlsIGVuZCAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gV2hlbiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+V2hlbj88L2xhYmVsPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyA9PSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBidXR0b24tc2VjXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWlucHV0IGZyZXF1ZW5jeS1jdXN0b20taW5wdXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICBTZXQgQSBmcmVxdWVuY3lcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIlxuICAgICAgICAgID4gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWMgc2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdmcmVxdWVuY3knLCByYylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJmcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPnt7IGZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8IS0tIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgICAgICAgICAgIWdyb3VwRW5hYmxlZCkgfHxcbiAgICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWU/Lmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgICAgICAgICAgIGdyb3VwRW5hYmxlZCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IGFuIGF0dGVzdGF0aW9uIHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5FZmZlY3RpdmUgRGF0ZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZXItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIGRhdGUgZnJvbSB3aGljaCB0aGlzIHBvbGljeSBnb2VzIGludG8gZWZmZWN0LlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlICB8IGRhdGU6ICdkZCBNTU0geXl5eSdcIiAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MmQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHAtZGF0ZS1waWNrZXIgI2RhdGVQaWNrZXIgKG9uU2VsZWN0KT1cImRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7Y2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRlQ29uZmlnXCIgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcC1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LW92ZXJsYXlcIiAoY2xpY2spPVwiY2xvc2VEYXRlUGlja2VyKCRldmVudClcIiAqbmdJZj1cImRhdGVQaWNrZXJPdmVybGF5XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENoZWNrcG9pbnRzIC8gQXNzZXNzbWVudCBvZiBVbmRlcnN0YW5kaW5nIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAqbmdJZj1cInRydWVcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgICBBc3Nlc3NtZW50IG9mIFVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoPT09MFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJyx0cnVlKVwiPisgQWRkIENoZWNrcG9pbnRzPC9idXR0b24+IC0tPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsIHRydWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2V0IHVwIGEgcXVlc3Rpb25uYWlyZSB0byBjb25maXJtIHRoZSByZWFkZXLigJlzIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvbGljeS5cIiByZWFkb25seT4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWlucHV0XCI+XG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj57e3BvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggKyAocG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDEgPycgQ2hlY2twb2ludHMnOicgQ2hlY2twb2ludCcpfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrcG9pbnQtcG9pbnQtdGV4dCBmaXJzdFwiPlRPVEFMIFBPSU5UUzogPHNwYW4gY2xhc3M9XCJub1wiPnt7cG9saWN5Rm9ybT8udG90YWxRdWVzdGlvbn19PC9zcGFuPjxicj48ZW0+RWFjaCBxdWVzdGlvbiBjYXJyaWVzIDEgcG9pbnQ8L2VtPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2twb2ludC1wb2ludC10ZXh0XCI+UE9JTlRTIFJFUVVJUkVEIFRPIEFUVEVTVCA6IDxzcGFuIGNsYXNzPVwibm9cIj57e3BvbGljeUZvcm0/LnBhc3NpbmdNYXJrc319PC9zcGFuPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NoZWNrcG9pbnRzJywgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHMpXCJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPnt7XG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCArXG4gICAgICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgPyBcIiBRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiIFF1ZXN0aW9uXCIpXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMnLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8YXBwLXBvcG92ZXIgI2NoZWNrcG9pbnRQb3BPdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgY2hlY2twb2ludCBvZiBwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscyB8IHNsaWNlOiAxOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjaGVja3BvaW50cycsY2hlY2twb2ludCxqKzEpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoZWNrcG9pbnQ/LnF1ZXN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmlzayBDbGFzc2lmaWNhdGlvbiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgICpuZ0lmPVwic2hvd1Jpc2tDbGFzc2lmaWNhdGlvbiAmJiBmYWxzZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtLnJpc2tSYXRpbmdcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yaXNrcy5zdmdcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5yaXNrUmF0aW5nXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmlza1JhdGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJpc2sgQ2xhc3NpZmljYXRpb248L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvblwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwibG93XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNsYXNzIG9mIHJpc2tDbGFzc2lmaWNhdGlvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjbGFzcy5jbGFzc11cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJjbGFzc2lmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNsYXNzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5yaXNrUmF0aW5nID09PSBjbGFzcy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnJpc2tSYXRpbmdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBjbGFzcy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzcG9uc2liaWxpdHkgQ2VudGVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPT0gMCB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3Jlc3BvbnNpYmlsaXR5LWNlbnRlci5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyYydcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJlc3BvbnNpYmlsaXR5IENlbnRlcjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcihzKSB0aGF0IHRoaXMgcG9saWN5IHJlbGF0ZXMgdG8uXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/LnNsaWNlKDAsIDEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyYycsIHJjKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJjLml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyByYy5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJjUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JjUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3MgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByYy5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFZlcnNpb24gLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFZlcnNpb25cIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2Fzc29jaWF0ZWQtcmlza3Muc3ZnXCJcbiAgICAgICAgICBhbHQ9XCJuYW1lXCJcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5WRVJTSU9OPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uVmVyc2lvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3BlY2lmeSB0aGUgcG9saWN5IHZlcnNpb24uXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIiFpc1ZlcnNpb25WYWxpZFwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB2ZXJzaW9uRXJyb3JNZXNzYWdlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXZpZXdlciAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFJldmlld2VycyAmJiBmYWxzZVwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yZXZpZXdlci5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcidcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJldmlld2VyIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgcmV2aWV3aW5nIHRoaXMgcG9saWN5XCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZXZpZXdlciBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vyc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmV2aWV3ZXInLCByZXZpZXdlcilcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXZpZXdlci5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyByZXZpZXdlci5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBhIHJldmlld2VyIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+V2hlbj8gPC9sYWJlbD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzID09ICcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0IGJ1dHRvbi1zZWNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IHJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IHRoZSByZXZpZXcgc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxhcHAtZm9ybWF0LWFuZC1ldmlkZW5jZVxuICAgICAgICAgICAgKHVwZGF0ZUZpbGVzKT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyX2F0dGFjaG1lbnRzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAjZm9ybWF0RXZpZGVuY2VcbiAgICAgICAgICAgIFttb2RlXT1cIidwb2xpY3lSZXZpZXdlcidcIlxuICAgICAgICAgICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxuICAgICAgICAgICAgW2Zvcm1hdEV2aWRhbmNlRGF0YV09XCJwb2xpY3lGb3JtPy5kb2N1bWVudHNBbmRMaW5rc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXBwLWZvcm1hdC1hbmQtZXZpZGVuY2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE92ZXJzZWVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NjRW1haWwnICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NGYWlsJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwIHx8IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPT0gMCkgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NGYWlsJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L292ZXJzaWdodC5zdmdcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0VtYWlsJyAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0ZhaWwnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5PdmVyc2lnaHQ8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoaXMgcG9saWN5P1wiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NFbWFpbCBvZiBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIGNjRW1haWwpXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY2NFbWFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjY0VtYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cEVuYWJsZWRcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBFbmFibGVkICYmIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRW1haWxbMF0uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdLmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWwubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXT8uZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHBvbGljeSBpcyBub3QgYXR0ZXN0ZWQgb24gdGltZT9cIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NGYWlsIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgY2NGYWlsKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNjRmFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRmFpbC5lbXBsb3llZV9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNjRmFpbFBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBFbmFibGVkXCIgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXSlcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3ZlcnNlZXJGYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBbMF0/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXT8uZ3JvdXBfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyRmFpbEdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2NFbWFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRW1haWwgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgY2NFbWFpbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2NjRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRmFpbCBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBjY0ZhaWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjY0ZhaWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVsYXRlZCBEb2N1bWVudHMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvZm9ybWF0LWV2aWRlbmNlLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlcz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UkVMQVRFRCBET0NVTUVOVFM8L2xhYmVsPlxuICAgICAgICAgIDxhcHAtZm9ybWF0LWFuZC1ldmlkZW5jZVxuICAgICAgICAgICAgKHVwZGF0ZUZpbGVzKT1cInNhdmVTZWxlY3RlZExpc3QoJ2Fzc29jaWF0ZWREb2N1bWVudHMnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFttb2RlXT1cIidwb2xpY3knXCJcbiAgICAgICAgICAgIFtvcmdhbml6YXRpb25faWRdPVwib3JnYW5pemF0aW9uX2lkXCJcbiAgICAgICAgICAgIFtmb3JtYXRFdmlkYW5jZURhdGFdPVwicG9saWN5Rm9ybT8uYXNzb2NpYXRlZERvY3VtZW50c1wiXG4gICAgICAgICAgPjwvYXBwLWZvcm1hdC1hbmQtZXZpZGVuY2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExpbmsgUHJvZ3JhbXMgJiBSZXNwb25zaWJpbGl0aWVzIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYWRkTGlua1Byb2dyYW1cIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdsaW5rUHJvZ3JhbSdcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2xpbmtQcm9ncmFtJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgICBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCJcbiAgICAgICAgICBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvbGluay1pdGVtcy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgID5MSU5LIFBST0dSQU1TICYgUkVTUE9OU0lCSUxJVElFUzwvbGFiZWxcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbGlua1Byb2dyYW0nLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgUHJvZ3JhbXMgJiByZXNwb25zaWJpbGl0aWVzIHRoYXQgYXJlPGJyIC8+YXNzb2NpYXRlZCB3aXRoXG4gICAgICAgICAgICAgIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZSgnbGlua1Byb2dyYW0nLCBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5uYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICs0XG4gICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyXG4gICAgICAgICAgICAgICNwcm9ncmFtUmVzcG9uc2liaWxpdHlQb3BvdmVyXG4gICAgICAgICAgICAgIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlcG9ydGluZyBpbmZvcm1hdGlvbiBzZWN1cml0eSB3ZWFrbmVzc2VzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGluZyBpbmZvcm1hdGlvbiBzZWN1cml0eSB3ZWFrbmVzc2VzXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbGlua1Byb2dyYW0nLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTGluayBBc3Nlc3NtZW50IC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRMaW5rQXNzZXNzbWVudFwiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2lzQXNzZXNzbWVudCcgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hc3Nlc3NtZW50Py5sZW5ndGhcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9hc3Nlc3NtZW50cy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIEFTU0VTU01FTlRTPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IGFzc2Vzc21lbnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzPGJyIC8+cG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLXBvcG92ZXJcbiAgICAgICAgICAgICAgI3Byb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXJcbiAgICAgICAgICAgICAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFzc2Vzc21lbnQgb2YgcG9saWN5Rm9ybS5hc3Nlc3NtZW50IHwgc2xpY2UgOiAxXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhc3Nlc3NtZW50Py5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExpbmsgUmVsYXRlZCBQb2xpY2VzIC0tPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llc1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdpc0xpbmtlZFBvbGljZXMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiIVNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgW3NyY109XCJMSU5LUy5saW5rZWRQb2xpY3lJbWFnZVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICBbeG1sbnNdPVwiTElOS1MuY2hlY2tlZFwiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIFJFTEFURUQgUE9MSUNJRVM8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0xpbmtlZFBvbGljZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgcG9saWNpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwb2xpY3kgb2YgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShDT05TVEFOVFMuTElOS19QT0xJQ1ksIHBvbGljeT8uY29udHJhY3RfaWQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Py5jb250cmFjdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHBvbGljeT8uY29udHJhY3RfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWxhdGVkUG9saWN5LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09IENPTlNUQU5UUy5MSU5LX1BPTElDWVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcihDT05TVEFOVFMuTElOS19QT0xJQ1ksIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JlbGF0ZWRQb2xpY3kgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbGljeSBvZiBTZWxlY3RlZExpc3RPZlBvbGljaWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCBwb2xpY3k/LmNvbnRyYWN0X2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwb2xpY3k/LmNvbnRyYWN0X25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lGb3JtPy5MaW5rZWRQb2xpY2llcyA9PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2hvLXRvZ2dsZVwiXG4gICAgICAgICAgICA+RElTUExBWSBPTiBUSEUgUE9MSUNZIFBPUlRBTFxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIkNPTlNUQU5UUy5MSU5LX1BPTElDWV9IRUxQX1RFWFRcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8YXBwLWNoZWNrYm94LWxpc3RcbiAgICBbY29uZmlnXT1cImNhdGVnb3J5Q29uZmlnXCJcbiAgICBbdHdvQ29sdW1uXT1cImZhbHNlXCJcbiAgICBbaXRlbXNMaXN0XT1cImNhdGVnb3J5TGlzdFwiXG4gICAgW3NlbGVjdGVkSXRlbXNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFtpZGVudGlmaWVyS2V5XT1cIidfaWQnXCJcbiAgICBbZGlzcGxheUtleV09XCInaXRlbV9uYW1lJ1wiXG4gICAgW3Rvb2x0aXBLZXldPVwiJ2l0ZW1fbmFtZSdcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcIlxuICAgIChzYXZlTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjYXRlZ29yeScsICRldmVudClcIlxuICAgIChjbG9zZUxpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtsb2FkZWRdPVwiIWNhdGVnb3JpZXNMaXN0TG9hZGVkXCJcbiAgPlxuICA8L2FwcC1jaGVja2JveC1saXN0PlxuICA8IS0tIDxhcHAtY2hlY2tib3gtbGlzdCBbY29uZmlnXT1cImFwcHJvdmFsV29ya2Zsb3dDb25maWdcIiBbdHdvQ29sdW1uXT1cInRydWVcIlxuICBbaXRlbXNMaXN0XT1cIlwiXG4gIFtzZWxlY3RlZEl0ZW1zXT1cInBvbGljeUZvcm0uaXNzdWVDQ1VzZXJzXCIgW2lkZW50aWZpZXJLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiIFtkaXNwbGF5S2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiIFt0b29sdGlwS2V5XT1cIidlbXBsb3llZV9lbWFpbCdcIlxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yPT09J0lTU1VFX0NDJ1wiIChzYXZlTGlzdCk9XCJzZWxlY3RvckFjdGlvbigkZXZlbnQsJ0lTU1VFX0NDJylcIlxuICAoY2xvc2VMaXN0KT1cImZpZWxkRGVzZWxlY3RvcignSVNTVUVfQ0MnKVwiPlxuPC9hcHAtY2hlY2tib3gtbGlzdD4gLS0+XG5cbiAgPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJzLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCJcbiAgICBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyY0xpc3RcIlxuICAgIFtzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkUkNzXCJcbiAgICBbcmNJZEtleV09XCInaXRlbV9pZCdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3JjJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlUmNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbbG9hZGVkXT1cInJjTGlzdExvYWRlZFwiXG4gID5cbiAgPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxuXG4gIDxhcHAtbGluay1yZWxhdGVkLXBvbGljaWVzXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFttb2RlXT1cIm1vZGVcIlxuICAgIFtzZWxlY3RlZFBvbGljaWVzXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIlxuICAgIChjbG9zZUxpbmtQb2xpY3lMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICAoc2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCAkZXZlbnQpXCJcbiAgPjwvYXBwLWxpbmstcmVsYXRlZC1wb2xpY2llcz5cblxuICA8YXBwLXVzZXJzLXJhZGlvLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgICBbdXNlcnNMaXN0XT1cImFsbFJldmlld2Vyc1wiXG4gICAgW2hlYWRlclRleHRdPVwiJ1NlbGVjdCBhIFJldmlld2VyJ1wiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vyc1wiXG4gICAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgPlxuICA8L2FwcC11c2Vycy1yYWRpby1saXN0PlxuXG4gIDxhcHAtb3duZXItbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyAmJiAhZ3JvdXBFbmFibGVkXCJcbiAgICBbdXNlcnNMaXN0XT1cIm92ZXJzZWVyc0xpc3RcIlxuICAgIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLkNDRW1haWxcIlxuICAgIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NFbWFpbCcsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID5cbiAgPC9hcHAtb3duZXItbGlzdD5cblxuICA8dXNlci1ncm91cC1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRW1haWwnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NFbWFpbFwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uQ0NHcm91cEVtYWlsXCJcbiAgICAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0VtYWlsJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiXG4gID5cbiAgPC91c2VyLWdyb3VwLWxpc3Q+XG5cbiAgPGFwcC1vd25lci1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCcgJiYgIWdyb3VwRW5hYmxlZFwiXG4gICAgW3VzZXJzTGlzdF09XCJvdmVyc2VlcnNMaXN0XCJcbiAgICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiXG4gICAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbFwiXG4gICAgW3VzZXJJZEtleV09XCInZW1wbG95ZWVfaWQnXCJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0ZhaWwnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLW93bmVyLWxpc3Q+XG5cbiAgPHVzZXItZ3JvdXAtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NGYWlsRW1haWxcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXBcIlxuICAgIChzYXZlKT1cInNhdmVTZWxlY3RlZExpc3QoJ2NjRmFpbCcsICRldmVudClcIlxuICAgIChjYW5jZWwpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtmZWF0dXJlZmxhZ109XCJncm91cEVuYWJsZWRcIlxuICA+XG4gIDwvdXNlci1ncm91cC1saXN0PlxuXG4gIDxhcHAtZ3JvdXAtdXNlcnMtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmICFncm91cEVuYWJsZWRcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYXNzaWduZWVzTGlzdFwiXG4gICAgW2dyb3Vwc0xpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcbiAgICBbdXNlcklkS2V5XT1cIidteV9tZW1iZXJfaWQnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLWdyb3VwLXVzZXJzLWxpc3Q+XG5cbiAgPHVzZXItZ3JvdXAtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3duZXJsaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcbiAgICBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCJcbiAgPlxuICA8L3VzZXItZ3JvdXAtbGlzdD5cblxuICA8YXBwLW93bmVyLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJyAmJiBmYWxzZVwiXG4gICAgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgQXBwcm92ZXJzJ1wiXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICAgIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cIlxuICAgICAgYWRkTW9yZUxldmVsc1xuICAgICAgICA/IFtdXG4gICAgICAgIDogcG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1thcHByb3ZlcnNMaXN0SW5kZXhdLmFwcHJvdmVyc1xuICAgIFwiXG4gICAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gICAgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW21vZGVdPVwibW9kZVwiXG4gICAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gICAgKHJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlKT1cInJldmlld2VyVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbd29ya2Zsb3dMaXN0XT1cIndvcmtmbG93TGlzdFwiXG4gICAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbiAgPlxuICA8L2FwcC1vd25lci1saXN0PlxuXG4gIDxhcHAtZnJlcXVlbmN5LWNvbnRhaW5lclxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCJcbiAgICBbbW9kZV09XCIncG9saWN5J1wiXG4gICAgW2ZyZXF1ZW5jeURldGFpbHNdPVwiZnJlcXVlbmN5RGV0YWlsc1wiXG4gICAgKHNlbGVjdGVkRnJlcXVlbmN5KT1cImZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXG4gICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCJcbiAgICAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cblxuICA8YXBwLWZyZXF1ZW5jeS1jb250YWluZXJcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXCJcbiAgICBbbW9kZV09XCIncmV2aWV3ZXJGcmVxdWVuY3knXCJcbiAgICBbZnJlcXVlbmN5RGV0YWlsc109XCJyZXZpZXdlckZyZXF1ZW5jeURldGFpbHNcIlxuICAgIChzZWxlY3RlZEZyZXF1ZW5jeSk9XCJyZXZpZXdlckZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXG4gICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCJcbiAgICAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cblxuICA8dmMtbGluay1wcm9ncmFtXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2xpbmtQcm9ncmFtJ1wiXG4gICAgKGNsb3NlKT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbcG9saWN5XT1cInBvbGljeUZvcm1cIlxuICAgIFtzZWxlY3RlZFByb2dyYW1dPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzXCJcbiAgICBbbW9kZV09XCJtb2RlXCJcbiAgICBbc2VsZWN0ZWRMaW5rUHJvZ3JhbV09XCJzZWxlY3RlZExpbmtQcm9ncmFtXCJcbiAgICAoY2hhbmdlVGFiKT1cImNoYW5nZVRhYignbGlua2VkUHJvZ3JhbXMnKVwiXG4gICAgKHVwZGF0ZWRQcm9ncmFtRGV0YWlscyk9XCJ1cGRhdGVkUHJvZ3JhbURldGFpbHMoJGV2ZW50KVwiXG4gID5cbiAgPC92Yy1saW5rLXByb2dyYW0+XG5cbiAgPGFwcC1jaGVja3BvaW50cy1wb2xpY3ktY29udGFpbmVyXG4gICAgKGNsb3NlQ2hlY2tQb2ludCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2NoZWNrcG9pbnREYXRhXT1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzXCJcbiAgICBbcmVxdWlyZWRQb2ludF09XCJwb2xpY3lGb3JtPy5wYXNzaW5nTWFya3NcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxuICAgIChzYXZlQ2hlY2tQb2ludCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjaGVja3BvaW50cycsICRldmVudClcIlxuICA+PC9hcHAtY2hlY2twb2ludHMtcG9saWN5LWNvbnRhaW5lcj5cbiAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cblxuICA8YXBwLWFwcHJvdmFsLXdvcmtmbG93XG4gICAgKm5nSWY9XCJlbmFibGVBcHByb3ZhbFdvcmtmbG93XCJcbiAgICBbc2VsZWN0ZWRDYXRlZ29yeV09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFthcHByb3ZlcldvcmtGbG93TGlzdF09XCJhcHByb3ZlcldvcmtGbG93TGlzdFwiXG4gICAgW2FsbEFwcHJvdmVyc109XCJhbGxBcHByb3ZlcnNcIlxuICAgIChsaXN0Q2FuY2VsQ2xpY2tlZCk9XCJsaXN0Q2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRXb3JrZmxvd05leHQpPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KCRldmVudClcIlxuICAgIChzYXZlQXBwcm92YWxXb3JrZmxvdyk9XCJhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbCgkZXZlbnQpXCJcbiAgICBbZWRpdEFwcHJvdmFsV29ya2Zsb3ddPVwiZWRpdEFwcHJvdmFsV29ya2Zsb3dcIlxuICAgIFtjcmVhdGVBcHByb3ZhbENsaWNrXT1cImNyZWF0ZUFwcHJvdmFsQ2xpY2tcIlxuICAgIChjbG9zZUNyZWF0ZUNsaWNrZWQpPVwiY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpXCJcbiAgICBbZWRpdFdvcmtmbG93TGV2ZWxdPVwiZWRpdFdvcmtmbG93TGV2ZWxcIlxuICA+PC9hcHAtYXBwcm92YWwtd29ya2Zsb3c+XG4gIDwhLS0gPGFwcC1zZWxlY3QtYXBwcm92ZXJzPjwvYXBwLXNlbGVjdC1hcHByb3ZlcnM+IC0tPlxuXG4gIDxhcHAtcG9saWN5LWFjY2Vzc1xuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCJcbiAgICBbcG9saWN5QWNjZXNzVHlwZV09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGVcIlxuICAgIChjbG9zZSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW29yZ1VzZXJzTGlzdF09XCJ1c2Vyc0xpc3RcIlxuICAgIFt1c2Vyc0FjY2Vzc0xpc3RdPVwidXNlcnNBY2Nlc3NMaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgW2dyb3Vwc0FjY2Vzc0xpc3RdPVwiZ3JvdXBzQWNjZXNzTGlzdFwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1wiXG4gICAgW2Rpc2FibGVkSWRzXT1cInVzZXJzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Rpc2FibGVkR3JvdXBJZHNdPVwiZ3JvdXBzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Z1dHVyZVVzZXJzV2lsbFNlbGVjdF09XCJwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsICRldmVudClcIlxuICAgIChzZXRQb2xpY3lBY2Nlc3NUeXBlKT1cInBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gJGV2ZW50XCJcbiAgPlxuICA8L2FwcC1wb2xpY3ktYWNjZXNzPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8IS0tIDxhcHAtY3JlYXRlLWRvY3VtZW50cyAqbmdJZj1cInNob3dDcmVhdGVEb2N1bWVudHNcIlxuICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxuICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICBbdXNlckluZm9dPVwidXNlckluZm9cIlxuICAgW3BvbGljeUlkXT1cInBvbGljeUlkXCJcbiAgIFtwb2xpY3lOYW1lXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXG4gICAoZGlzY29ubmVjdFJlZnJlc2gpPVwiZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSlcIlxuICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICA+PC9hcHAtY3JlYXRlLWRvY3VtZW50cz4gLS0+XG4gIDxsaWItZG9jdW1lbnQtc2VjdGlvblxuICAgICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiXG4gICAgW3RlbXBsYXRlVmlld109XCJpc1RlbXBsYXRlQ2xvc2VkXCJcbiAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICAgW3VzZXJJbmZvXT1cInVzZXJJbmZvXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFt0ZW1wbGF0ZVVybF09XCJ0ZW1wbGF0ZVVybFwiXG4gICAgW2lzVGVtcGxhdGVPcGVuZWRdPVwidGVtcGxhdGVWaWV3XCJcbiAgICBbcG9saWN5TmFtZV09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxuICAgIChkaXNjb25uZWN0UmVmcmVzaCk9XCJkaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKVwiXG4gICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICAgKG9wZW5UZW1wbGF0ZSk9XCJ0ZW1wbGF0ZVZpZXcgPSB0cnVlXCJcbiAgPjwvbGliLWRvY3VtZW50LXNlY3Rpb24+XG48L25nLWNvbnRhaW5lcj5cblxuPGFwcC1hc3Nlc3NtZW50LWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIlxuICBbcHJvZ3JhbV9pZHNdPVwiJydcIlxuICBbaXNFZGl0XT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiXG4gIChjYW5jZWxBc3Nlc3NtZW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVwiXG4gIFtzZWxlY3RlZEFzc2Vzc21lbnRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudFswXVwiXG4gIFttb2RlXT1cIidwb2xpY3knXCJcbiAgKG9uQXNzZXNzbWVudFNlbGVjdCk9XCJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgc2F2ZVNlbGVjdGVkTGlzdCgnaXNBc3Nlc3NtZW50JywgZmFsc2UpXG4gIFwiXG4+PC9hcHAtYXNzZXNzbWVudC1saXN0PlxuXG48YXBwLW93bmVyLWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycycgJiYgZmFsc2VcIlxuICBbbGlzdEhlYWRpbmddPVwiJ1NlbGVjdCBBcHByb3ZlcnMnXCJcbiAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIlxuICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICBbc2VsZWN0ZWRVc2Vyc109XCJcbiAgICBhZGRNb3JlTGV2ZWxzXG4gICAgICA/IFtdXG4gICAgICA6IHBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbYXBwcm92ZXJzTGlzdEluZGV4XS5hcHByb3ZlcnNcbiAgXCJcbiAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gIFtpdGVtRW1haWxLZXldPVwiJ21lbWJlcl9lbWFpbCdcIlxuICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiXG4gIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gIChyZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSk9XCJyZXZpZXdlclR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFt3b3JrZmxvd0xpc3RdPVwid29ya2Zsb3dMaXN0XCJcbiAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbj5cbjwvYXBwLW93bmVyLWxpc3Q+XG5cbjxhcHAtb3duZXItbGlzdFxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiXG4gIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IE93bmVyKHMpJ1wiXG4gIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgW3Nob3dXb3JrZmxvd109XCJmYWxzZVwiXG4gIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxuICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvd25lcnMnLCAkZXZlbnQpXCJcbiAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgW21vZGVdPVwibW9kZVwiXG4gIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgPz8gW11cIlxuPlxuPC9hcHAtb3duZXItbGlzdD5cblxuPGFwcC1zZWxlY3QtdGVtcGxhdGUtbGlzdFxuICAqbmdJZj1cInRlbXBsYXRlVmlld1wiXG4gIFtzZWxlY3RlZENhdGVnb3J5SWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzXCJcbiAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gIChvblRlbXBsYXRlU2VsZWN0KT1cIm9uVGVtcGxhdGVTZWxlY3QoJGV2ZW50KVwiXG4+PC9hcHAtc2VsZWN0LXRlbXBsYXRlLWxpc3Q+XG4iXX0=
2012
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctcG9saWN5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3dvcmtmbG93LXBvbGljeS93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcG9saWN5L3dvcmtmbG93LXBvbGljeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBVzNDLE9BQU8sTUFBTSxNQUFNLGVBQWUsQ0FBQztBQUtuQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBS3pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRdkUsTUFBTSxPQUFPLHVCQUF1QjtJQTJLbEMsWUFDVSxhQUE0QixFQUM1QixRQUF5QixFQUN6QixZQUEwQixFQUMxQixXQUF3QixFQUN4QixxQkFBNEMsRUFDNUMsTUFBYyxFQUNkLEtBQXFCLEVBQ3JCLGdCQUFrQyxFQUMxQyxnQkFBa0MsRUFDMUIsU0FBNEIsRUFDNUIsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsdUJBQWdELEVBQ2hELHlCQUFvRCxFQUNwRCx1QkFBZ0QsRUFDaEQsYUFBNEI7UUFmNUIsa0JBQWEs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QVcsR0FBRyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQzsrR0E5ekVVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHd6QkFrQkQsVUFBVSw2QkMzRDdDLGl5eklBK3JIQTs7NEZEdHBIYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCO3lqQkFPckIsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0kscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNrQixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBQ2IsY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRSxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFdUIsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBRTNCLGVBQWU7c0JBRGQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBNnZFNUQsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICduZzItZGF0ZS1waWNrZXInO1xuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSAndmNvbXBseS1lZGl0b3InO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uQWxlcnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpcm1hdGlvbi1hbGVydCc7XG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvbGljeUZvcm0gfSBmcm9tICcuLi93b3JrZmxvdy1pbnRlcmZhY2VzL2NyZWF0ZS1wb2xpY3ktZm9ybSc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBQb2xpY3lTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcG9saWN5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBVaUtpdFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy91aS1raXQuc2VydmljZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybUxvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50L21vbWVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZyZXF1ZW5jeVNlcnZpY2UgfSBmcm9tICcuLi9zaGFyZWRDb21wb25lbnRzL2ZyZXF1ZW5jeS9mcmVxdWVuY3kuc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtYXRBbmRFdmlkZW5jZUNvbXBvbmVudCB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvZm9ybWF0LWFuZC1ldmlkZW5jZS9mb3JtYXQtYW5kLWV2aWRlbmNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uL3NoYXJlZENvbXBvbmVudHMvbGluay1wcm9ncmFtL3Jlc3RhcGkuc2VydmljZSc7XG5pbXBvcnQgeyBERUZBVUxUXzI0SFIsIERFRkFVTFRfVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cy90aW1lLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uVXNlclNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9vcmdhbml6YXRpb24tdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9jb21tb24td29ya2Zsb3ctc2VydmljZXMvb3JnYW5pemF0aW9uLWNvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBsaWFuY2VDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvY29tbW9uLXdvcmtmbG93LXNlcnZpY2VzL2NvbXBsaWFuY2UtY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09OU1RBTlRTIH0gZnJvbSAnLi4vbGluay1yZWxhdGVkLXBvbGljaWVzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBMSU5LUyB9IGZyb20gJy4uL3dvcmtmbG93L3NoYXJlZC9jb25zdGFudHMvY2RuLWxpbmsuY29uc3RhbnQnO1xuaW1wb3J0IHsgSWZyYW1lU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2lmcmFtZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXdvcmtmbG93LXBvbGljeScsXG4gIHRlbXBsYXRlVXJsOiAnLi93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy1wb2xpY3kuY29tcG9uZW50Lmxlc3MnLCAnLi4vZm9ybXMubGVzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1BvbGljeUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIENPTlNUQU5UUzogYW55ID0gQ09OU1RBTlRTO1xuICBMSU5LUzogYW55ID0gTElOS1M7XG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSBtb2RlID0gJ0NSRUFURSc7XG4gIEBJbnB1dCgpIHBvbGljeUlkID0gJyc7XG4gIEBJbnB1dCgpIGZlYXR1cmU6IGFueTtcbiAgQE91dHB1dCgpIHNob3dDb25maXJtYXRpb25BbGVydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXIhOiBEYXRlUGlja2VyQ29tcG9uZW50O1xuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBkaXNjb25uZWN0UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHNoaWZ0VG9FZGl0TW9kZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQElucHV0KCkgY29udmVydEZpbGVEYXRhOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgc2VsZWN0ZWRDYXRlZ29yeSA9ICcnO1xuICBASW5wdXQoKSBpc1NlbmRGb3JBdHRlc3RhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0ZW1wbGF0ZUlkOiBzdHJpbmcgPSAnJztcblxuICBAVmlld0NoaWxkKCdmb3JtYXRFdmlkZW5jZScpIGZvcm1hdEV2aWRlbmNlITogRm9ybWF0QW5kRXZpZGVuY2VDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2RhdGVQaWNrZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogZmFsc2UgfSlcbiAgZGF0ZVBpY2tlclBvcFVwITogRWxlbWVudFJlZjtcblxuICBkZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xuICAgIG1vZGU6ICdwcmltZScsXG4gICAgY29sb3JQYWxldHRlOiB0cnVlLFxuICAgIGxpbms6IHRydWUsXG4gICAgcGxhY2Vob2xkZXI6ICdBZGQgYSBkZXNjcmlwdGlvbiBmb3IgdGhpcyBwb2xpY3kuJyxcbiAgfTtcbiAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnO1xuICBzY3JvbGxUb0JvdHRvbSA9IGZhbHNlO1xuICBuYXZpZ2F0ZVRvRG9jdW1lbnRzU2VjdGlvbiA9IGZhbHNlO1xuXG4gIGFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gIHJjTGlzdDogYW55ID0gW107XG4gIHVzZXJzTGlzdDogYW55ID0gW107XG4gIGFsbEFwcHJvdmVyczogYW55ID0gW107XG4gIGFsbFJldmlld2VyczogYW55ID0gW107XG4gIGFzc2lnbmVlc0xpc3Q6IGFueSA9IFtdO1xuICBvd25lcmxpc3Q6IGFueSA9IFtdO1xuICByZXZpZXdlcnNMaXN0OiBhbnkgPSBbXTtcbiAgb3ZlcnNlZXJzTGlzdDogYW55ID0gW107XG4gIHJjTGlzdExvYWRlZCA9IGZhbHNlO1xuICB1c2Vyc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgY2F0ZWdvcnlMaXN0OiBhbnkgPSBbXTtcbiAgZ3JvdXBzTGlzdDogYW55W10gPSBbXTtcbiAgd29ya0Zsb3dMaXN0OiBhbnlbXSA9IFtdO1xuICBhcHByb3ZlcldvcmtGbG93TGlzdDogYW55W10gPSBbXTtcbiAgc3VibWl0dGVkID0gZmFsc2U7XG4gIGNjRW1haWxPYmpJZHM6IGFueVtdID0gW107XG4gIGNjRmFpbEdyb3VwT2JqSWRzOiBhbnlbXSA9IFtdO1xuICB1c2Vyc0FjY2Vzc0xpc3Q6IGFueVtdID0gW107XG4gIHVzZXJzQWNjZXNzTGlzdElkczogYW55W10gPSBbXTtcbiAgZ3JvdXBzQWNjZXNzTGlzdElkczogYW55W10gPSBbXTtcbiAgZ3JvdXBzQWNjZXNzTGlzdDogYW55W10gPSBbXTtcbiAgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llczogYW55W10gPSBbXTtcblxuICBsb2FkZXIgPSBmYWxzZTtcbiAgY2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcbiAgZ3JvdXBzTGlzdExvYWRlZCA9IGZhbHNlO1xuICBjYXRlZ29yeUNvbmZpZyA9IHtcbiAgICBwYW5lbFRpdGxlOiAnU2VsZWN0IFBvbGljeSBDYXRlZ29yeScsXG4gICAgZmxvYXRpbmdUZXh0U2luZ3VsYXI6ICdQb2xpY3kgQ2F0ZWdvcnkgU2VsZWN0ZWQnLFxuICAgIGZsb2F0aW5nVGV4dFBsdXJhbDogJ1BvbGljeSBDYXRlZ29yaWVzIFNlbGVjdGVkJyxcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBQb2xpY3kgQ2F0ZWdvcnknLFxuICAgIHNlYXJjaEVuYWJsZWQ6IHRydWUsXG4gICAgc2VsZWN0QWxsRW5hYmxlZDogdHJ1ZSxcbiAgICB3b3JrZmxvdzogJ3BvbGljeScsXG4gIH07XG4gIGFwcHJvdmFsV29ya2Zsb3dDb25maWcgPSB7XG4gICAgcGFuZWxUaXRsZTogJ1NlbGVjdCB1c2VyKHMpJyxcbiAgICBmbG9hdGluZ1RleHRTaW5ndWxhcjogJ1VzZXIgc2VsZWN0ZWQnLFxuICAgIGZsb2F0aW5nVGV4dFBsdXJhbDogJ1VzZXJzIHNlbGVjdGVkJyxcbiAgICBzZWFyY2hQbGFjZWhvbGRlcjogJ1NlYXJjaCBVc2VyJyxcbiAgICBzZWFyY2hFbmFibGVkOiB0cnVlLFxuICAgIHNlbGVjdEFsbEVuYWJsZWQ6IHRydWUsXG4gIH07XG5cbiAgYWRkTW9yZUxldmVscyA9IGZhbHNlO1xuICBhcHByb3ZlcnNMaXN0SW5kZXggPSAwO1xuICB3b3JrZmxvd0xpc3QgPSBbJ1NFUVVFTlRJQUwnLCAnUk9VTkQtUk9CSU4nLCAnQU5ZIE9ORSddO1xuICBkYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuICBkYXRlQ29uZmlnID0ge1xuICAgIGRpc2FibGVLZXlwcmVzczogdHJ1ZSxcbiAgICBmb3JtYXQ6ICdERCBNTSBZWVlZJyxcbiAgICB1blNlbGVjdE9uQ2xpY2s6IHRydWUsXG4gICAgb3Blbk9uQ2xpY2s6IGZhbHNlLFxuICAgIG9wZW5PbkZvY3VzOiBmYWxzZSxcbiAgfTtcbiAgZnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICBwYXR0ZXJuOiAnJyxcbiAgICBub3RpZmljYXRpb25QZW5kaW5nOiAwLFxuICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgIGRlYWN0aXZhdGlvblZhbHVlOiAwLFxuICAgIHNlbGVjdGVkUmVwb3J0OiAwLFxuICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgIHN0YXJ0RGF0ZTogTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApLFxuICAgIHN0YXJ0T25UaGVEYXk6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICB3aW5kb3c6IDAsXG4gICAgZmFpbGVkOiAwLFxuICAgIHRpbWU6IERFRkFVTFRfVElNRSxcbiAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiAwLFxuICB9O1xuICByZXZpZXdlckZyZXF1ZW5jeURldGFpbHMgPSB7XG4gICAgcGF0dGVybjogJycsXG4gICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICBkYXRlT2ZNb2RpZmllZDogMCxcbiAgICBkZWFjdGl2YXRpb25WYWx1ZTogMCxcbiAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICBsaWZlY3ljbGU6ICcwMDAwLTAwLTAwfn4wJyxcbiAgICBzdGFydERhdGU6IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgd2luZG93OiAwLFxuICAgIGZhaWxlZDogMCxcbiAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgZmFpbGVkVGltZTogJycsXG4gICAgY29udGludW91c19mYWlsZWRfZGF5czogMyxcbiAgfTtcbiAgZnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnV2hhdCBpcyB0aGUgYXR0ZXN0YXRpb24gc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5Pyc7XG4gIHJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQ/JztcblxuICBzaWRlU2VsZWN0b3JFbGVtZW50cyA9IFtcbiAgICAnYXBwcm92YWxXb3JrZmxvdycsXG4gICAgJ2Fzc2lnbmVlcycsXG4gICAgJ2FwcHJvdmVycycsXG4gICAgJ3Jldmlld2VyJyxcbiAgICAnY2NFbWFpbCcsXG4gICAgJ2NjRmFpbCcsXG4gICAgJ3JjJyxcbiAgICAnY2F0ZWdvcnknLFxuICAgICdmcmVxdWVuY3knLFxuICAgICdyZXZpZXdlckZyZXF1ZW5jeScsXG4gICAgJ2NoZWNrcG9pbnRzJyxcbiAgICAnbGlua1Byb2dyYW0nLFxuICAgICdpc0Fzc2Vzc21lbnQnLFxuICAgICdpc0xpbmtlZFBvbGljZXMnLFxuICAgICdvd25lcnMnLFxuICAgICdwb2xpY3lBY2Nlc3MnLFxuICBdO1xuICByaXNrQ2xhc3NpZmljYXRpb24gPSBbXG4gICAgeyBuYW1lOiAnTE9XJywgdmFsdWU6IDEsIGNsYXNzOiAnbG93JyB9LFxuICAgIHsgbmFtZTogJ0xPVy1NZWRpdW0nLCB2YWx1ZTogMiwgY2xhc3M6ICdsb3ctbWVkJyB9LFxuICAgIHsgbmFtZTogJ01lZGl1bS1IaWdoJywgdmFsdWU6IDMsIGNsYXNzOiAnbWVkLWhpZ2gnIH0sXG4gICAgeyBuYW1lOiAnSGlnaCcsIHZhbHVlOiA0LCBjbGFzczogJ2hpZ2gnIH0sXG4gIF07XG4gIHNob3dSaXNrQ2xhc3NpZmljYXRpb24gPSB0cnVlO1xuICBzaG93Q3JlYXRlRG9jdW1lbnRzID0gZmFsc2U7XG4gIG9yZ2FuaXphdGlvbl9pZCA9ICcnO1xuICBtZW1iZXJfb2JqX2lkID0gJyc7XG4gIG1lbWJlcklkID0gMDtcbiAgdXNlckluZm8hOiBhbnk7XG5cbiAgcG9saWN5QXBwcm92YWxGbGFnID0gMDtcbiAgYmFzZVVSTCA9ICcnO1xuICBncm91cEVuYWJsZWQ6IGFueSA9IHRydWU7XG4gIG92ZXJzZWVyR3JvdXBzTGlzdDogYW55W10gPSBbXTtcbiAgZW5hYmxlQXBwcm92YWxXb3JrZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1ZlcnNpb25WYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gIHNlbGVjdGVkTGlua1Byb2dyYW06IGFueSA9IHt9O1xuICB2ZXJzaW9uRXJyb3JNZXNzYWdlOiBzdHJpbmcgPVxuICAgICdZb3UgaGF2ZSBlbnRlcmVkIGFuIGluY29ycmVjdCBmb3JtYXQuIFRoZSB2ZXJzaW9uIGZpZWxkIGNhbiBlaXRoZXIgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLic7XG4gIHNlbGVjdGVkV29ya2Zsb3c6IGFueVtdID0gW107XG4gIGVkaXRBcHByb3ZhbFdvcmtmbG93ITogYW55O1xuICBhcHByb3ZhbFdvcmtmbG93SWRzOiBhbnlbXSA9IFtdO1xuICBkZWZhdWx0RWRpdEFwcHJvdmVyczogYW55ID0ge307XG4gIGNyZWF0ZUFwcHJvdmFsQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZWRpdFdvcmtmbG93TGV2ZWwgPSB7fTtcbiAgbm9Xb3JrZmxvd1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHRlbXBsYXRlVmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICB0ZW1wbGF0ZVVybDogc3RyaW5nID0gJyc7XG4gIGlzVGVtcGxhdGVDbG9zZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcG9saWN5U2VydmljZTogUG9saWN5U2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1aUtpdFNlcnZpY2U6IFVpS2l0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lTZXJ2aWNlLFxuICAgIHBsYXRmb3JtTG9jYXRpb246IFBsYXRmb3JtTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBjaGFuZ2VSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVzdEFwaVNlcnZpY2U6IFJlc3RBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvblVzZXJTZXJ2aWNlOiBPcmdhbml6YXRpb25Vc2VyU2VydmljZSxcbiAgICBwcml2YXRlIG9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2U6IE9yZ2FuaXphdGlvbkNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb21wbGlhbmNlQ29tbW9uU2VydmljZTogQ29tcGxpYW5jZUNvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYmFzZVVSTCA9IGxvY2F0aW9uPy5vcmlnaW47XG4gICAgaWYgKHRoaXMuYmFzZVVSTCA9PSAnaHR0cDovL2xvY2FsaG9zdDo0MjAwJykge1xuICAgICAgdGhpcy5iYXNlVVJMID0gJ2h0dHBzOi8vZGV2LnYtY29tcGx5LmNvbSc7XG4gICAgfVxuICB9XG4gIHBvbGljeUZvcm06IFBvbGljeUZvcm0gPSB7XG4gICAgcG9saWN5TmFtZTogJycsXG4gICAgcG9saWN5Tm90ZXM6ICcnLFxuICAgIHNlbGVjdGVkQ2F0ZWdvcmllczogW10sXG4gICAgc2VsZWN0ZWRBcHByb3ZlcnM6IFtdLFxuICAgIHNlbGVjdGVkQXNzaWduZWVzOiBbXSwgLy9kb3VidCBpbiBuYW1lXG4gICAgc2VsZWN0ZWRHcm91cEFzc2lnbmVlOiBbXSxcbiAgICBzZWxlY3RlZFJldmlld2VyczogW10sXG5cbiAgICBzZWxlY3RlZFJDczogW10sXG4gICAgQ0NGYWlsRW1haWw6IFtdLFxuICAgIENDRmFpbEVtYWlsR3JvdXA6IFtdLFxuICAgIENDRW1haWw6IFtdLFxuICAgIENDR3JvdXBFbWFpbDogW10sXG4gICAgYXZhaWxhYmxlT25Qb3J0YWw6IGZhbHNlLFxuICAgIGFjY2VwdFN1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgICByZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uOiBmYWxzZSxcbiAgICByaXNrUmF0aW5nOiAxLFxuICAgIGFzc29jaWF0ZWREb2N1bWVudHM6IHtcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICB9LFxuICAgIHBvbGljeUR1ZURhdGU6IG1vbWVudCgpLFxuICAgIGN1c3RvbVRhZ3M6IFtdLFxuICAgIGNoZWNrcG9pbnREZXRhaWxzOiBbXSxcbiAgICBMaW5rZWRQb2xpY2llczogW10sXG4gICAgdG90YWxRdWVzdGlvbjogMCxcbiAgICBwYXNzaW5nTWFya3M6IDAsXG4gICAgZG9jdW1lbnRzQW5kTGlua3M6IHtcbiAgICAgIGZvcm1hdEZpbGVzOiBbXSxcbiAgICAgIGZvcm1hdExpbmtzOiBbXSxcbiAgICB9LFxuICAgIGFkZFJlc3BvbnNpYmlsaXR5Q2VudGVyczogZmFsc2UsXG4gICAgYWRkUmV2aWV3ZXJzOiBmYWxzZSxcbiAgICBhZGRDaGVja3BvaW50czogZmFsc2UsXG4gICAgYWRkT3ZlcnNlZXJzOiBmYWxzZSxcbiAgICBhZGRBc3NvY2lhdGVkRG9jdW1lbnRzOiBmYWxzZSxcbiAgICBhZGRWZXJzaW9uOiBmYWxzZSxcbiAgICBhZGRMaW5rQXNzZXNzbWVudDogZmFsc2UsXG4gICAgYWRkTGlua1Byb2dyYW06IGZhbHNlLFxuICAgIGFkZExpbmtQb2xpY2llczogZmFsc2UsXG4gICAgaXNQb3J0YWxEaXNwbGF5RW5hYmxlZDogZmFsc2UsXG5cbiAgICBmYWlsZWRfdGltZTogJycsXG4gICAgZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxuICAgIGZyZXF1ZW5jeV90ZXh0OiAnJyxcbiAgICBtYXJrX2ZhaWxlZF9hZnRlcjogMCxcbiAgICByZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGU6IDAsXG5cbiAgICByZXZpZXdGYWlsZWRBZnRlcjogMCxcbiAgICByZXZpZXdGYWlsZWRUaW1lOiAnJyxcbiAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6ICcnLFxuICAgIHJldmlld19mcmVxdWVuY3lfdHlwZTogJycsXG4gICAgcmV2aWV3X3JlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogMCxcbiAgICByZXZpZXc6IGZhbHNlLFxuICAgIGxpbmtQcm9ncmFtOiB7fSxcbiAgICBwcm9ncmFtU2VsZWN0ZWRWYWx1ZXM6IHt9LFxuICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxuICAgIHJldmlld2VyX3N0YXJ0X2RhdGU6ICcnLCAvL1RodSBGZWIgMjIgMjAyNFxuICAgIHBvbGljeV92ZXJzaW9uOiAnJywgLy8gaXQgd2lsbCBhY2NlcHQgbWF0Y2hlcyBhbHBoYWJldHMsIGh5cGhlbnMgKC0pLCBkb3RzICguKSwgYW5kIG51bWVyaWMgdmFsdWVzIG9ubHkgYW5kIHNob3VsZCBiZSBzbWFsbGVyIG9yIGVxdWFsIHRvIDYgY2hhcmFjdGVyc1xuICAgIGFzc2Vzc21lbnQ6IFtdLFxuICAgIHBvbGljeV9vd25lcnM6IFtdLFxuICAgIHBvbGljeV9ncm91cF9vd25lcnM6IFtdLFxuICAgIGJ1c2luZXNzQ3ljbGU6IHt9LFxuICAgIHBvbGljeV9pZDogMCxcbiAgICBwb2xpY3lfYWNjZXNzX3R5cGU6IDAsXG4gICAgcG9saWN5X2FjY2Vzc19vd25lcnM6IFtdLFxuICAgIHBvbGljeV9hY2Nlc3NfZ3JvdXBzOiBbXSxcbiAgfTtcbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdGlhdGVBUEkoKTtcbiAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gIH1cblxuICBfaW5pdGlhdGVBUEkoKSB7XG4gICAgdGhpcy5ncm91cEVuYWJsZWQgPVxuICAgICAgdGhpcy5mZWF0dXJlPy5pc0ZlYXR1cmVFbmFibGVkKCdmZl9wb2xpY3lfZ3JvdXBzJykgfHwgdHJ1ZTtcbiAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcbiAgICAgIHRoaXMuX2luaXRpYXRlRWRpdEFQSSgpO1xuICAgIH1cbiAgICB0aGlzLmdldFVzZXJzTGlzdCgpO1xuICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICB0aGlzLmxvYWRlciA9IHRoaXMubW9kZSA9PT0gJ0VESVQnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuZ2V0T3JnRGV0YWlscygpO1xuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2U/LmdldFVzZXJEZXRhaWxzKCk/Ll9pZDtcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZT8uZ2V0VXNlckRldGFpbHMoKT8udXNlcjtcbiAgICB0aGlzLm1lbWJlcklkID0gdGhpcy5hdXRoU2VydmljZT8uZ2V0TWVtYmVySWQoKTtcbiAgICB0aGlzLmNoYW5nZVJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmJ1c2luZXNzQ3ljbGUgPSB0aGlzLnJlc3RBcGlTZXJ2aWNlPy5nZXRCdXNpbmVzc0N5Y2xlKCk7XG4gICAgLy90aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICB9XG5cbiAgX2luaXRpYXRlRWRpdEFQSSgpIHtcbiAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgIHRoaXMuZ2V0Q2F0ZWdvcmllc0xpc3QoKTtcbiAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgdGhpcy5nZXRHcm91cHNMaXN0KCk7XG4gIH1cblxuICBnZXRPcmdEZXRhaWxzKCkge1xuICAgIHRoaXMub3JnYW5pemF0aW9uQ29tbW9uU2VydmljZT8uZ2V0T3JnRGV0YWlsc0luZm8oKT8uc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXJlcz8uZW5hYmxlX3Jpc2tjbGFzcykge1xuICAgICAgICAgIHRoaXMuc2hvd1Jpc2tDbGFzc2lmaWNhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXM/Ll9pZCkge1xuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uX2lkID0gcmVzPy5faWQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldExpbmtlZFBvbGljaWVzKHBvbGljeUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBvbGljeVNlcnZpY2UuTGlua2VkUG9saWNpZXNMaXN0KHBvbGljeUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzID0gWy4uLm5ldyBTZXQocmVzcG9uc2U/LmRhdGEpXS5yZXZlcnNlKCk7XG4gICAgICAgICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzPy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkXG4gICAgICAgICkubWFwKChpdGVtKSA9PiBpdGVtPy5jb250cmFjdF9pZCk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkID0gcmVzcG9uc2U/LmRpc3BsYXlPblBvcnRhbDtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llcyA9IGZhbHNlO1xuICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aGUgbGlzdGluZyBwYWdlcyB0aGUgbGVmdCBzaWRlIG9mIHBvbGljeSBmb3JtIHRvIHNldCBhbmQgZWRpdCB0aGUgZHJvcGRvd24gZmllbGRzIHZhbHVlc1xuICAgKiBAcGFyYW0gdHlwZSBob2xkcyBuYW1lIG9mIHBhcnRpY3VsYXIgbGlzdCBpcyB0byBiZSBkaXNwbGF5ZWRcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIGJvb2xlYW4gdmFsdWUgdG8gZGlzcGxheSB0aGUgbGlzdCBvciBub3RcbiAgICogQHBhcmFtIHdvcmtmbG93VHlwZSBpdCBzZXRzIHRoZSBhcHByb3ZhbCB3b3JrZmxvdyB0eXBlIHdoaWxlIGVkaXRpbmcgdGhlIGFwcHJvdmFsIHdvcmtmbG93LlxuICAgKi9cbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuLCB3b3JrZmxvd1R5cGU/OiBhbnkpIHtcbiAgICBpZiAod29ya2Zsb3dUeXBlKSB7XG4gICAgICB0aGlzLndvcmtmbG93VHlwZSA9IHdvcmtmbG93VHlwZTtcbiAgICB9XG4gICAgdGhpcy5hY3RpdmVTZWxlY3RvciA9IGV2ZW50ID8gdHlwZSA6ICcnO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncmMnOlxuICAgICAgICB0aGlzLmdldFJDTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzTGlzdCgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIHRoaXMuZ2V0R3JvdXBzTGlzdCgpO1xuICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBMaXN0KCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIGxpc3RpbmcgcGFnZXNcbiAgICovXG4gIGRpc2FibGVTZWxlY3RvcigpIHtcbiAgICB0aGlzLmFkZE1vcmVMZXZlbHMgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gJyc7XG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgUmVzcG9uc2liaWxpdHkgY2VudGVycyBsaXN0XG4gICAqL1xuICBnZXRSQ0xpc3QoKSB7XG4gICAgdGhpcy5jb21wbGlhbmNlQ29tbW9uU2VydmljZT8uZ2V0UmNMaXN0SW5mbygpPy5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucmNMaXN0ID0gcmVzO1xuICAgICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5yY0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIG9yZ2FuaXphdGlvbiB1c2VycyBsaXN0XG4gICAqL1xuICBnZXRVc2Vyc0xpc3QoKSB7XG4gICAgdGhpcy5vcmdhbml6YXRpb25Vc2VyU2VydmljZS5nZXRPcmdhbml6YXRpb25Vc2VycygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHRoaXMudXBkYXRlTWVtYmVySWRLZXkocmVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZXJzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMudXNlcnNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gcmVwbGFjZSBtZW1iZXJfaWQgdmFsdWUgdG8gbXlfbWVtYmVyX2lkXG4gIHVwZGF0ZU1lbWJlcklkS2V5KGxpc3Q6IGFueSkge1xuICAgIGxldCB1cGRhdGVkTGlzdCA9IGxpc3QubWFwKChlbGU6IGFueSkgPT4gKHtcbiAgICAgIC4uLmVsZSxcbiAgICAgIG1lbWJlcl9pZDogZWxlPy5teV9tZW1iZXJfaWQsXG4gICAgfSkpO1xuICAgIHJldHVybiB1cGRhdGVkTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIFBvbGljeSBDYXRlZ29yaWVzIGxpc3RcbiAgICovXG4gIGdldENhdGVnb3JpZXNMaXN0KCkge1xuICAgIHRoaXMucG9saWN5U2VydmljZS5nZXRDYXRlZ29yaWVzTGlzdCgpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCA9IHJlcztcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb3JnYW5pemF0aW9uIHVzZXJzIGdyb3VwcyBsaXN0XG4gICAqL1xuICBnZXRHcm91cHNMaXN0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmdldE9yZ2FuaXphdGlvblBvbGljeUdyb3VwcygpLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gcmVzLmRhdGE7XG4gICAgICAgIGNvbnN0IGdyb3VwczogYW55ID0gW107XG4gICAgICAgIGRhdGE/LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGdyb3VwTmFtZTogZWxlbWVudC5ncm91cF9uYW1lLFxuICAgICAgICAgICAgdXNlcklkczogZWxlbWVudC5tZW1iZXJfaWRzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgZ3JvdXBzLnB1c2gob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdCA9IGdyb3VwcztcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0ID0gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmdyb3Vwc0xpc3RMb2FkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvL0dldCB0aGUgbGlzdCBvZiBvdmVyc2VlcnMgZ3JvdXAuXG4gIG92ZXJzZWVyR3JvdXBMaXN0KCkge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlPy5nZXRPcmdhbml6YXRpb25PdmVyc2VlcnNHcm91cHMoKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QgPSByZXM/LmRhdGE7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZ3JvdXBzTGlzdExvYWRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBhcHByb3ZlcnMgd29ya2Zsb3cgZnJvbSB0aGUgc2VsZWN0ZWQgd29ya2Zsb3cgb24gQXBwcm92ZXJzIHdvcmtmbG93IGxpc3RcbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIHByZWRlZmluZWQgd29ya2Zsb3dcbiAgICovXG4gIHNlbGVjdGVkV29ya2Zsb3dDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCA9PT0gLTEpIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtdO1xuICAgICAgLy8gdGhpcy5hZGRNb3JlTGV2ZWxzID0gdHJ1ZVxuICAgICAgLy8gdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGRhdGEgPSBjbG9uZURlZXAoZXZlbnQuYXBwcm92YWxfd29ya2Zsb3cpO1xuICAgICAgY29uc3QgbmV3QXJyYXkgPSBkYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGl0ZW0ubmFtZSA9IGl0ZW0udHlwZTtcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbS5hcHByb3ZlcnMubWFwKChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWQpO1xuICAgICAgICBpdGVtLmFwcHJvdmVycyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbEFwcHJvdmVycywgaWRzLCAnbWVtYmVyX2lkJyk7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBuZXdBcnJheS5maWx0ZXIoXG4gICAgICAgIChsZXZlbDogYW55KSA9PiBsZXZlbC5hcHByb3ZlcnMubGVuZ3RoID4gMFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBBcHByb3ZlcnMgd29ya2Zsb3cgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xuICAgKiBAcGFyYW0gaWQgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXG4gICAqL1xuICBnZXRBcHByb3ZlcldvcmtGbG93KGlkOiBhbnksIGRhdGE/OiBhbnkpIHtcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldFdvcmtmbG93TGlzdChpZCkuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5hcHByb3ZlcldvcmtGbG93TGlzdCA9IHJlczsgLy8gZ2V0dGluZyBhbGwgYXBwcm92ZXIgc2F2ZWQgd29ya2Zsb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW107XG4gICAgICAgICAgdGhpcy5hcHByb3ZlcldvcmtGbG93TGlzdD8uZm9yRWFjaCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHM/LmluY2x1ZGVzKHdvcmtmbG93Py5faWQpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ucHVzaCh3b3JrZmxvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjb25zdCBhcHByb3ZhbERhdGE6IGFueSA9IFtdO1xuICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFdvcmtmbG93Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMubm9Xb3JrZmxvd1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBhcHByb3ZhbFdvcmtmbG93OiBhbnlbXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVXb3JrZmxvdygpO1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVycykuZm9yRWFjaCgoYXBwcm92ZXJzTGV2ZWwpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0RWRpdEFwcHJvdmVyc1thcHByb3ZlcnNMZXZlbF0uYXBwcm92ZXJzID1cbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzW2FwcHJvdmVyc0xldmVsXT8uYXBwcm92ZXJzPy5tYXAoXG4gICAgICAgICAgICAgICAgICAoYXBwOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhcHAubWVtYmVyX25hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHByb3ZlclVzZXIgPSB0aGlzLnVzZXJzTGlzdD8uZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyOiBhbnkpID0+IHVzZXIubXlfbWVtYmVyX2lkID09IGFwcC5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlclVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5tZW1iZXJfbmFtZSA9IGFwcHJvdmVyVXNlcj8ubWVtYmVyX25hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYXBwcm92YWxXb3JrZmxvdy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsZXZlbDE6IGFwcHJvdmVyc0xldmVsLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdEVkaXRBcHByb3ZlcnNbYXBwcm92ZXJzTGV2ZWxdLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXBwcm92YWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgICB3b3JrZmxvd19uYW1lOiAnJyxcbiAgICAgICAgICAgICAgd29ya2Zsb3dfbW9kdWxlOiAnUE9MSUNZJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHt9LFxuICAgICAgICAgICAgICBhcHByb3ZhbF93b3JrZmxvdzogYXBwcm92YWxXb3JrZmxvdyxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfYXJyOiBbXSxcbiAgICAgICAgICAgICAgY3JlYXRvcjoge30sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmFsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmdldEFwcHJvdmVyc0FuZFJldmlld2Vyc0xpc3QoXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBbZGF0YS5SZXZpZXdlck1lbWJlcklkXSxcbiAgICAgICAgICAgICAgZGF0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZW1vdmVXb3JrZmxvdygpIHtcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMgPSBbXTtcbiAgICB0aGlzLmFwcHJvdmFsV29ya2Zsb3dJZHMgPSBbXTtcbiAgICB0aGlzLmVkaXRBcHByb3ZhbFdvcmtmbG93ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgQXBwcm92ZXJzIGFuZCByZXZpZXdlcnMgbGlzdCBiYXNlZCBvbiBzZWxlY3RlZCBwb2xpY3kgY2F0ZWdvcmllc1xuICAgKiBAcGFyYW0gY2F0ZWdvcnlJZHMgY29udGFpbnMgc2VsZWN0ZWQgY2F0ZWdvcmllcyBpZCdzXG4gICAqL1xuICBnZXRBcHByb3ZlcnNBbmRSZXZpZXdlcnNMaXN0KFxuICAgIGNhdGVnb3J5SWRzOiBhbnksXG4gICAgYXBwcm92ZXJJZHM/OiBhbnksXG4gICAgcmV2aWV3ZXJJZHM/OiBhbnksXG4gICAgcG9saWN5PzogYW55XG4gICkge1xuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmFsbEFwcHJvdmVycyA9IFtdO1xuICAgIHRoaXMuYWxsUmV2aWV3ZXJzID0gW107XG4gICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmdldFJldmlld2VycyhjYXRlZ29yeUlkcykuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXM/Lmxlbmd0aCA+PSAwKSB7XG4gICAgICAgICAgcmVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMgPSB1bmlxQnkoXG4gICAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLmNvbmNhdChlbGVtZW50LmFsbF9hcHByb3ZlcnMpLFxuICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzID0gdW5pcUJ5KFxuICAgICAgICAgICAgICBlbGVtZW50LmFsbF9hcHByb3ZlcnMuY29uY2F0KFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsUmV2aWV3ZXJzLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWxsX2F1dGhvcnNcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykgdGhpcy5zZXRPd25lcnNPbkxvYWQoKTtcbiAgICAgICAgICAgIGlmIChwb2xpY3k/LnBvbGljeV9vd25lcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgICAgICAgICAgIHBvbGljeT8ucG9saWN5X293bmVycyA/PyBbXSxcbiAgICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRVc2Vyc0FjY2Vzc0xpc3RCeUNhdGVnb3J5KGVsZW1lbnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcHByb3Zlcklkcz8uYXBwcm92ZXJzKSB7XG4gICAgICAgICAgbGV0IG9iaiA9IGFwcHJvdmVySWRzPy5hcHByb3ZlcnM7XG4gICAgICAgICAgbGV0IGFwcHJvdmVyTGV2ZWxzID0gW107XG4gICAgICAgICAgLy8gZm9yICh2YXIgaXRlbSBpbiBvYmopIHtcbiAgICAgICAgICAvLyAgIGNvbnN0IGlkcyA9IG9ialtpdGVtXT8uYXBwcm92ZXJzPy5tYXAoXG4gICAgICAgICAgLy8gICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWRcbiAgICAgICAgICAvLyAgICk7XG5cbiAgICAgICAgICAvLyAgIGxldCBkYXRhID0ge1xuICAgICAgICAgIC8vICAgICBuYW1lOiBvYmpbaXRlbV0/LnR5cGUsXG4gICAgICAgICAgLy8gICAgIGFwcHJvdmVyczogdGhpcy5zZXRMaXN0KHRoaXMuYWxsQXBwcm92ZXJzLCBpZHMsICdtZW1iZXJfaWQnKSxcbiAgICAgICAgICAvLyAgIH07XG4gICAgICAgICAgLy8gICBpZiAoZGF0YS5uYW1lID09ICdST1VORFJPQklOJykge1xuICAgICAgICAgIC8vICAgICBkYXRhLm5hbWUgPSAnUk9VTkQtUk9CSU4nO1xuICAgICAgICAgIC8vICAgfSBlbHNlIGlmIChkYXRhLm5hbWUgPT0gJ0FOWU9ORScpIHtcbiAgICAgICAgICAvLyAgICAgZGF0YS5uYW1lID0gJ0FOWSBPTkUnO1xuICAgICAgICAgIC8vICAgfVxuICAgICAgICAgIC8vICAgYXBwcm92ZXJMZXZlbHMucHVzaChkYXRhKTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgaWYgKGFwcHJvdmVySWRzPy5hcHByb3ZlcnMpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSBhcHByb3Zlcklkcz8uYXBwcm92ZXJzO1xuICAgICAgICAgICAgbGV0IGFwcHJvdmVyTGV2ZWxzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVtIGluIG9iaikge1xuICAgICAgICAgICAgICBjb25zdCBpZHMgPSBvYmpbaXRlbV0/LmFwcHJvdmVycz8ubWFwKFxuICAgICAgICAgICAgICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogb2JqW2l0ZW1dPy5uYW1lID8/IG9ialtpdGVtXT8udHlwZSxcbiAgICAgICAgICAgICAgICBhcHByb3ZlcnM6IG9ialtpdGVtXT8uYXBwcm92ZXJzLFxuICAgICAgICAgICAgICAgIGFwcHJvdmFsX2RvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxldmVsMTogb2JqW2l0ZW1dPy5sZXZlbDEgfHwgaXRlbSxcbiAgICAgICAgICAgICAgICBhbGlhc19uYW1lOiBvYmpbaXRlbV0/LmFsaWFzX25hbWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIC8vQ3JlYXRpbmcgaXNzdWUgaW4gYXBwcm92YWwgd29ya2Zsb3cgcGF5bG9hZCAodHlwZSkgd2hpbGUgZWRpdGluZyBwb2xpY3lcbiAgICAgICAgICAgICAgLy8gaWYgKGRhdGEudHlwZSA9PSAnUk9VTkRST0JJTicpIHtcbiAgICAgICAgICAgICAgLy8gICBkYXRhLnR5cGUgPSAnUk9VTkQtUk9CSU4nO1xuICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PSAnQU5ZT05FJykge1xuICAgICAgICAgICAgICAvLyAgIGRhdGEudHlwZSA9ICdBTlkgT05FJztcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICBhcHByb3ZlckxldmVscy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvdyA9IGFwcHJvdmVyTGV2ZWxzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGFwcHJvdmFsX3dvcmtmbG93OiBhcHByb3ZlckxldmVscyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmV2aWV3ZXJJZHMpIHtcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMsXG4gICAgICAgICAgICAgIHJldmlld2VySWRzLFxuICAgICAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqKioqKipcbiAgICogSXQgaXMgdG8gcG9wdWxhdGUgbW9yZSBvcHRpb25zIGVsZW1lbnRzIHdoaWxlIGVkaXRpbmcgdGhlIHBvbGljeSBmb3JtXG4gICAqL1xuICBwb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCkge1xuICAgIGNvbnN0IGFjdGl2YXRlZE9wdGlvbnMgPSBbXTtcbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycykge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVNQT05TSUJJTElUWV9DRU5URVInKTtcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMpIHsgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdSRVZJRVdFUicpOyB9XG4gICAgLy8gaWYgKHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cykgeyBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0NIRUNLUE9JTlRTJyk7IH1cbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZE92ZXJzZWVycykge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdPVkVSU0VFUicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wb2xpY3lGb3JtLmFkZEFzc29jaWF0ZWREb2N1bWVudHMpIHtcbiAgICAgIGFjdGl2YXRlZE9wdGlvbnMucHVzaCgnUkVMQVRFRF9ET0NVTUVOVFMnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbikge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdWRVJTSU9OJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50Lmxlbmd0aCkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX0FTU0VTU01FTlRTJyk7XG4gICAgICB0aGlzLmdldEFzc2Vzc21lbnREZXRhaWxzKHRoaXMucG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0gJiZcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFxuICAgICkge1xuICAgICAgYWN0aXZhdGVkT3B0aW9ucy5wdXNoKCdMSU5LX1BST0dSQU1fUkVTUE9OU0lCSUxJVElFUycpO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5sZW5ndGggPiAwKSB7XG4gICAgICBhY3RpdmF0ZWRPcHRpb25zLnB1c2goJ0xJTktfUkVMQVRFRF9QT0xJQ0lFUycpO1xuICAgIH1cbiAgICB0aGlzLnBvcHVsYXRlT3B0aW9uLmVtaXQoYWN0aXZhdGVkT3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGFkZCBhbmQgcmVtb3ZlIHRoZSBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uIHRvIHRoZSBwb2xpY3kgRm9ybVxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgZGV0YWlscyByZWxhdGVkIHRvIGNoZWNrZWQgdmFsdWUsIGNvZGUgcGFydGljdWxhciBlbGVtZW50cyBmcm9tIE1vcmUgb3B0aW9uc1xuICAgKi9cbiAgYWRkTW9yZUluZm8oZXZlbnQ6IGFueSkge1xuICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgY2FzZSAnUkVTUE9OU0lCSUxJVFlfQ0VOVEVSJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gY2FzZSAnUkVWSUVXRVInOlxuICAgICAgLy8gICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBjYXNlICdDSEVDS1BPSU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cyA9IGV2ZW50LmNoZWNrZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnT1ZFUlNFRVInOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdSRUxBVEVEX0RPQ1VNRU5UUyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdWRVJTSU9OJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZFZlcnNpb24gPSBldmVudC5jaGVja2VkO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0xJTktfUFJPR1JBTV9SRVNQT05TSUJJTElUSUVTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtQcm9ncmFtID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX0FTU0VTU01FTlRTJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50ID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdMSU5LX1JFTEFURURfUE9MSUNJRVMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYWRkTGlua1BvbGljaWVzID0gZXZlbnQuY2hlY2tlZDtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20gPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IGlzIHRvIGVuc3VyZSB3aGV0aGVyIGFsbCByZXF1aXJlZCBsaXN0cyBvbiBQb2xpY3kgZnJvbSBpcyBsb2FkZWQgZnJvbSB0aGUgYXBpIGNhbGwgb3Igbm90XG4gICAqL1xuICBjaGVja1doZXRoZXJBbGxMaXN0c0xvYWRlZCgpIHtcbiAgICBjb25zdCBlZGl0TG9hZGVyID1cbiAgICAgIHRoaXMubW9kZSA9PT0gJ0VESVQnXG4gICAgICAgID8gdGhpcy5yY0xpc3RMb2FkZWQgJiZcbiAgICAgICAgICB0aGlzLmNhdGVnb3JpZXNMaXN0TG9hZGVkICYmXG4gICAgICAgICAgdGhpcy5ncm91cHNMaXN0TG9hZGVkXG4gICAgICAgIDogdHJ1ZTtcbiAgICBpZiAodGhpcy51c2Vyc0xpc3RMb2FkZWQgJiYgZWRpdExvYWRlcikge1xuICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnRGaWxlRGF0YSAmJiB0aGlzLmNvbnZlcnRGaWxlRGF0YS5maWxlTmFtZSkge1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLnN1YnN0cmluZyhcbiAgICAgICAgICAwLFxuICAgICAgICAgIHRoaXMuY29udmVydEZpbGVEYXRhLmZpbGVOYW1lLmxhc3RJbmRleE9mKCcuJylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWQpIHtcbiAgICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuY29udmVydEZpbGVEYXRhLmNhdGVnb3J5SWRdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDYXRlZ29yeSkge1xuICAgICAgICB0aGlzLnNhdmVTZWxlY3RlZExpc3QoJ2NhdGVnb3J5JywgW3RoaXMuc2VsZWN0ZWRDYXRlZ29yeV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XG4gICAgICAgIHRoaXMuZWRpdFBvbGljeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hlY2tXaGV0aGVyQWxsTGlzdHNMb2FkZWQoKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBjb25maXJtYXRpb24gcG9wdXAgd2hlbiBhdmFpbGFiaWxpdHkgb24gUG9saWN5IHBvcnRhbCB0b2dnbGUgaW4gT05cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHRvZ2dsZSB2YWx1ZSB3aGljaCBpcyBhbHdheXMgdHJ1ZSBvciBmYWxzZVxuICAgKi9cbiAgYXZhaWxhYmlsaXR5T25Qb3J0YWwoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uRGV0YWlsczogQ29uZmlybWF0aW9uQWxlcnQgPSB7XG4gICAgICAgIGlzVmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZTogYFRoZSBwb2xpY2llcyB0aGF0IHlvdSBpbnRlbmQgdG8gbWFrZSBhY2Nlc3NpYmxlIHRvIHRoZSBlbnRpcmUgb3JnYW5pemF0aW9uIGNhbiBiZSBhZGRlZCB0byB0aGUgcG9saWN5IHBvcnRhbC5cbiAgICAgICAgSXQgaXMgbGlrZSBhIHNoYXJlZCBjYXRhbG9nIG9mIGFsbCBhY3RpdmUgJiB1cGRhdGVkIHBvbGljaWVzIHRoYXQgYW55IGxvZ2dlZCBpbiB1c2VyIGNhbiByZWFkLyBkb3dubG9hZCBmb3IgcmVmZXJlbmNlLlxuICAgICAgICBIZW5jZSwgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3IgeW91IHRvIHNldCB1cCBhbiBhdHRlc3RhdGlvbiBzY2hlZHVsZSBvciBzZWxlY3RcbiAgICAgICAgcmVhZGVycyB0byBhdHRlc3QgdGhlIHBvbGljaWVzLmAsXG4gICAgICAgIGFjdGlvbjogJ1BPTElDWV9QT1JUQUwnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkFsZXJ0LmVtaXQoY29uZmlybWF0aW9uRGV0YWlscyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY2VpdmVzIHRoZSBpbnB1dCBmcm9tIHRoZSBDb25maXJtYXRpb24gZGlhbG9nIG9mIGF2YWlsYWJsZSBvbiBQb2xpY3kgcG9ydGFsXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCBvcHRpb24gZnJvbSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGljaCBpcyBhbHdheXMgZWl0aGVyICdZRVMnIG9yICdOTydcbiAgICovXG4gIGNvbmZpcm1Qb2xpY3lQb3J0YWwoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hdmFpbGFibGVPblBvcnRhbCA9IGV2ZW50ID09ICdZRVMnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGlmIChldmVudCA9PSAnTk8nKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcG9saWN5Rm9ybSB3aXRoIHNlbGVjdGVkIGVsZW1lbnRzIGZyb20gdGhlIGxpc3RpbmcsIGZyZXF1ZW5jeSwgZmlsZSB1cGxvYWQgY29tcG9uZW50c1xuICAgKiBAcGFyYW0gdHlwZSBkZWZpbmVzIHRoZSBwYXJ0aWN1bGFyIGZpZWxkIG9uIFBvbGljeSBmb3JtLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRJdGVtcyBjb250YWlucyB0aGUgbGlzdCBvZiBzZWxlY3RlZCBpdGVtcyBmcm9tIHRoZSBsaXN0XG4gICAqL1xuICBzYXZlU2VsZWN0ZWRMaXN0KHR5cGU6IHN0cmluZywgc2VsZWN0ZWRJdGVtczogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJDcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLnJjTGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdpdGVtX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICdfaWQnXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gW107XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2VycyA9IFtdO1xuICAgICAgICB0aGlzLnJlc2V0UG9saWN5QWNjZXNzRGV0YWlscygpO1xuICAgICAgICB0aGlzLnJlc2V0UmV2aWV3ZXJGcmVxdWVuY3koKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChvYmplY3RJZHMpO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRDYXRlZ29yaWVzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhZyA9IGVsZW1lbnQuY3VzdG9tX3RhZ3M7XG4gICAgICAgICAgaWYgKHRhZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICh0YWdFbGVtZW50OiBhbnkpID0+IHRhZ0VsZW1lbnQudGFnbmFtZSA9PSB0YWdEYXRhLnRhZ25hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MucHVzaCh0YWdEYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGxldCB1c2VySWRzLCBncm91cElkcztcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgdXNlcklkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMudXNlcnMsICdtZW1iZXJfaWQnKTtcbiAgICAgICAgICBncm91cElkcyA9IHRoaXMucmV0dXJuSWRzKHNlbGVjdGVkSXRlbXMuZ3JvdXBzLCAnZ3JvdXBfaWQnKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy5vdmVyc2Vlckdyb3Vwc0xpc3QsXG4gICAgICAgICAgICBncm91cElkcyxcbiAgICAgICAgICAgICdncm91cF9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVzZXJJZHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgdXNlcklkcyxcbiAgICAgICAgICAnbXlfbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxSZXZpZXdlcnMsXG4gICAgICAgICAgW3NlbGVjdGVkSXRlbXMubWVtYmVyX2lkXSxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRW1haWwnOlxuICAgICAgICBsZXQgc2VsZWN0ZWRVc2VySWRzLCBzZWxlY3RlZEdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZFVzZXJJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zPy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIHNlbGVjdGVkR3JvdXBJZHMgPSB0aGlzLnJldHVybklkcyhzZWxlY3RlZEl0ZW1zPy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0dyb3VwRW1haWwgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRVc2VySWRzLFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2NFbWFpbE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NGYWlsJzpcbiAgICAgICAgbGV0IHNlbGVjdGVkRmFpbFVzZXJJZHMsIHNlbGVjdGVkRmFpbEdyb3VwSWRzO1xuICAgICAgICBpZiAodGhpcy5ncm91cEVuYWJsZWQpIHtcbiAgICAgICAgICBzZWxlY3RlZEZhaWxVc2VySWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy51c2VycyxcbiAgICAgICAgICAgICdtZW1iZXJfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzZWxlY3RlZEZhaWxHcm91cElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZ3JvdXBzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXAgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgICB0aGlzLm92ZXJzZWVyR3JvdXBzTGlzdCxcbiAgICAgICAgICAgIHNlbGVjdGVkRmFpbEdyb3VwSWRzLFxuICAgICAgICAgICAgJ2dyb3VwX2lkJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QsXG4gICAgICAgICAgICBzZWxlY3RlZEZhaWxVc2VySWRzLFxuICAgICAgICAgICAgJ215X21lbWJlcl9pZCdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbCA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXBwcm92ZXJzJzpcbiAgICAgICAgY29uc3QgYXBwcm92ZXJzID0gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMuYWxsQXBwcm92ZXJzLFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXMsXG4gICAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRoaXMuYWRkTW9yZUxldmVscykge1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMud29ya2Zsb3dUeXBlLFxuICAgICAgICAgICAgYXBwcm92ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYWRkTW9yZUxldmVscyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1t0aGlzLmFwcHJvdmVyc0xpc3RJbmRleF0gPSB7XG4gICAgICAgICAgbmFtZTogdGhpcy53b3JrZmxvd1R5cGUsXG4gICAgICAgICAgYXBwcm92ZXJzLFxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld2VyX2F0dGFjaG1lbnRzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdEZpbGVzID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5maWxlcyA/PyBbXTtcblxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uZG9jdW1lbnRzQW5kTGlua3MuZm9ybWF0TGlua3MgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmxpbmtzID8/IFtdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc29jaWF0ZWREb2N1bWVudHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlcyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uZmlsZXMgPz8gW107XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjaGVja3BvaW50cyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5jaGVja3BvaW50RGV0YWlscyA9XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcz8uY2hlY2twb2ludERldGFpbHMgPz8gW107XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID1cbiAgICAgICAgICBzZWxlY3RlZEl0ZW1zPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID8/IDA7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBzZWxlY3RlZEl0ZW1zPy5yZXF1aXJlZFBvaW50ID8/IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnb3duZXJzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgICAgdGhpcy5hbGxBcHByb3ZlcnMsXG4gICAgICAgICAgc2VsZWN0ZWRJdGVtcyxcbiAgICAgICAgICAnbWVtYmVyX2lkJ1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbGljeUFjY2Vzcyc6XG4gICAgICAgIGxldCBhY2Nlc3NJZHMsIGFjY2Vzc0dyb3VwSWRzO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPVxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LmZ1dHVyZVVzZXJzV2lsbFNlbGVjdDtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICAgICAgYWNjZXNzSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy51c2VycywgJ21lbWJlcl9pZCcpO1xuICAgICAgICAgIGFjY2Vzc0dyb3VwSWRzID0gdGhpcy5yZXR1cm5JZHMoc2VsZWN0ZWRJdGVtcy5ncm91cHMsICdncm91cF9pZCcpO1xuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX2dyb3VwcyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgYWNjZXNzR3JvdXBJZHMsXG4gICAgICAgICAgICAnZ3JvdXBfaWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY2Nlc3NJZHMgPSBzZWxlY3RlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICB0aGlzLmFzc2lnbmVlc0xpc3QsXG4gICAgICAgICAgYWNjZXNzSWRzLFxuICAgICAgICAgICdteV9tZW1iZXJfaWQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXNMaW5rZWRQb2xpY2VzJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkxpbmtlZFBvbGljaWVzID0gdGhpcy5saXN0T2ZTZWxlY3RlZFBvbGljaWVzKFxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM/LnNlbGVjdGVkUG9saWN5TGlzdFxuICAgICAgICApO1xuICAgICAgICB0aGlzLlNlbGVjdGVkTGlzdE9mUG9saWNpZXMgPSBzZWxlY3RlZEl0ZW1zPy5zZWxlY3RlZFBvbGljeUxpc3Q7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHRoaXMuZGlzYWJsZVNlbGVjdG9yKCk7XG4gIH1cblxuICBsaXN0T2ZTZWxlY3RlZFBvbGljaWVzKHNlbGVjdGVkUG9saWNpZXM6IGFueSkge1xuICAgIHJldHVybiBzZWxlY3RlZFBvbGljaWVzPy5tYXAoKHBvbGljeTogYW55KSA9PiBwb2xpY3k/LmNvbnRyYWN0X2lkKTtcbiAgfVxuXG4gIC8vcmV0dXJuIHRoZSBfaWQgZnJvbSB0aGUgc2VsZWN0ZWQgb3ZlcnNlZXIgZ3JvdXAuXG4gIGdldEdyb3VwT2JqZWN0SWQob3ZlcnNlZXJHcm91cD86IGFueSkge1xuICAgIGxldCBvdmVyc2Vlckdyb3VwSWRBcnJheSA9IG92ZXJzZWVyR3JvdXAubWFwKChlbGU6IGFueSkgPT4gZWxlLl9pZCk7XG4gICAgcmV0dXJuIG92ZXJzZWVyR3JvdXBJZEFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIHBhcnRpY3VsYXIgZWxlbWVudCBmcm9tIHNlbGVjdGVkIGxpc3RcbiAgICogQHBhcmFtIHR5cGUgZGVmaW5lcyB0aGUgcGFydGljdWxhciBjYXNlXG4gICAqIEBwYXJhbSBldmVudCBob2xkcyB0aGUgaWQgb3Iga2V5IG9mIGVsZW1lbnQgdG8gYmUgcmVtb3ZlZFxuICAgKiBAcGFyYW0gcmVtb3ZlSW5kZXggY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHJlbW92ZSh0eXBlOiBhbnksIGV2ZW50OiBhbnksIHJlbW92ZUluZGV4PzogYW55KSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdyYyc6XG4gICAgICAgIGNvbnN0IHJjSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MuZmluZEluZGV4KFxuICAgICAgICAgIChyYzogYW55KSA9PiByYy5yY19pZCA9PSBldmVudC5yY19pZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3Muc3BsaWNlKHJjSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Fzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGVudHJ1c3RJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5maW5kSW5kZXgoXG4gICAgICAgICAgKG93bmVyOiBhbnkpID0+IG93bmVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcy5zcGxpY2UoZW50cnVzdEluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdncm91cEFzc2lnbmVlcyc6XG4gICAgICAgIGNvbnN0IGdyb3VwSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8uZmluZEluZGV4KFxuICAgICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwLmdyb3VwX2lkID09IGV2ZW50Lmdyb3VwX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8uc3BsaWNlKGdyb3VwSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUmV2aWV3ZXJzLnNwbGljZShyZXZpZXdlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NFbWFpbCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVySW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NFbWFpbC5maW5kSW5kZXgoXG4gICAgICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsLnNwbGljZShvdmVyc2VlckluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjY0dyb3VwRW1haWwnOlxuICAgICAgICBjb25zdCBjY0dyb3VwSW5kZXg6IGFueSA9IHRoaXMucG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5maW5kSW5kZXgoXG4gICAgICAgICAgKGdyb3VwOiBhbnkpID0+IGdyb3VwPy5ncm91cF9pZCA9PSBldmVudD8uZ3JvdXBfaWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbD8uc3BsaWNlKGNjR3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2NFbWFpbE9iaklkcyA9IHRoaXMuZ2V0R3JvdXBPYmplY3RJZChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NjRmFpbCc6XG4gICAgICAgIGNvbnN0IG92ZXJzZWVyTm90aWZ5SW5kZXggPSB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwuZmluZEluZGV4KFxuICAgICAgICAgIChvdmVyc2Vlck46IGFueSkgPT4gb3ZlcnNlZXJOLmVtcGxveWVlX2lkID09IGV2ZW50LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbC5zcGxpY2Uob3ZlcnNlZXJOb3RpZnlJbmRleCwgMSk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2NHcm91cEZhaWxFbWFpbCc6XG4gICAgICAgIGNvbnN0IGNjRmFpbEdyb3VwSW5kZXg6IGFueSA9XG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwPy5zcGxpY2UoY2NGYWlsR3JvdXBJbmRleCwgMSk7XG4gICAgICAgIHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMgPSB0aGlzLmdldEdyb3VwT2JqZWN0SWQoXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVmcmVzaEFsbExpc3RzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYXBwcm92ZXJzJzpcbiAgICAgICAgY29uc3QgYXBwcm92ZXJzSW5kZXggPSB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbXG4gICAgICAgICAgcmVtb3ZlSW5kZXhcbiAgICAgICAgXS5hcHByb3ZlcnMuZmluZEluZGV4KFxuICAgICAgICAgIChhcHByb3ZlcjogYW55KSA9PiBhcHByb3Zlci5tZW1iZXJfaWQgPT0gZXZlbnQubWVtYmVyX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1tyZW1vdmVJbmRleF0uYXBwcm92ZXJzLnNwbGljZShcbiAgICAgICAgICBhcHByb3ZlcnNJbmRleCxcbiAgICAgICAgICAxXG4gICAgICAgICk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbcmVtb3ZlSW5kZXhdLmFwcHJvdmVycy5sZW5ndGggPT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMuc3BsaWNlKHJlbW92ZUluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NhdGVnb3J5JzpcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMuZmluZEluZGV4KFxuICAgICAgICAgIChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5pdGVtX2lkID09IGV2ZW50Lml0ZW1faWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQ2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGV2ZW50LmN1c3RvbV90YWdzO1xuICAgICAgICBpZiAodGFnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0YWcuZm9yRWFjaCgodGFnRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbmRleENUID0gdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAodGFnRWxlbWVudDogYW55KSA9PiB0YWdFbGVtZW50LnRhZ25hbWUgPT0gdGFnRGF0YS50YWduYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGluZGV4Q1QgIT0gLTEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3Muc3BsaWNlKGluZGV4Q1QsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9iamVjdElkcyA9IHRoaXMucmV0dXJuSWRzKFxuICAgICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICAgJ19pZCdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZXNldFJldmlld2VyRnJlcXVlbmN5KCk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UoXG4gICAgICAgICAgMCxcbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnMubGVuZ3RoXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtID0gT2JqZWN0LmFzc2lnbih0aGlzLnBvbGljeUZvcm0pO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMgPSBbXTtcbiAgICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJzQW5kUmV2aWV3ZXJzTGlzdChvYmplY3RJZHMpO1xuICAgICAgICB0aGlzLnJlc2V0UG9saWN5QWNjZXNzRGV0YWlscygpO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2hlY2twb2ludHMnOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMgPSBbXTtcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtLnRvdGFsUXVlc3Rpb24gPSAwO1xuICAgICAgICB0aGlzLnBvbGljeUZvcm0ucGFzc2luZ01hcmtzID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3b3JrZmxvd0xldmVsJzpcbiAgICAgICAgdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlbW92ZVdvcmtmbG93KCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGlua1Byb2dyYW0nOlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0ubGlua1Byb2dyYW0gPSB7XG4gICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgIHJlbW92ZWQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcG9saWN5SWRzOiBbdGhpcy5wb2xpY3lGb3JtPy5wb2xpY3lfaWQgPz8gMF0sXG4gICAgICAgICAgICAgIHByb2dyYW1JZDogdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtPy5faWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoQWxsTGlzdHMoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ293bmVycyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X293bmVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BvbGljeUFjY2Vzcyc6XG4gICAgICAgIGNvbnN0IHVzZXJBY2Nlc3NJbmRleCA9IHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMuZmluZEluZGV4KFxuICAgICAgICAgIChvd25lcjogYW55KSA9PiBvd25lcj8uZW1wbG95ZWVfaWQgPT0gZXZlbnQ/LmVtcGxveWVlX2lkXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/LnNwbGljZSh1c2VyQWNjZXNzSW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hBbGxMaXN0cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2FjY2Vzc0dyb3VwJzpcbiAgICAgICAgY29uc3QgZ3JvdXBBY2Nlc3NJbmRleDogYW55ID1cbiAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5maW5kSW5kZXgoXG4gICAgICAgICAgICAoZ3JvdXA6IGFueSkgPT4gZ3JvdXA/Lmdyb3VwX2lkID09IGV2ZW50Py5ncm91cF9pZFxuICAgICAgICAgICk7XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/LnNwbGljZShncm91cEFjY2Vzc0luZGV4LCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdmcmVxdWVuY3knOlxuICAgICAgICB0aGlzLnJlbW92ZUZyZXF1ZW5jeSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lzTGlua2VkUG9saWNlcyc6XG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcyA9IHRoaXMucG9saWN5Rm9ybS5MaW5rZWRQb2xpY2llcz8uZmlsdGVyKFxuICAgICAgICAgIChwb2xpY3lJZDogYW55KSA9PiBldmVudCAhPT0gcG9saWN5SWRcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzID0gdGhpcy5TZWxlY3RlZExpc3RPZlBvbGljaWVzPy5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW0pID0+IGl0ZW0/LmNvbnRyYWN0X2lkICE9PSBldmVudFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgYXNzaWduZWVzIGFuZCBvdmVyc2VlcnMgbGlzdCBzdWNoIHRoYXQgYm90aCBsaXN0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNhbWUgdXNlcnMgYmFzZWQgb24gc2VsZWN0aW9uXG4gICAqL1xuICByZWZyZXNoQWxsTGlzdHMoKSB7XG4gICAgbGV0IGFzc2lnbmVlc0lkczogYW55ID0gW107XG4gICAgbGV0IHJldmlld2Vyc0lkczogYW55ID0gW107XG4gICAgbGV0IG92ZXJzZWVySWRzOiBhbnkgPSBbXTtcbiAgICBjb25zdCBhbGxVc2VycyA9IGNsb25lRGVlcCh0aGlzLnVzZXJzTGlzdCk7XG4gICAgY29uc3QgYXNzaWduZWVzID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyk7XG4gICAgY29uc3Qgb3ZlcnNlZXJMaXN0ID0gY2xvbmVEZWVwKHRoaXMucG9saWN5Rm9ybS5DQ0VtYWlsKTtcbiAgICBjb25zdCBub3RpZnlPdmVyc2VlcnMgPSBjbG9uZURlZXAodGhpcy5wb2xpY3lGb3JtLkNDRmFpbEVtYWlsKTtcbiAgICBhc3NpZ25lZXM/LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgYXNzaWduZWVzSWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgb3ZlcnNlZXJMaXN0Py5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG4gICAgbm90aWZ5T3ZlcnNlZXJzPy5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcbiAgICAgIG92ZXJzZWVySWRzLnB1c2godXNlci5lbXBsb3llZV9pZCk7XG4gICAgfSk7XG5cbiAgICBhc3NpZ25lZXNJZHMgPSBbLi4ubmV3IFNldChhc3NpZ25lZXNJZHMpXTtcbiAgICByZXZpZXdlcnNJZHMgPSBbLi4ubmV3IFNldChyZXZpZXdlcnNJZHMpXTtcbiAgICBvdmVyc2VlcklkcyA9IFsuLi5uZXcgU2V0KG92ZXJzZWVySWRzKV07XG5cbiAgICAvLyB0aGlzLmFzc2lnbm9yc0xpc3QgPSBiZWhhbGZVc2Vycy5maWx0ZXIoKHVzZXI6IGFueSkgPT4gIShyZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5tZW1iZXJfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIubWVtYmVyX2lkKSkpO1xuICAgIHRoaXMuYXNzaWduZWVzTGlzdCA9IGFsbFVzZXJzLmZpbHRlcihcbiAgICAgICh1c2VyOiBhbnkpID0+XG4gICAgICAgICEoXG4gICAgICAgICAgcmV2aWV3ZXJzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8XG4gICAgICAgICAgb3ZlcnNlZXJJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZClcbiAgICAgICAgKVxuICAgICk7XG4gICAgaWYgKHRoaXMuZ3JvdXBFbmFibGVkKSB7XG4gICAgICBjb25zdCB1c2VyT2JqID0gdGhpcy5hc3NpZ25lZXNMaXN0O1xuICAgICAgdXNlck9iaj8uZm9yRWFjaCgodXNlcjogYW55KSA9PiB7XG4gICAgICAgIHVzZXIubWVtYmVyX2lkID0gdXNlci5teV9tZW1iZXJfaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMub3duZXJsaXN0ID0gdXNlck9iajtcbiAgICB9XG4gICAgLy8gdGhpcy5yZXZpZXdlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKCh1c2VyOiBhbnkpID0+ICEoYXNzaWduZWVzSWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpIHx8IG92ZXJzZWVySWRzLmluY2x1ZGVzKHVzZXIuZW1wbG95ZWVfaWQpKSk7XG4gICAgdGhpcy5vdmVyc2VlcnNMaXN0ID0gYWxsVXNlcnMuZmlsdGVyKFxuICAgICAgKHVzZXI6IGFueSkgPT5cbiAgICAgICAgIShcbiAgICAgICAgICBhc3NpZ25lZXNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZCkgfHxcbiAgICAgICAgICByZXZpZXdlcnNJZHMuaW5jbHVkZXModXNlci5lbXBsb3llZV9pZClcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aG9sZSBsaXN0IGJhc2VkIG9uIHNlbGVjdGVkIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xuICAgKiBAcGFyYW0gbGlzdCBpdCBpcyB0aGUgbWFpbiBsaXN0ICB3aGljaCBjb250YWlucyBhbGwgZWxlbWVudHMgbGlzdFxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBmaWx0ZXIgc2VsZWN0ZWQgbGlzdCBmcm9tIHRoZSBsaXN0XG4gICAqIEBwYXJhbSBpZHMgc2VsZWN0ZWQgaWRzIGFycmF5XG4gICAqL1xuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IFtdO1xuICAgIGlkcz8uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IGxpc3Q/LmZpbmRJbmRleChcbiAgICAgICAgKGxpc3RFbGVtZW50OiBhbnkpID0+IGxpc3RFbGVtZW50W2tleV0gPT0gZWxlbWVudFxuICAgICAgKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RbaW5kZXhdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xuICAgKiBAcGFyYW0gbGlzdCBhY3R1YWwgc2VsZWN0ZWQgbGlzdFxuICAgKiBAcGFyYW0ga2V5IGNvbnRhaW5zIGtleSB0byBleHRyYWN0IGlkIGZyb20gdGhlIGxpc3RcbiAgICovXG4gIHJldHVybklkcyhsaXN0OiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKGVsZSkgPT4ge1xuICAgICAgaWYgKGVsZVtrZXldKSB7XG4gICAgICAgIHJldHVybiBlbGVba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSByZXZpZXdlciB0eXBlIGluIGFwcHJvdmFsIHdvcmtmbG93XG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBzZWxlY3RlZCByZXZpZXdlciB0eXBlXG4gICAqL1xuICByZXZpZXdlclR5cGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMud29ya2Zsb3dUeXBlID0gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBmcmVxdWVuY3kgaW4gZWRpdCAgbW9kZVxuICAgKi9cbiAgZnJlcXVlbmN5RGF0YVBvcHVsYXRpb24oZXZlbnQ6IGFueSwgbW9kZTogJ1NFTEVDVCcgfCAnUE9QVUxBVEUnID0gJ1NFTEVDVCcpIHtcbiAgICAvL25lZWRzIHRvIGRpc2N1c3Mgd2l0aCBiYWNrZW5kIGFib3V0IGVkaXQgYW5kIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscywgLy9cbiAgICAgIHdpbmRvdzogZXZlbnQ/LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSxcbiAgICAgIGZhaWxlZEFmdGVyOiBldmVudD8ubWFya19mYWlsZWRfYWZ0ZXIsXG4gICAgICBmYWlsZWRfdGltZV91dGM6ICcnLFxuICAgICAgbGlmZWN5Y2xlRGV0YWlsczogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgdGltZUluMjRIcjogZXZlbnQuZmFpbGVkX3RpbWUgIT0gJycgPyBldmVudC5mYWlsZWRfdGltZSA6IERFRkFVTFRfMjRIUixcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LmFzc2lnbmVlX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICksXG4gICAgICBzdGFydERhdGU6ICcnLFxuICAgICAgcmVwb3J0SWQ6IDAsXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50LmZhaWxlZF90aW1lICE9ICcnID8gZXZlbnQuZmFpbGVkX3RpbWUgOiBERUZBVUxUXzI0SFJcbiAgICAgICksXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQuZnJlcXVlbmN5X3RleHQsXG4gICAgfTtcblxuICAgIHRoaXMuZnJlcXVlbmN5RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3RlZCBmcmVxdWVuY3kgZGV0YWlscyBpbiB0aGUgcG9saWN5Rm9ybVxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIGZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9IGV2ZW50LnBhdHRlcm47XG4gICAgKHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9IGV2ZW50LnBsYWNlaG9sZGVyKSxcbiAgICAgICh0aGlzLnBvbGljeUZvcm0ubWFya19mYWlsZWRfYWZ0ZXIgPSBldmVudC5mYWlsZWRBZnRlcik7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IGV2ZW50LndpbmRvdztcbiAgICB0aGlzLnBvbGljeUZvcm0uZmFpbGVkX3RpbWUgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NpZ25lZV9zdGFydF9kYXRlID0gbW9tZW50KGV2ZW50LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXG4gICAgKTtcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIGZhbHNlKTtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgZnJlcXVlbmN5X2RldGFpbHM6IGV2ZW50LnBhdHRlcm4sXG4gICAgICBmcmVxdWVuY3lfdGltZTogZXZlbnQudGltZUluMTJocixcbiAgICAgIHJlbWluZGVyX2JlZm9yZV9kYXlzOiBldmVudC53aW5kb3csXG4gICAgICBmYWlsZWRfYWZ0ZXJfZGF5czogZXZlbnQuZmFpbGVkQWZ0ZXIsXG4gICAgICBsaWZlY3ljbGVfZGV0YWlsczogZXZlbnQubGlmZWN5Y2xlRGV0YWlscyxcbiAgICAgIHN0YXJ0X29mX2RheV91dGM6IGV2ZW50LnN0YXJ0RnJvbSxcbiAgICAgIG9uX2NvbXBsZXRpb25fb2Y6IFtldmVudC5yZXBvcnRJZF0sXG4gICAgICBkb21fdXRjOiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IGV2ZW50LmNvbnRpbnVvdXNfZmFpbGVkX2RheXMsXG4gICAgICBwbGFjZWhvbGRlcjogZXZlbnQucGxhY2Vob2xkZXIsXG4gICAgfTtcbiAgICB0aGlzLmZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSBmcmVxdWVuY3kgZmllbGQgd2l0aCBzZWxlY3RlZCBkYXRhIGZyb20gZnJlcXVlbmN5IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIGZyZXF1ZW5jeVBvcHVsYXRpb24oZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5wYXR0ZXJuID0gZXZlbnQ/LmZyZXF1ZW5jeV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy53aW5kb3cgPSBldmVudD8ucmVtaW5kZXJfYmVmb3JlX2RheXM7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IGV2ZW50Py5mYWlsZWRfYWZ0ZXJfZGF5cztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSBldmVudD8uc3RhcnRfb2ZfZGF5X3V0YztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuc2VsZWN0ZWRSZXBvcnQgPSBldmVudD8ub25fY29tcGxldGlvbl9vZlswXSA/PyAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5kYXRlT2ZNb2RpZmllZCA9IGV2ZW50Py5kb21fdXRjO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMztcbiAgICB0aGlzLmZyZXF1ZW5jeVBsYWNlaG9sZGVyID0gZXZlbnQ/LnBsYWNlaG9sZGVyXG4gICAgICA/IGV2ZW50LnBsYWNlaG9sZGVyXG4gICAgICA6ICdIb3cgb2Z0ZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIGF0dGVzdGVkPyc7XG4gIH1cblxuICByZXZpZXdlckZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICAvL25lZWRzIHRvIGRpc2N1c3Mgd2l0aCBiYWNrZW5kIGFib3V0IGVkaXQgYW5kIGRlZmF1bHQgdmFsdWVzXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIHBhdHRlcm46IGV2ZW50Py5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMsIC8vXG4gICAgICB3aW5kb3c6IGV2ZW50Py5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlLFxuICAgICAgZmFpbGVkQWZ0ZXI6IGV2ZW50Py5yZXZpZXdGYWlsZWRBZnRlcixcbiAgICAgIGZhaWxlZF90aW1lX3V0YzogJycsXG4gICAgICBsaWZlY3ljbGVEZXRhaWxzOiAnMDAwMC0wMC0wMH5+MCcsXG4gICAgICB0aW1lSW4yNEhyOlxuICAgICAgICBldmVudC5yZXZpZXdGYWlsZWRUaW1lICE9ICcnID8gZXZlbnQucmV2aWV3RmFpbGVkVGltZSA6IERFRkFVTFRfMjRIUixcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDAsXG4gICAgICBzdGFydEZyb206IE1hdGguZmxvb3IoXG4gICAgICAgIG5ldyBEYXRlKGV2ZW50LnJldmlld2VyX3N0YXJ0X2RhdGUpLmdldFRpbWUoKSAvIDEwMDBcbiAgICAgICksXG4gICAgICBzdGFydERhdGU6ICcnLFxuICAgICAgcmVwb3J0SWQ6IDAsXG4gICAgICB0aW1lSW4xMmhyOiB0aGlzLmZyZXF1ZW5jeVNlcnZpY2UudGltZUluMTIoXG4gICAgICAgIGV2ZW50LnJldmlld0ZhaWxlZFRpbWUgIT0gJycgPyBldmVudC5yZXZpZXdGYWlsZWRUaW1lIDogREVGQVVMVF8yNEhSXG4gICAgICApLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnJldmlld2ZyZXF1ZW5jeURldGFpbHMsXG4gICAgfTtcblxuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEYXRhKGRhdGEpO1xuICB9XG5cbiAgcmVzZXRSZXZpZXdlckZyZXF1ZW5jeSgpIHtcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscyA9IHtcbiAgICAgIHBhdHRlcm46ICcnLFxuICAgICAgbm90aWZpY2F0aW9uUGVuZGluZzogMCxcbiAgICAgIGRhdGVPZk1vZGlmaWVkOiAwLFxuICAgICAgZGVhY3RpdmF0aW9uVmFsdWU6IDAsXG4gICAgICBzZWxlY3RlZFJlcG9ydDogMCxcbiAgICAgIGxpZmVjeWNsZTogJzAwMDAtMDAtMDB+fjAnLFxuICAgICAgc3RhcnREYXRlOiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICBzdGFydE9uVGhlRGF5OiBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICB3aW5kb3c6IDAsXG4gICAgICBmYWlsZWQ6IDAsXG4gICAgICB0aW1lOiBERUZBVUxUX1RJTUUsXG4gICAgICBmYWlsZWRUaW1lOiAnJyxcbiAgICAgIGNvbnRpbnVvdXNfZmFpbGVkX2RheXM6IDMsXG4gICAgfTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3RmFpbGVkQWZ0ZXIgPSAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSAnJztcbiAgICB0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV90eXBlID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRUaW1lID0gREVGQVVMVF8yNEhSO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWQgdG8gYmUgcmV2aWV3ZWQgPyc7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgcmV2aWV3ZXIgZnJlcXVlbmN5IGRldGFpbHMgaW4gdGhlIHBvbGljeUZvcm1cbiAgICogQHBhcmFtIGV2ZW50IGNvbnRhaW5zIHNlbGVjdGVkIGZyZXF1ZW5jeSBkZXRhaWxzXG4gICAqL1xuICByZXZpZXdlckZyZXF1ZW5jeURhdGEoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdGYWlsZWRBZnRlciA9IGV2ZW50LmZhaWxlZEFmdGVyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgPSBldmVudC5wYXR0ZXJuO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdfZnJlcXVlbmN5X3R5cGUgPSBldmVudC5wYXR0ZXJuLnNwbGl0KCd+JylbMF07XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld19yZW1pbmRfZGF5c19iZWZvcmVfZHVlX2RhdGUgPSBldmVudC53aW5kb3c7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJldmlld0ZhaWxlZFRpbWUgPSBldmVudC50aW1lSW4yNEhyO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yZXZpZXdlcl9zdGFydF9kYXRlID0gbW9tZW50KGV2ZW50LnN0YXJ0RnJvbSAqIDEwMDApLmZvcm1hdChcbiAgICAgICdkZGQgTU1NIEREIFlZWVknXG4gICAgKTtcblxuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXJGcmVxdWVuY3knLCBmYWxzZSk7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBldmVudC5wYXR0ZXJuLFxuICAgICAgZnJlcXVlbmN5X3RpbWU6IGV2ZW50LnRpbWVJbjEyaHIsXG4gICAgICByZW1pbmRlcl9iZWZvcmVfZGF5czogZXZlbnQud2luZG93LFxuICAgICAgZmFpbGVkX2FmdGVyX2RheXM6IGV2ZW50LmZhaWxlZEFmdGVyLFxuICAgICAgbGlmZWN5Y2xlX2RldGFpbHM6IGV2ZW50LmxpZmVjeWNsZURldGFpbHMsXG4gICAgICBzdGFydF9vZl9kYXlfdXRjOiBldmVudC5zdGFydEZyb20sXG4gICAgICBvbl9jb21wbGV0aW9uX29mOiBbZXZlbnQucmVwb3J0SWRdLFxuICAgICAgZG9tX3V0YzogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksXG4gICAgICBjb250aW51b3VzX2ZhaWxlZF9kYXlzOiBldmVudC5jb250aW51b3VzX2ZhaWxlZF9kYXlzLFxuICAgICAgcGxhY2Vob2xkZXI6IGV2ZW50LnBsYWNlaG9sZGVyLFxuICAgIH07XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeVBvcHVsYXRpb24ocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGVzIHRoZSByZXZpZXdlciBmcmVxdWVuY3kgZmllbGQgd2l0aCBzZWxlY3RlZCBkYXRhIGZyb20gZnJlcXVlbmN5IGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZXZlbnQgY29udGFpbnMgc2VsZWN0ZWQgZnJlcXVlbmN5IGRldGFpbHNcbiAgICovXG4gIHJldmlld2VyRnJlcXVlbmN5UG9wdWxhdGlvbihldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9IGV2ZW50Py5mcmVxdWVuY3lfZGV0YWlscztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gZXZlbnQ/LmZyZXF1ZW5jeV90aW1lO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IGV2ZW50Py5yZW1pbmRlcl9iZWZvcmVfZGF5cztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5mYWlsZWQgPSBldmVudD8uZmFpbGVkX2FmdGVyX2RheXM7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMubGlmZWN5Y2xlID0gZXZlbnQ/LmxpZmVjeWNsZV9kZXRhaWxzO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnN0YXJ0RGF0ZSA9IGV2ZW50Py5zdGFydF9vZl9kYXlfdXRjO1xuICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEZXRhaWxzLnNlbGVjdGVkUmVwb3J0ID1cbiAgICAgIGV2ZW50Py5vbl9jb21wbGV0aW9uX29mWzBdID8/IDA7XG4gICAgdGhpcy5yZXZpZXdlckZyZXF1ZW5jeURldGFpbHMuZGF0ZU9mTW9kaWZpZWQgPSBldmVudD8uZG9tX3V0YztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5RGV0YWlscy5jb250aW51b3VzX2ZhaWxlZF9kYXlzID0gMztcbiAgICB0aGlzLnJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgPSBldmVudD8ucGxhY2Vob2xkZXJcbiAgICAgID8gZXZlbnQucGxhY2Vob2xkZXJcbiAgICAgIDogJ1doZW4gZG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkID8nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGUgZGF0YSBzdWJtaXR0ZWQgb24gY3JlYXRlIHBvbGljeSBmb3JtXG4gICAqL1xuICB2YWxpZGF0ZVBvbGljeSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICB9LCAxMDApO1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWU7XG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZSA9IGV2ZW50LnJlcGxhY2UocmUsICcnKS50cmltKCk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5TmFtZS50cmltKCkgPT0gJycgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAoKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAhdGhpcy5ncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgKCh0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZT8ubGVuZ3RoID4gMCkgJiZcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBFbmFibGVkKSkpIHx8XG4gICAgICAodGhpcy5wb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAoIXRoaXMuZ3JvdXBFbmFibGVkIHx8XG4gICAgICAgICAgKHRoaXMucG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5ncm91cEVuYWJsZWQpKSkgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtLnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSZXZpZXdlcnMubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLnBvbGljeUZvcm0ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vycy5sZW5ndGggPT0gMCkgfHxcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMubGVuZ3RoID09IDAgfHxcbiAgICAgICghdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92YWxfd29ya2Zsb3c/Lmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy5wb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgPT09IDApIHx8XG4gICAgICAodGhpcy5mb3JtYXRFdmlkZW5jZSAmJiB0aGlzLmZvcm1hdEV2aWRlbmNlLm5ld0xpbmsuY29udGFpbnNFcnJvcikgfHxcbiAgICAgICF0aGlzLnBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAodGhpcy5pc1NlbmRGb3JBdHRlc3RhdGlvbiAmJlxuICAgICAgICB0aGlzLnBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGFuIGFwaSBjYWxsIHRvIGNyZWF0ZSBhIHBvbGljeVxuICAgKiBAcGFyYW0gcG9saWN5IGNvbnRhaW5zIHBvbGljeUZvcm0gZGF0YVxuICAgKi9cbiAgc3VibWl0UG9saWN5KCkge1xuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgY29uc3QgdmFsaWQgPSB0aGlzLnZhbGlkYXRlUG9saWN5KCk7XG4gICAgaWYgKCF2YWxpZCB8fCAhdGhpcy5pc1ZlcnNpb25WYWxpZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XG4gICAgdGhpcy51aUtpdFNlcnZpY2UuaXNMb2FkZXIgPSB0cnVlO1xuICAgIGlmICh0aGlzLm5vV29ya2Zsb3dTZWxlY3RlZCkge1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzID0gdGhpcy5zZWxlY3RlZFdvcmtmbG93O1xuICAgIH1cbiAgICBjb25zdCBwb2xpY3kgPSB0aGlzLnBvbGljeUZvcm07XG4gICAgbGV0IGFwcHJvdmVyc0RhdGE6IGFueSA9IHRoaXMuY29udmVydEFwcHJvdmFsV29ya2Zsb3coXG4gICAgICBwb2xpY3kuc2VsZWN0ZWRBcHByb3ZlcnNcbiAgICApO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHBvbGljeS5wb2xpY3lEdWVEYXRlPy4kZCA/PyBwb2xpY3kucG9saWN5RHVlRGF0ZTtcbiAgICBsZXQgcmV2aWV3ZXJGaWxlc0FycmF5ID0gY2xvbmVEZWVwKHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlcyk7XG4gICAgY29uc3QgcmV2aWV3ZXJGaWxlcyA9IHJldmlld2VyRmlsZXNBcnJheS5tYXAoKGZpbGU6IGFueSkgPT4ge1xuICAgICAgZmlsZS5uYW1lID0gZmlsZS5maWxlbmFtZTtcbiAgICAgIGZpbGUuZmlsZV9wYXRoID0gZmlsZS5maWxlcGF0aDtcbiAgICAgIGZpbGUub3JnX25hbWUgPSBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUuZmlsZW5hbWU7XG4gICAgICBkZWxldGUgZmlsZS5maWxlcGF0aDtcbiAgICAgIGRlbGV0ZSBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGZpbGUubGlua1NldDtcbiAgICAgIHJldHVybiBmaWxlO1xuICAgIH0pO1xuXG4gICAgbGV0IGF0dGVzdGF0aW9uRmlsZXNBcnJheSA9IGNsb25lRGVlcChcbiAgICAgIHBvbGljeS5hc3NvY2lhdGVkRG9jdW1lbnRzLmZvcm1hdEZpbGVzXG4gICAgKTtcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gYXR0ZXN0YXRpb25GaWxlc0FycmF5Lm1hcCgoZWxlOiBhbnkpID0+IHtcbiAgICAgIGVsZS5uYW1lID0gZWxlLmZpbGVuYW1lO1xuICAgICAgZWxlLmZpbGVfcGF0aCA9IGVsZS5maWxlcGF0aDtcbiAgICAgIGVsZS5vcmlnaW5hbF9maWxlX25hbWUgPSBlbGUub3JpZ2luYWxfZmlsZW5hbWU7XG4gICAgICBlbGUuZm9sZGVyX2lkID0gZWxlPy5mb2xkZXJfaWQgPyBlbGUuZm9sZGVyX2lkIDogMDtcbiAgICAgIGVsZS5wYXRoID0gZWxlPy5wYXRoID8gZWxlLnBhdGggOiBlbGUuZmlsZXBhdGggKyBlbGUuZmlsZW5hbWU7XG4gICAgICBlbGUuaXNMaW5rU2V0ID0gZWxlLmxpbmtTZXQ7XG4gICAgICBlbGUub3RoZXJfdHlwZSA9IGVsZT8ub3RoZXJzO1xuICAgICAgZGVsZXRlIGVsZS5maWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBlbGUuZmlsZXBhdGg7XG4gICAgICBkZWxldGUgZWxlLm9yaWdpbmFsX2ZpbGVuYW1lO1xuICAgICAgZGVsZXRlIGVsZS5saW5rU2V0O1xuICAgICAgZGVsZXRlIGVsZS5maWxlX25hbWU7XG4gICAgICBkZWxldGUgZWxlLm90aGVycztcbiAgICAgIHJldHVybiBlbGU7XG4gICAgfSk7XG4gICAgY29uc3QgcmV2aWV3ZXJJRCA9IHRoaXMucmV0dXJuSWRzKHBvbGljeS5zZWxlY3RlZFJldmlld2VycywgJ21lbWJlcl9pZCcpO1xuICAgIGNvbnN0IHBvbGljeUFjY2Vzc1VzZXJzSWRzID1cbiAgICAgIHRoaXMucmV0dXJuSWRzKHBvbGljeS5wb2xpY3lfYWNjZXNzX293bmVycywgJ21lbWJlcl9pZCcpID8/IFtdO1xuICAgIGNvbnN0IHBvbGljeUFjY2Vzc0dyb3Vwc0lkcyA9XG4gICAgICB0aGlzLnJldHVybklkcyhwb2xpY3kucG9saWN5X2FjY2Vzc19ncm91cHMsICdfaWQnKSA/PyBbXTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBwb2xpY3lfbmFtZTogcG9saWN5LnBvbGljeU5hbWUsXG4gICAgICBub3RlczogcG9saWN5LnBvbGljeU5vdGVzLFxuICAgICAgaXNfcG9ydGFsX2VuYWJsZTogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsID8gMSA6IDAsXG4gICAgICBpc19zdWdnZXRpb25fZW5hYmxlOiBwb2xpY3kuYWNjZXB0U3VnZ2VzdGlvbnMgPyAxIDogMCxcbiAgICAgIGNhdGVnb3J5X2lkX2FycjogdGhpcy5yZXR1cm5JZHMocG9saWN5LnNlbGVjdGVkQ2F0ZWdvcmllcywgJ2l0ZW1faWQnKSxcbiAgICAgIGFwcHJvdmVyczogYXBwcm92ZXJzRGF0YSxcbiAgICAgIGFzc2lnbmVlX2lkczogdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHBvbGljeT8uc2VsZWN0ZWRBc3NpZ25lZXMsXG4gICAgICAgICdlbXBsb3llZV9pZCdcbiAgICAgICkubWFwKChpZCkgPT4gTnVtYmVyKGlkKSksXG4gICAgICB1c2VyZ3JvdXBfaWRzOiB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRHcm91cEFzc2lnbmVlLCAnX2lkJykgPz8gW10sXG4gICAgICBJc19hcHByb3ZhbDogMCwgLy9uZWVkcyB0byBjaGVjayBpbiBmZVxuXG4gICAgICBhc3NvY2lhdGVkX2RvY3VtZW50czogcG9saWN5LmFkZEFzc29jaWF0ZWREb2N1bWVudHNcbiAgICAgICAgPyBhdHRlc3RhdGlvbkZpbGVzXG4gICAgICAgIDogW10sXG5cbiAgICAgIGN1c3RvbV90YWdzOiBKU09OLnN0cmluZ2lmeShwb2xpY3kuY3VzdG9tVGFncyksXG5cbiAgICAgIGZyZXF1ZW5jeV9kZXRhaWxzOiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgPyBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgOiAnJyxcbiAgICAgIGZyZXF1ZW5jeV90ZXh0OiBwb2xpY3kuZnJlcXVlbmN5X2RldGFpbHMgPyBwb2xpY3kuZnJlcXVlbmN5X3RleHQgOiAnJyxcbiAgICAgIHJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5LnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZVxuICAgICAgICA6IDAsXG4gICAgICBmYWlsZWRfdGltZTogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzID8gcG9saWN5LmZhaWxlZF90aW1lIDogJycsXG4gICAgICBtYXJrX2ZhaWxlZF9hZnRlcjogcG9saWN5LmZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgID8gcG9saWN5Lm1hcmtfZmFpbGVkX2FmdGVyXG4gICAgICAgIDogJycsXG4gICAgICAvLyBzdGFydERhdGU6IHBvbGljeS5wb2xpY3lEdWVEYXRlLnRvRGF0ZVN0cmluZygpLFxuICAgICAgc3RhcnREYXRlOiBtb21lbnQoc3RhcnREYXRlKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWScpLFxuXG4gICAgICBSZXZpZXdlckF0dGFjaG1lbnRzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlc1xuICAgICAgICAgID8gcmV2aWV3ZXJGaWxlc1xuICAgICAgICAgIDogW10sXG4gICAgICBSZXZpZXdlckxpbmtzOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rc1xuICAgICAgICAgID8gcG9saWN5LmRvY3VtZW50c0FuZExpbmtzLmZvcm1hdExpbmtzXG4gICAgICAgICAgOiBbXSxcbiAgICAgIFJldmlld2VyTWVtYmVySWQ6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcmV2aWV3ZXJJRFswXSA/IHJldmlld2VySURbMF0gOiAwLFxuICAgICAgaXNSZXZpZXc6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiZcbiAgICAgICAgKHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRGaWxlcyB8fFxuICAgICAgICAgIHBvbGljeS5kb2N1bWVudHNBbmRMaW5rcy5mb3JtYXRMaW5rcykgJiZcbiAgICAgICAgcmV2aWV3ZXJJRFswXVxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmV2aWV3RmFpbGVkQWZ0ZXI6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld0ZhaWxlZEFmdGVyXG4gICAgICAgICAgOiAwLFxuICAgICAgcmV2aWV3RmFpbGVkVGltZTpcbiAgICAgICAgcG9saWN5LmFkZFJldmlld2VycyAmJiBwb2xpY3kucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgPyBwb2xpY3kucmV2aWV3RmFpbGVkVGltZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X2RldGFpbHM6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfZnJlcXVlbmN5X3R5cGU6XG4gICAgICAgIHBvbGljeS5hZGRSZXZpZXdlcnMgJiYgcG9saWN5LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgID8gcG9saWN5LnJldmlld19mcmVxdWVuY3lfdHlwZVxuICAgICAgICAgIDogJycsXG4gICAgICByZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlOlxuICAgICAgICBwb2xpY3kuYWRkUmV2aWV3ZXJzICYmIHBvbGljeS5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICA/IHBvbGljeS5yZXZpZXdfcmVtaW5kX2RheXNfYmVmb3JlX2R1ZV9kYXRlXG4gICAgICAgICAgOiAwLFxuXG4gICAgICBlbnRpdGllczogdGhpcy5wb2xpY3lGb3JtPy5hZGRSZXNwb25zaWJpbGl0eUNlbnRlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuc2VsZWN0ZWRSQ3MsICdpdGVtX2lkJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuICAgICAgcmlza19jbGFzczogcG9saWN5LnJpc2tSYXRpbmcudG9TdHJpbmcoKSxcblxuICAgICAgQ0NGYWlsRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NGYWlsRW1haWwsICdlbXBsb3llZV9lbWFpbCcpLnRvU3RyaW5nKClcbiAgICAgICAgOiAnJyxcbiAgICAgIENDRW1haWw6IHBvbGljeS5hZGRPdmVyc2VlcnNcbiAgICAgICAgPyB0aGlzLnJldHVybklkcyhwb2xpY3kuQ0NFbWFpbCwgJ2VtcGxveWVlX2VtYWlsJykudG9TdHJpbmcoKVxuICAgICAgICA6ICcnLFxuXG4gICAgICBjaGVja3BvaW50RGV0YWlsczogcG9saWN5LmNoZWNrcG9pbnREZXRhaWxzID8/IFtdLFxuICAgICAgdG90YWxRdWVzdGlvbjogcG9saWN5LnRvdGFsUXVlc3Rpb24gPyBwb2xpY3kudG90YWxRdWVzdGlvbiA6IDAsIC8vXG4gICAgICBwYXNzaW5nTWFya3M6IHBvbGljeS5wYXNzaW5nTWFya3MgPyBwb2xpY3kucGFzc2luZ01hcmtzIDogMCwgLy9cblxuICAgICAgcG9saWN5QXBwcm92YWxGbGFnOiAwLFxuXG4gICAgICBpc19zaWduYXR1cmVfcmVxdWlyZWQ6IHBvbGljeS5yZXF1aXJlc1NpZ25hdHVyZUZvckF0dGVzdGF0aW9uID8gMSA6IDAsXG4gICAgICBjY191c2VyZ3JvdXBfaWRzOiB0aGlzLmNjRW1haWxPYmpJZHMsXG4gICAgICBjY19mYWlsX3VzZXJncm91cF9pZHM6IHRoaXMuY2NGYWlsR3JvdXBPYmpJZHMsXG4gICAgICByZXZpZXdlcl9zdGFydF9kYXRlOiBwb2xpY3kucmV2aWV3ZXJfc3RhcnRfZGF0ZSA/PyAnJyxcbiAgICAgIGFzc2lnbmVlX3N0YXJ0X2RhdGU6IHBvbGljeS5hc3NpZ25lZV9zdGFydF9kYXRlLFxuICAgICAgcG9saWN5X3ZlcnNpb246IHBvbGljeS5hZGRWZXJzaW9uID8gcG9saWN5LnBvbGljeV92ZXJzaW9uIDogJycsXG4gICAgICBhc3Nlc3NtZW50OiBwb2xpY3kuYWRkTGlua0Fzc2Vzc21lbnRcbiAgICAgICAgPyBwb2xpY3kuYXNzZXNzbWVudC5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBhc3Nlc3NtZW50X2lkOiBlbGUuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgICAgY2F0ZWdvcnlfaWQ6IGVsZS5jYXRlZ29yeV9pZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBbXSxcbiAgICAgIHBvbGljeV9vd25lcnM6IHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzLm1hcChcbiAgICAgICAgKGVsZTogYW55KSA9PiBlbGUubWVtYmVyX2lkXG4gICAgICApLFxuICAgICAgYXBwcm92YWxfd29ya2Zsb3dfaWQ6IHBvbGljeT8uc2VsZWN0ZWRBcHByb3ZlcnNbMF0/Ll9pZFxuICAgICAgICA/IFtwb2xpY3k/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5faWRdXG4gICAgICAgIDogW10sXG4gICAgICBsaW5rUHJvZ3JhbTogT2JqZWN0LmtleXMocG9saWN5Py5saW5rUHJvZ3JhbSkubGVuZ3RoXG4gICAgICAgID8gcG9saWN5Py5saW5rUHJvZ3JhbVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICBidXNpbmVzc19jeWNsZTogT2JqZWN0LmtleXMocG9saWN5Py5saW5rUHJvZ3JhbSkubGVuZ3RoXG4gICAgICAgID8gcG9saWN5Py5idXNpbmVzc0N5Y2xlXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgcG9saWN5X2FjY2Vzc190eXBlOiBwb2xpY3kucG9saWN5X2FjY2Vzc190eXBlID8/IDAsXG4gICAgICBwb2xpY3lfYWNjZXNzX293bmVyczogcG9saWN5LmF2YWlsYWJsZU9uUG9ydGFsXG4gICAgICAgID8gW11cbiAgICAgICAgOiBwb2xpY3lBY2Nlc3NVc2Vyc0lkcyA/PyBbXSxcbiAgICAgIHBvbGljeV9hY2Nlc3NfZ3JvdXBzOiBwb2xpY3kuYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgPyBbXVxuICAgICAgICA6IHBvbGljeUFjY2Vzc0dyb3Vwc0lkcyA/PyBbXSxcbiAgICAgIGRpc3BsYXlPblBvcnRhbDogcG9saWN5LmlzUG9ydGFsRGlzcGxheUVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBsaW5rZWRQb2xpY2llczogWy4uLm5ldyBTZXQocG9saWN5LkxpbmtlZFBvbGljaWVzKV0sXG4gICAgfTtcbiAgICBpZiAodGhpcy5tb2RlID09ICdDUkVBVEUnKSB7XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2Uuc3VibWl0UG9saWN5KHBheWxvYWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wb2xpY3lJZCA9IHJlcy5faWQ7XG4gICAgICAgICAgaWYgKHRoaXMuY29udmVydEZpbGVEYXRhPy5maWxlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5saW5rRG9jdW1lbnRXaXRoUG9saWN5KHRoaXMuY29udmVydEZpbGVEYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZUlkKSB7XG4gICAgICAgICAgICB0aGlzLm9uVGVtcGxhdGVTZWxlY3QoW3sgX2lkOiB0aGlzLnRlbXBsYXRlSWQgfV0sIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNoYW5nZWQuZW1pdCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxuICAgICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XG4gICAgICBpZiAodGhpcy5wb2xpY3lBcHByb3ZhbEZsYWcgIT09IDApIHtcbiAgICAgICAgZGVsZXRlIHBheWxvYWQuYXBwcm92ZXJzO1xuICAgICAgICBwYXlsb2FkLnBvbGljeUFwcHJvdmFsRmxhZyA9IDI7XG4gICAgICB9XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2UudXBkYXRlUG9saWN5KHBheWxvYWQsIHRoaXMucG9saWN5SWQpLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnVpS2l0U2VydmljZS5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucG9saWN5SWQgPSByZXMuX2lkO1xuXG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2VuZEZvckF0dGVzdGF0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcbiAgICAgICAgICAgICAgICAnVGhlIHBvbGljeSBoYXMgYmVlbiBzZW50IGZvciBhdHRlc3RhdGlvbicsXG4gICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBwb2xpY3kgaGFzIGJlZW4gdXBkYXRlZCcsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmwgPVxuICAgICAgICAgICAgICB0aGlzLmJhc2VVUkwgKyAnL2FsbC9wb2xpY3kvd29ya3Jvb20/aWQ9JyArIHRoaXMucG9saWN5SWQ7XG4gICAgICAgICAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XG4gICAgICAgICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wb2xpY3kvd29ya3Jvb20nXSwgeyBxdWVyeVBhcmFtczogeyBpZDogdGhpcy5wb2xpY3lJZCB9LCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudWlLaXRTZXJ2aWNlLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxuICAgICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXG4gICAgICAgICAgICAnYWxlcnQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBsaW5rRG9jdW1lbnRXaXRoUG9saWN5KGRvY3VtZW50OiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5maWxlTmFtZSAmJlxuICAgICAgKGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdwZGYnIHx8XG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdQREYnIHx8XG4gICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdkb2N4JyB8fFxuICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnRE9DWCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnBvbGljeVNlcnZpY2VcbiAgICAgICAgLmV4dHJhY3RGaWxlKGRvY3VtZW50LmZpbGVFeHRlbnNpb24sIGRvY3VtZW50LmZpbGVQYXRoLCB0aGlzLnBvbGljeUlkKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgPT09ICdkb25lJyB8fCByZXMuY29udGVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ2RvY3gnIHx8XG4gICAgICAgICAgICAgICAgICBkb2N1bWVudC5maWxlRXh0ZW5zaW9uID09PSAnRE9DWCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3BvbGljeS9lZGl0LXBvbGljeSddLCB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlkOiB0aGlzLnBvbGljeUlkIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZmlsZUV4dGVuc2lvbiA9PT0gJ3BkZicgfHxcbiAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZpbGVFeHRlbnNpb24gPT09ICdQREYnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wb2xpY3kvd29ya3Jvb20nXSwge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogeyBpZDogdGhpcy5wb2xpY3lJZCB9LFxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgICAgICAgIFwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5LCBzaGFsbCB3ZT9cIixcbiAgICAgICAgICAgICAgJ2FsZXJ0J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnNuYWNrQmFyLnNob3coXG4gICAgICAgIFwiT29wcyEgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5LCBzaGFsbCB3ZT9cIixcbiAgICAgICAgJ2FsZXJ0J1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogb3BlbnMgdGhlIGRhdGUgcGlja2VyIG9uIHBvbGljeSBmb3JtXG4gICAqL1xuICBvcGVuRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8ub3BlbigpO1xuICAgIHRoaXMuZGF0ZVBpY2tlck92ZXJsYXkgPSB0cnVlO1xuICAgIC8vIHRoaXMuc2V0QWN0aXZlRmllbGRTZWxlY3RvcignSVNTVUVfREFURV9USU1FJywgJ0lTU1VFX0RBVEVfVElNRScpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsb3NlcyB0aGUgZGF0ZSBwaWNrZXIgZnJvbSBwb2xpY3kgZm9ybVxuICAgKi9cbiAgY2xvc2VEYXRlUGlja2VyKGV2dDogYW55KSB7XG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xuXG4gICAgaWYgKCFldnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2dD8uZGF0ZT8uJGQpIHtcbiAgICAgIGxldCBtb250aEFycmF5ID0gW1xuICAgICAgICAnSmFuJyxcbiAgICAgICAgJ0ZlYicsXG4gICAgICAgICdNYXInLFxuICAgICAgICAnQXByJyxcbiAgICAgICAgJ0p1bicsXG4gICAgICAgICdKdWwnLFxuICAgICAgICAnQXVnJyxcbiAgICAgICAgJ1NlcCcsXG4gICAgICAgICdPY3QnLFxuICAgICAgICAnTm92JyxcbiAgICAgICAgJ0RlYycsXG4gICAgICBdO1xuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gbmV3IERhdGUoZXZ0Py5kYXRlPy4kZCkuZ2V0RGF0ZSgpO1xuICAgICAgY29uc3QgbW9udGhWYWx1ZSA9IG1vbnRoQXJyYXlbbmV3IERhdGUoZXZ0Py5kYXRlPy4kZCkuZ2V0TW9udGgoKV07XG4gICAgICBjb25zdCB5ZWFyVmFsdWUgPSBuZXcgRGF0ZShldnQ/LmRhdGU/LiRkKS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgZGF0ZVN0ciA9IGAke2RhdGVWYWx1ZX0gJHttb250aFZhbHVlfSAke3llYXJWYWx1ZX1gO1xuICAgIH1cbiAgICBpZiAoZXZ0Py5kYXRlPy4kZCkge1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeUR1ZURhdGUgPSBldnQ/LmRhdGU/LiRkO1xuICAgIH1cbiAgICB0aGlzLmRhdGVQaWNrZXI/LmFwaT8uY2xvc2UoKTtcbiAgfVxuICBlZGl0UG9saWN5RnJvbURvY3VtZW50cygpIHtcbiAgICB0aGlzLm1vZGUgPSAnRURJVCc7XG4gICAgdGhpcy5zaGlmdFRvRWRpdE1vZGUuZW1pdCgpO1xuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dDcmVhdGVEb2N1bWVudHMgPSBmYWxzZTtcbiAgICB0aGlzLm5hdmlnYXRlVG9Eb2N1bWVudHNTZWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVkaXRQb2xpY3koKTtcbiAgfVxuXG4gIGNoZWNrRm9yQ3JlYXRlRG9jdW1lbnRzKCkge1xuICAgIGNvbnN0IGRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2hvd0NyZWF0ZURvY3VtZW50cycpO1xuICAgIHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24gPSBkYXRhID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgaWYgKHRoaXMubmF2aWdhdGVUb0RvY3VtZW50c1NlY3Rpb24pIHtcbiAgICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KHRydWUpO1xuICAgICAgdGhpcy5zaG93Q3JlYXRlRG9jdW1lbnRzID0gdHJ1ZTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzaG93Q3JlYXRlRG9jdW1lbnRzJyk7XG4gICAgfVxuICB9XG5cbiAgZWRpdFBvbGljeSgpIHtcbiAgICB0aGlzLm1vZGUgPSAnRURJVCc7XG5cbiAgICBpZiAodGhpcy5wb2xpY3lJZCkge1xuICAgICAgdGhpcy5wb2xpY3lTZXJ2aWNlLmVkaXRQb2xpY3kodGhpcy5wb2xpY3lJZCkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzWzBdO1xuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5SWRzID0gZGF0YS5jYXRlZ29yeV9kZXRhaWxzX2Fyci5tYXAoXG4gICAgICAgICAgICAoaWQ6IGFueSkgPT4gaWQuY2F0T2JqSWRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMucG9saWN5QXBwcm92YWxGbGFnID0gZGF0YS5wb2xpY3lBcHByb3ZhbEZsYWc7XG4gICAgICAgICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzID0gZGF0YT8uYXBwcm92YWxXb3JrZmxvd0RldGFpbHM/Lm1hcChcbiAgICAgICAgICAgICh3b3JrZmxvdzogYW55KSA9PiB3b3JrZmxvdz8uX2lkXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3cgPSBbXTtcbiAgICAgICAgICB0aGlzLmRlZmF1bHRFZGl0QXBwcm92ZXJzID0gZGF0YT8uYXBwcm92ZXJzO1xuICAgICAgICAgIHRoaXMuZ2V0QXBwcm92ZXJXb3JrRmxvdyhjYXRlZ29yeUlkcywgZGF0YSk7XG4gICAgICAgICAgdGhpcy5nZXRMaW5rZWRQb2xpY2llcyhkYXRhPy5faWQpO1xuICAgICAgICAgIHRoaXMucG9wdWxhdGVQb2xpY3lGb3JtKGRhdGEsIGNhdGVnb3J5SWRzKTtcbiAgICAgICAgICB0aGlzLmZyZXF1ZW5jeURhdGFQb3B1bGF0aW9uKGRhdGEpO1xuICAgICAgICAgIHRoaXMucmV2aWV3ZXJGcmVxdWVuY3lEYXRhUG9wdWxhdGlvbihkYXRhKTtcbiAgICAgICAgICB0aGlzLnBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcG9wdWxhdGVQb2xpY3lGb3JtKGRhdGE6IGFueSwgY2F0ZWdvcnlJZHM6IGFueSkge1xuICAgIGNvbnN0IHJldmlld2VyRmlsZXMgPSBkYXRhLlJldmlld2VyQXR0YWNobWVudHMubWFwKChmaWxlOiBhbnkpID0+IHtcbiAgICAgIGZpbGUuZmlsZW5hbWUgPSBmaWxlLm5hbWU7XG4gICAgICBmaWxlLmZpbGVwYXRoID0gZmlsZS5maWxlX3BhdGg7XG4gICAgICBmaWxlLm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZS5vcmdfbmFtZTtcbiAgICAgIGZpbGUuZmlsZV9uYW1lID0gZmlsZS5vcmdfbmFtZTtcbiAgICAgIGZpbGUubGlua1NldCA9ICcnO1xuICAgICAgZGVsZXRlIGZpbGUubmFtZTtcbiAgICAgIGRlbGV0ZSBmaWxlLmZpbGVfcGF0aDtcbiAgICAgIGRlbGV0ZSBmaWxlLm9yZ19uYW1lO1xuXG4gICAgICByZXR1cm4gZmlsZTtcbiAgICB9KTtcbiAgICBjb25zdCBhdHRlc3RhdGlvbkZpbGVzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50cy5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICBlbGUuZmlsZW5hbWUgPSBlbGUubmFtZTtcbiAgICAgIGVsZS5maWxlcGF0aCA9IGVsZS5maWxlX3BhdGg7XG4gICAgICBlbGUub3JpZ2luYWxfZmlsZW5hbWUgPSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xuICAgICAgZWxlLmZpbGVfbmFtZSA9IGVsZS5vcmlnaW5hbF9maWxlX25hbWU7XG4gICAgICBlbGUubGlua1NldCA9IGVsZS5pc0xpbmtTZXQ7XG4gICAgICBlbGUub3RoZXJzID0gZWxlPy5vdGhlcl90eXBlO1xuXG4gICAgICBkZWxldGUgZWxlLm5hbWU7XG4gICAgICBkZWxldGUgZWxlLmZpbGVfcGF0aDtcbiAgICAgIGRlbGV0ZSBlbGUub3JpZ2luYWxfZmlsZV9uYW1lO1xuICAgICAgZGVsZXRlIGVsZS5pc0xpbmtTZXQ7XG4gICAgICBkZWxldGUgZWxlPy5vdGhlcl90eXBlO1xuICAgICAgcmV0dXJuIGVsZTtcbiAgICB9KTtcbiAgICBjb25zdCBncm91cF9lbXBsb3llZUlkcyA9IGRhdGEuZ3JvdXBfZW1wbG95ZWVOYW1lcy5tYXAoXG4gICAgICAoaWQ6IGFueSkgPT4gaWQ/LmVtcGxveWVlX2lkXG4gICAgKTtcbiAgICBjb25zdCBncm91cF9JZHMgPSBkYXRhPy51c2VyZ3JvdXBfaWRzPy5tYXAoKGlkOiBhbnkpID0+IGlkKSA/PyBbXTtcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmNhdGVnb3J5TGlzdCxcbiAgICAgIGNhdGVnb3J5SWRzLFxuICAgICAgJ19pZCdcbiAgICApO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfaWQgPSBkYXRhPy5wb2xpY3lfaWQ7XG4gICAgKHRoaXMucG9saWN5Rm9ybS5wb2xpY3lOYW1lID0gZGF0YS5wb2xpY3lfbmFtZSksXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLnBvbGljeU5vdGVzID0gZGF0YS5ub3RlcyksXG4gICAgICAodGhpcy5wb2xpY3lGb3JtLmN1c3RvbVRhZ3MgPSBkYXRhLmN1c3RvbV90YWdzID8gZGF0YS5jdXN0b21fdGFncyA6IFtdKTtcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFzc2lnbmVlcyA9XG4gICAgICBncm91cF9lbXBsb3llZUlkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMuYXNzaWduZWVzTGlzdCwgZ3JvdXBfZW1wbG95ZWVJZHMsICdteV9tZW1iZXJfaWQnKVxuICAgICAgICA6IFtdOyAvL2RvdWJ0IGluIG5hbWVcblxuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWUgPVxuICAgICAgZ3JvdXBfSWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBncm91cF9JZHMsICdfaWQnKVxuICAgICAgICA6IFtdO1xuXG4gICAgdGhpcy5wb2xpY3lGb3JtLnNlbGVjdGVkUkNzID0gZGF0YS5lbnRpdGllc1xuICAgICAgPyB0aGlzLnNldExpc3QodGhpcy5yY0xpc3QsIGRhdGEuZW50aXRpZXMuc3BsaXQoJywnKSwgJ2l0ZW1faWQnKVxuICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uQ0NGYWlsRW1haWwgPSBkYXRhLkNDRmFpbEVtYWlsXG4gICAgICA/IHRoaXMuc2V0TGlzdCh0aGlzLm92ZXJzZWVyc0xpc3QsIGRhdGEuQ0NGYWlsRW1haWwsICdlbXBsb3llZV9lbWFpbCcpXG4gICAgICA6IFtdO1xuICAgIHRoaXMucG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbEdyb3VwID1cbiAgICAgIGRhdGE/LmNjX2ZhaWxfdXNlcmdyb3VwX2lkcz8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0TGlzdChcbiAgICAgICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICAgICAgZGF0YT8uY2NfZmFpbF91c2VyZ3JvdXBfaWRzLFxuICAgICAgICAgICAgJ19pZCdcbiAgICAgICAgICApXG4gICAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDRW1haWwgPSBkYXRhLkNDRW1haWxcbiAgICAgID8gdGhpcy5zZXRMaXN0KFxuICAgICAgICAgIHRoaXMub3ZlcnNlZXJzTGlzdCxcbiAgICAgICAgICBkYXRhLkNDRW1haWwuc3BsaXQoJywnKSxcbiAgICAgICAgICAnZW1wbG95ZWVfZW1haWwnXG4gICAgICAgIClcbiAgICAgIDogW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLkNDR3JvdXBFbWFpbCA9XG4gICAgICBkYXRhPy5jY191c2VyZ3JvdXBfaWRzPy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXRMaXN0KHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LCBkYXRhPy5jY191c2VyZ3JvdXBfaWRzLCAnX2lkJylcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgPSBkYXRhLmVuYWJsZVBvcnRhbCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnMgPSBkYXRhLmVuYWJsZVN1Z2dlc3Rpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlcXVpcmVzU2lnbmF0dXJlRm9yQXR0ZXN0YXRpb24gPSBkYXRhLmlzX3NpZ25hdHVyZV9yZXF1aXJlZFxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5yaXNrUmF0aW5nID0gZGF0YS5yaXNrX2NsYXNzID8gTnVtYmVyKGRhdGEucmlza19jbGFzcykgOiAxO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hc3NvY2lhdGVkRG9jdW1lbnRzID0gZGF0YS5hc3NvY2lhdGVkX2RvY3VtZW50c1xuICAgICAgPyB7XG4gICAgICAgICAgZm9ybWF0RmlsZXM6IGF0dGVzdGF0aW9uRmlsZXMsXG4gICAgICAgIH1cbiAgICAgIDogeyBmb3JtYXRGaWxlczogW10gfTtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSA9IGRhdGEuc3RhcnREYXRlXG4gICAgICA/IG1vbWVudChkYXRhLnN0YXJ0RGF0ZSlcbiAgICAgIDogbW9tZW50KCk7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmNoZWNrcG9pbnREZXRhaWxzID0gZGF0YS5jaGVja3BvaW50c1xuICAgICAgPyBkYXRhLmNoZWNrcG9pbnRzXG4gICAgICA6IFtdO1xuICAgIHRoaXMucG9saWN5Rm9ybS50b3RhbFF1ZXN0aW9uID0gZGF0YS50b3RhbF9tYXJrcyA/IGRhdGEudG90YWxfbWFya3MgOiAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wYXNzaW5nTWFya3MgPSBkYXRhLnBhc3NfbWFya3MgPyBkYXRhLnBhc3NfbWFya3MgOiAwO1xuICAgIHRoaXMucG9saWN5Rm9ybS5kb2N1bWVudHNBbmRMaW5rcyA9IGRhdGEuUmV2aWV3ZXJBdHRhY2htZW50c1xuICAgICAgPyB7XG4gICAgICAgICAgZm9ybWF0RmlsZXM6IHJldmlld2VyRmlsZXMsXG4gICAgICAgICAgZm9ybWF0TGlua3M6IGRhdGEuUmV2aWV3ZXJMaW5rcyxcbiAgICAgICAgfVxuICAgICAgOiB7IGZvcm1hdEZpbGVzOiBbXSwgZm9ybWF0TGlua3M6IFtdIH07XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZFJlc3BvbnNpYmlsaXR5Q2VudGVycyA9XG4gICAgICB0aGlzLnBvbGljeUZvcm0uc2VsZWN0ZWRSQ3MubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkUmV2aWV3ZXJzID0gZGF0YS5SZXZpZXdlck1lbWJlcklkID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRDaGVja3BvaW50cyA9XG4gICAgICB0aGlzLnBvbGljeUZvcm0uY2hlY2twb2ludERldGFpbHMubGVuZ3RoID4gMCA/IHRydWUgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzID1cbiAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgIHRoaXMucG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgdGhpcy5wb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPiAwIHx8XG4gICAgICB0aGlzLnBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRydWVcbiAgICAgICAgOiBmYWxzZTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYWRkQXNzb2NpYXRlZERvY3VtZW50cyA9XG4gICAgICBkYXRhLmFzc29jaWF0ZWRfZG9jdW1lbnRzLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5jY0VtYWlsT2JqSWRzID1cbiAgICAgIGRhdGE/LmNjX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDAgPyBkYXRhPy5jY191c2VyZ3JvdXBfaWRzIDogW107XG4gICAgdGhpcy5jY0ZhaWxHcm91cE9iaklkcyA9XG4gICAgICBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHM/Lmxlbmd0aCA+IDBcbiAgICAgICAgPyBkYXRhPy5jY19mYWlsX3VzZXJncm91cF9pZHNcbiAgICAgICAgOiBbXTtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IGRhdGE/LmFzc2Vzc21lbnQgPz8gW107XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFkZExpbmtBc3Nlc3NtZW50ID0gZGF0YT8uYXNzZXNzbWVudD8ubGVuZ3RoO1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRWZXJzaW9uID0gZGF0YT8ucG9saWN5X3ZlcnNpb24gPyB0cnVlIDogZmFsc2U7XG4gICAgLy8gdGhpcy5jaGVja0ZvckNyZWF0ZURvY3VtZW50cygpO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvbiA9IGRhdGEucG9saWN5X3ZlcnNpb247XG4gICAgdGhpcy5wb2xpY3lGb3JtLnByb2dyYW1TZWxlY3RlZFZhbHVlcy5wcm9ncmFtID1cbiAgICAgIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzICYmIGRhdGE/LnByb2dyYW1DYXREZXRhaWxzPy5sZW5ndGhcbiAgICAgICAgPyBkYXRhPy5wcm9ncmFtQ2F0RGV0YWlsc1swXVxuICAgICAgICA6IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbSA9XG4gICAgICBkYXRhPy5wcm9ncmFtQ2F0RGV0YWlscyAmJiBkYXRhPy5wcm9ncmFtQ2F0RGV0YWlscz8ubGVuZ3RoXG4gICAgICAgID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhPy5wcm9ncmFtQ2F0RGV0YWlsc1swXSkpXG4gICAgICAgIDoge307XG4gICAgdGhpcy5wb3B1bGF0ZU9wdGlvbmFsRmllbGRzKCk7XG4gICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgfVxuICBjaGFuZ2VOYW1lKGV2ZW50OiBzdHJpbmcpIHtcbiAgICBsZXQgdGV4dCA9IGV2ZW50O1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLzwoLio/KT4vZ2ksICcnKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHR5cGVTZWxlY3RlZChldmVudDogYm9vbGVhbikge1xuICAgIHRoaXMucG9saWN5Rm9ybS5hZGRSZXZpZXdlcnMgPSBldmVudDtcbiAgfVxuICBvblZlcnNpb24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IHJlZ2V4TWF0Y2ggPSBuZXcgUmVnRXhwKCdeW0EtWmEtejAtOVxcXFwuLV0qJCcpO1xuICAgIHRoaXMuaXNWZXJzaW9uVmFsaWQgPSByZWdleE1hdGNoLnRlc3QodGhpcy5wb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uKTtcbiAgICBpZiAoIXRoaXMuaXNWZXJzaW9uVmFsaWQpIHtcbiAgICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24/Lmxlbmd0aCA+IDIwKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbkVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgJ1lvdXIgaW5wdXQgaXMgaW52YWxpZC4gVGhlIHZlcnNpb24gZmllbGQgY2FuIG9ubHkgaW5jbHVkZSBudW1iZXJzLCBhbHBoYWJldHMsIGh5cGhlbiBvciBkb3RzLiBUaGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgaXMgMjAgY2hhcmFjdGVycy4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlzVmVyc2lvblZhbGlkICYmXG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X3ZlcnNpb24/Lmxlbmd0aCA+IDIwXG4gICAgKSB7XG4gICAgICB0aGlzLnZlcnNpb25FcnJvck1lc3NhZ2UgPVxuICAgICAgICAnWW91ciBpbnB1dCBpcyBpbnZhbGlkLiBUaGUgbWF4aW11bSBjaGFyYWN0ZXIgbGltaXQgaXMgMjAgY2hhcmFjdGVycy4nO1xuICAgIH1cbiAgfVxuXG4gIC8vdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSB3aGVuIHdlIGNsaWNrIG9uIGRpdiBzZWxlY3RcbiAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KGV2ZW50OiBib29sZWFuKSB7XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gZXZlbnQ7XG4gICAgdGhpcy5jcmVhdGVBcHByb3ZhbENsaWNrID0gZmFsc2U7XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgfVxuXG4gIGxpc3RDYW5jZWxDbGlja2VkKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcbiAgICAgIC8vIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RlZEFwcHJvdmFsV29ya2Zsb3coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IFtldmVudF07XG4gICAgdGhpcy5hcHByb3ZhbFdvcmtmbG93SWRzID0gZXZlbnQ/Ll9pZCA/IFtldmVudD8uX2lkXSA6IFtdO1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IGZhbHNlO1xuICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVycyA9IFtldmVudF07XG4gICAgdGhpcy5kaXNhYmxlU2VsZWN0b3IoKTtcbiAgfVxuXG4gIHVwZGF0ZWRQcm9ncmFtRGV0YWlscyhldmVudDogYW55KSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmxpbmtQcm9ncmFtID0gZXZlbnQ/LmxpbmtQcm9ncmFtO1xuICAgIHRoaXMucG9saWN5Rm9ybS5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMgPSBldmVudD8uc2VsZWN0ZWRWYWx1ZXM7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmJ1c2luZXNzQ3ljbGUgPSBldmVudD8uYnVzaW5lc3NDeWNsZTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgb25Bc3Nlc3NtZW50U2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0uYXNzZXNzbWVudCA9IFtldmVudF07XG4gIH1cbiAgZ2V0QXNzZXNzbWVudERldGFpbHMoYXNzZXNzbWVudERldGFpbHM6IGFueSwgdHlwZT86IHN0cmluZykge1xuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlXG4gICAgICAuZ2V0QXNzZXNzbWVudERldGFpbHNCeUlEKGFzc2Vzc21lbnREZXRhaWxzLmFzc2Vzc21lbnRfaWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgY2F0ZWdvcnlEZXRhaWxzID0gcmVzWzBdLmNhdGVnb3J5LmZpbmQoXG4gICAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5faWQgPT0gYXNzZXNzbWVudERldGFpbHMuY2F0ZWdvcnlfaWRcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5wb2xpY3lGb3JtLmFzc2Vzc21lbnQgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNhdGVnb3J5X2lkOiBhc3Nlc3NtZW50RGV0YWlscy5jYXRlZ29yeV9pZCxcbiAgICAgICAgICAgICAgYXNzZXNzbWVudF9pZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgICAgYXNzZXNzbWVudERldGFpbHM6IHtcbiAgICAgICAgICAgICAgICBpZDogYXNzZXNzbWVudERldGFpbHMuYXNzZXNzbWVudF9pZCxcbiAgICAgICAgICAgICAgICBhc3Nlc3NtZW50X25hbWU6IHJlc1swXS5hc3Nlc3NtZW50X25hbWUsXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25zOiByZXNbMF0ucXVlc3Rpb25zQ291bnQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNhdGVnb3J5X2RldGFpbHM6IGNhdGVnb3J5RGV0YWlscyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZXRPd25lcnNPbkxvYWQoKSB7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICB0aGlzLmFsbEFwcHJvdmVycyxcbiAgICAgIFt0aGlzLmF1dGhTZXJ2aWNlLmdldE1lbWJlcklkKCldLFxuICAgICAgJ21lbWJlcl9pZCdcbiAgICApO1xuICB9XG5cbiAgYXBwcm92YWxXb3JrZmxvd0FQSUNhbGwoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3Qgb2JqZWN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICAgIHRoaXMucG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXMsXG4gICAgICAgICdfaWQnXG4gICAgICApO1xuICAgICAgdGhpcy5nZXRBcHByb3ZlcldvcmtGbG93KG9iamVjdElkcyk7XG4gICAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnZlcnRBcHByb3ZhbFdvcmtmbG93KGFwcHJvdmVyTGlzdDogYW55KSB7XG4gICAgbGV0IHJldHVybkpzb246IGFueSA9IHt9O1xuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYXBwcm92ZXJMaXN0KSk7XG4gICAgbW9kaWZpZWREYXRhPy5mb3JFYWNoKCh3b3JrZmxvdzogYW55KSA9PiB7XG4gICAgICB3b3JrZmxvdz8uYXBwcm92YWxfd29ya2Zsb3c/LmZvckVhY2goKGFwcHJvdmVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbGV0IGkgPSBpbmRleCArIDE7XG4gICAgICAgIHJldHVybkpzb25bJ2xldmVsJyArIGldID0gYXBwcm92ZXI7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmV0dXJuSnNvbjtcbiAgfVxuXG4gIGRlbGV0ZUxldmVsKGluZGV4OiBhbnkpIHtcbiAgICAvLyBBcHByb3ZlciBMZXZlbCBkZWxldGVcbiAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93LnNwbGljZShpbmRleCwgMSk7XG4gICAgZm9yIChcbiAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICBpIDwgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdPy5hcHByb3ZhbF93b3JrZmxvdy5sZW5ndGg7XG4gICAgICBpKytcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WzBdLmFwcHJvdmFsX3dvcmtmbG93W2luZGV4XVsnbGV2ZWwxJ10gPT09XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXT8uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdWydhbGlhc19uYW1lJ11cbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkV29ya2Zsb3dbMF0uYXBwcm92YWxfd29ya2Zsb3dbaW5kZXhdW1xuICAgICAgICAgICdhbGlhc19uYW1lJ1xuICAgICAgICBdID0gYExldmVsICR7aSArIDF9YDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvd1swXS5hcHByb3ZhbF93b3JrZmxvd1tpbmRleF1bJ2xldmVsMSddID0gYExldmVsICR7XG4gICAgICAgIGkgKyAxXG4gICAgICB9YDtcbiAgICB9XG4gIH1cblxuICBlZGl0V29ya2Zsb3coZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0QXBwcm92YWxXb3JrZmxvdyA9IGV2ZW50O1xuICAgIHRoaXMuY3JlYXRlQXBwcm92YWxDbGljayA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gIH1cblxuICAvL0Z1bmN0aW9uIHJlc3BvbnNpYmxlIHdoZW4gd2UgY2xpY2sgb24gQ1JFQVRFIEEgTkVXIEFQUFJPVkFMIFdPUktGTE9XXG4gIGNyZWF0ZUFwcHJvdmFsV29ya2Zsb3coKSB7XG4gICAgdGhpcy5lbmFibGVBcHByb3ZhbFdvcmtmbG93ID0gdHJ1ZTtcbiAgICB0aGlzLmNyZWF0ZUFwcHJvdmFsQ2xpY2sgPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmVuYWJsZUFwcHJvdmFsV29ya2Zsb3cgPSBmYWxzZTtcbiAgICB0aGlzLmRpc2FibGVTZWxlY3RvcigpO1xuICB9XG5cbiAgZWRpdExldmVsQ2xpY2tlZChlZGl0TGV2ZWw6IGFueSwgaW5kZXg6IGFueSkge1xuICAgIHRoaXMuZW5hYmxlQXBwcm92YWxXb3JrZmxvdyA9IHRydWU7XG4gICAgdGhpcy5lZGl0V29ya2Zsb3dMZXZlbCA9IHtcbiAgICAgIGVkaXRMZXZlbDogZWRpdExldmVsLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgIH07XG4gICAgdGhpcy5hY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgfVxuXG4gIHNldEFjY2Vzc0ZpZWxkKGV2ZW50OiBudW1iZXIpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50ID09IDApIHtcbiAgICAgIC8vIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IHRoaXMudXNlcnNBY2Nlc3NMaXN0O1xuICAgICAgdGhpcy5zYXZlU2VsZWN0ZWRMaXN0KCdwb2xpY3lBY2Nlc3MnLCB7XG4gICAgICAgIHVzZXJzOiB0aGlzLnVzZXJzQWNjZXNzTGlzdCxcbiAgICAgICAgZ3JvdXBzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJzQWNjZXNzTGlzdEJ5Q2F0ZWdvcnkoY2F0ZWdvcnlEZXRhaWxzOiBhbnkpIHtcbiAgICBsZXQgdW5pcXVlVXNlcnM6IGFueSA9IFtdO1xuICAgIGxldCB1bmlxdWVHcm91cHNJZDogYW55ID0gW107XG4gICAgdW5pcXVlVXNlcnMgPSB1bmlxQnkoXG4gICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9tYW5hZ2Vycz8uY29uY2F0KFxuICAgICAgICBjYXRlZ29yeURldGFpbHM/LmFsbF9hcHByb3ZlcnMsXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYWxsX2F1dGhvcnNcbiAgICAgICksXG4gICAgICAnbWVtYmVyX2lkJ1xuICAgICk7XG4gICAgdGhpcy51c2Vyc0FjY2Vzc0xpc3QgPSB1bmlxdWVVc2VycztcbiAgICB0aGlzLnVzZXJzQWNjZXNzTGlzdElkcyA9IHRoaXMucmV0dXJuSWRzKHRoaXMudXNlcnNBY2Nlc3NMaXN0LCAnbWVtYmVyX2lkJyk7XG5cbiAgICB1bmlxdWVHcm91cHNJZCA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIGNhdGVnb3J5RGV0YWlscz8uYXV0aG9yX3VzZXJncm91cF9pZHM/LmNvbmNhdChcbiAgICAgICAgICBjYXRlZ29yeURldGFpbHM/Lm93bmVyX3VzZXJncm91cF9pZHNcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBdO1xuICAgIHRoaXMuZ3JvdXBzQWNjZXNzTGlzdCA9IHRoaXMuc2V0TGlzdChcbiAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgdW5pcXVlR3JvdXBzSWQsXG4gICAgICAnX2lkJ1xuICAgICk7XG4gICAgdGhpcy5ncm91cHNBY2Nlc3NMaXN0SWRzID0gdGhpcy5yZXR1cm5JZHMoXG4gICAgICB0aGlzLmdyb3Vwc0FjY2Vzc0xpc3QsXG4gICAgICAnZ3JvdXBfaWQnXG4gICAgKTtcbiAgfVxuXG4gIHBvcHVsYXRlUG9saWN5QWNjZXNzRGV0YWlscyhwb2xpY3lEZXRhaWxzOiBhbnkpIHtcbiAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gcG9saWN5RGV0YWlscz8ucG9saWN5X2FjY2Vzc190eXBlO1xuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19vd25lcnMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMudXNlcnNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX293bmVycyxcbiAgICAgICAgJ21lbWJlcl9pZCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc19ncm91cHMgPSB0aGlzLnNldExpc3QoXG4gICAgICAgIHRoaXMub3ZlcnNlZXJHcm91cHNMaXN0LFxuICAgICAgICBwb2xpY3lEZXRhaWxzPy5wb2xpY3lfYWNjZXNzX2dyb3VwcyxcbiAgICAgICAgJ19pZCdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXRQb2xpY3lBY2Nlc3NEZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLnBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID09IDApIHtcbiAgICAgIHRoaXMucG9saWN5Rm9ybS5wb2xpY3lfYWNjZXNzX293bmVycyA9IFtdO1xuICAgICAgdGhpcy5wb2xpY3lGb3JtLnBvbGljeV9hY2Nlc3NfZ3JvdXBzID0gW107XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRnJlcXVlbmN5KCkge1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfZGV0YWlscyA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5mcmVxdWVuY3lfdGV4dCA9ICcnO1xuICAgIHRoaXMucG9saWN5Rm9ybS5tYXJrX2ZhaWxlZF9hZnRlciA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLnJlbWluZF9kYXlzX2JlZm9yZV9kdWVfZGF0ZSA9IDA7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmZhaWxlZF90aW1lID0gJyc7XG4gICAgdGhpcy5wb2xpY3lGb3JtLmFzc2lnbmVlX3N0YXJ0X2RhdGUgPSAnJztcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMucGF0dGVybiA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5mYWlsZWRUaW1lID0gJyc7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLndpbmRvdyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmZhaWxlZCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmxpZmVjeWNsZSA9ICcnO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zdGFydERhdGUgPSAwO1xuICAgIHRoaXMuZnJlcXVlbmN5RGV0YWlscy5zZWxlY3RlZFJlcG9ydCA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lEZXRhaWxzLmRhdGVPZk1vZGlmaWVkID0gMDtcbiAgICB0aGlzLmZyZXF1ZW5jeURldGFpbHMuY29udGludW91c19mYWlsZWRfZGF5cyA9IDA7XG4gICAgdGhpcy5mcmVxdWVuY3lQbGFjZWhvbGRlciA9XG4gICAgICAnSG93IG9mdGVuIGRvZXMgdGhpcyBwb2xpY3kgbmVlZCB0byBiZSBhdHRlc3RlZD8nO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBkb2N1bWVudENsaWNrKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRlUGlja2VyT2JqZWN0ID0ge1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgY2xhc3M6ICdlZmZlY3RpdmUtZGF0ZScsXG4gICAgICBwb3B1cDogdGhpcy5kYXRlUGlja2VyUG9wVXAsXG4gICAgICBjb21wb25lbnQ6IHRoaXMuZGF0ZVBpY2tlcixcbiAgICAgIG92ZXJsYXk6IHRoaXMuZGF0ZVBpY2tlck92ZXJsYXksXG4gICAgfTtcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuaGFuZGxlRG9jdW1lbnRDbGljayhkYXRlUGlja2VyT2JqZWN0KTtcbiAgfVxuXG4gIG9uVGVtcGxhdGVTZWxlY3QoZXZlbnQ6IGFueSwgaXNQcmVzZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGV2ZW50Py5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNUZW1wbGF0ZUNsb3NlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50ZW1wbGF0ZVZpZXcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKTtcblxuICAgIGNvbnN0IHVuYW1lID0gdGhpcy51c2VySW5mbyA/IHRoaXMudXNlckluZm8ubmFtZSA6ICcnO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMubWVtYmVyX29ial9pZDtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5wb2xpY3lGb3JtLnBvbGljeU5hbWUudHJpbSgpO1xuICAgIGNvbnN0IGlkID0gdGhpcy5wb2xpY3lJZDtcbiAgICB0aGlzLnRlbXBsYXRlSWQgPSBldmVudFswXT8uX2lkO1xuICAgIHRoaXMucG9saWN5U2VydmljZVxuICAgICAgLnNhdmVQb2xpY3lEZXRhaWxzKHVuYW1lLCB1aWQsIGlkLCBuYW1lLCAnJywgMClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnRlbXBsYXRlVmlldyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNldE5hdmlnYXRpb25VcmwoKTtcbiAgICAgICAgaWYgKGlzUHJlc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9UZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNldE5hdmlnYXRpb25VcmwoKSB7XG4gICAgY29uc3QgYmFzVXJsID1cbiAgICAgIHRoaXMuYmFzZVVSTCArXG4gICAgICAnL2FsbC9wb2xpY3kvZWRpdC1wb2xpY3k/aWQ9JyArXG4gICAgICB0aGlzLnBvbGljeUlkICtcbiAgICAgICcmdGVtcGxhdGVJZD0nICtcbiAgICAgIHRoaXMudGVtcGxhdGVJZDtcbiAgICB0aGlzLnRlbXBsYXRlVXJsID0gYmFzVXJsO1xuICB9XG5cbiAgbmF2aWdhdGVUb1RlbXBsYXRlKCkge1xuICAgIHRoaXMuaWZyYW1lU2VydmljZS5yZWRpcmVjdElmSW5JZnJhbWUodGhpcy50ZW1wbGF0ZVVybCwgdHJ1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gPHA+d29ya2Zsb3ctcG9saWN5IHdvcmtzITwvcD4gLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctcG9saWN5XCI+XG4gICAgPCEtLSBQb2xpY3kgTmFtZSAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeU5hbWVcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aGF0LnN2Z1wiXG4gICAgICAgICAgYWx0PVwibmFtZVwiXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucG9saWN5TmFtZSB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ25hbWUnXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5wb2xpY3lOYW1lICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlxuICAgICAgICAgICAgUG9saWN5IE5hbWUgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cImFjdGl2ZVNlbGVjdG9yID0gJ25hbWUnXCJcbiAgICAgICAgICAgIChmb2N1c2luKT1cImFjdGl2YXRlU2VsZWN0b3IoJ25hbWUnLCB0cnVlKVwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5TmFtZSA9PSAnJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ25hbWUnXCJcbiAgICAgICAgICAgIChmb2N1c291dCk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgZmFsc2UpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUgPSBjaGFuZ2VOYW1lKCRldmVudClcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIHRoaXMgcG9saWN5XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeU5hbWUubGVuZ3RoICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+e3sgcG9saWN5Rm9ybS5wb2xpY3lOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCduYW1lJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cInN1Ym1pdHRlZCAmJiAhcG9saWN5Rm9ybS5wb2xpY3lOYW1lLnRyaW0oKVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBQbGVhc2UgZW50ZXIgYSBuYW1lIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPHZjb21wbHktZWRpdG9yXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBvbGljeUZvcm0ucG9saWN5Tm90ZXNcIlxuICAgICAgICAgICAgW2VkaXRvckNvbmZpZ109XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgPjwvdmNvbXBseS1lZGl0b3I+XG4gICAgICAgICAgPCEtLSA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgWyhuZ1ZhbHVlKV09XCJwb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICAgIChuZ1ZhbHVlQ2hhbmdlKT1cImF2YWlsYWJpbGl0eU9uUG9ydGFsKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIERvIHlvdSB3YW50IHRoaXMgcG9saWN5IHRvIGJlIGF2YWlsYWJsZSBvbiB0aGUgcG9ydGFsP1xuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICdUaGUgcG9saWNpZXMgdGhhdCB5b3UgaW50ZW5kIHRvIG1ha2UgYWNjZXNzaWJsZSB0byB0aGUgZW50aXJlIG9yZ2FuaXphdGlvbiBjYW4gYmUgYWRkZWQgdG8gdGhlIHBvbGljeSBwb3J0YWwuIEl0IGlzIGxpa2UgYSBzaGFyZWQgY2F0YWxvZyBvZiBhbGwgYWN0aXZlICYgdXBkYXRlZCBwb2xpY2llcyB0aGF0IGFueSBsb2dnZWQgaW4gdXNlciBjYW4gcmVhZC9kb3dubG9hZCBmb3IgcmVmZXJlbmNlLidcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgdHlwZT1cIndoaXRlXCJcbiAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID4mI3hlOTMyOzwvaVxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvYXBwLWNzLXN3aXRjaD5cbiAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5hY2NlcHRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQWNjZXB0IHN1Z2dlc3Rpb25zXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MzI7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoPiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUG9saWN5IENhdGVnb3J5IC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NhdGVnb3J5J1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2F0ZWdvcnknICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9jYXRlZ29yeS5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2F0ZWdvcnknXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxuICAgICAgICAgICAgPlBvbGljeSBDYXRlZ29yeSA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPT0gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NhdGVnb3J5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBhIGNhdGVnb3J5IGZvciB0aGlzIHBvbGljeS5cIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgbGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMCwgMSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JywgY2F0ZWdvcnkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY2F0ZWdvcnkuaXRlbV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNhdGVnb3J5Lml0ZW1fbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhdGVnb3J5LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIiBbY2xhc3MubW9yZS1vbmVdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGg+MVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5wbHVzXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoPjJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCIgKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8uc2xpY2UoMCwyKVwiPjxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JyxjYXRlZ29yeSlcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2F0ZWdvcnkuaXRlbV9uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb3VudFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGggPiAyXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyIChjbGljayk9XCJjYXRlZ29yeS5wb3BvdmVyKClcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPitcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5zbGljZSgyKS5sZW5ndGh9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ2NhdGVnb3J5J1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2F0ZWdvcnknLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNjYXRlZ29yeSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcnkgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NhdGVnb3J5JywgY2F0ZWdvcnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjYXRlZ29yeS5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmIHBvbGljeUZvcm0/LnNlbGVjdGVkQ2F0ZWdvcmllcz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB0aGUgY2F0ZWdvcnkgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIiAqbmdJZj1cInBvbGljeUZvcm0/LmN1c3RvbVRhZ3M/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0YWcgb2YgcG9saWN5Rm9ybT8uY3VzdG9tVGFnc1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+e3sgdGFnLnRhZ25hbWUgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWcudmFsdWVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHRhZy50YWduYW1lIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVmZmVjdGl2ZSBEYXRlIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImFjdGl2ZVNlbGVjdG9yICYmIGFjdGl2ZVNlbGVjdG9yICE9PSAnbmFtZSdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwiZmFsc2VcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aGVuLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+RWZmZWN0aXZlIERhdGU8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXRpbWUtcGlja2VyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2VyLWdyb3VwXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHRoZSBlZmZlY3RpdmUgZGF0ZSBvZiB0aGUgcG9saWN5LlwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInBvbGljeUZvcm0ucG9saWN5RHVlRGF0ZSB8IGRhdGUgOiAnZGQgTU1NIHl5eXknXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgaWQ9XCJlZmZlY3RpdmUtZGF0ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTJkOzwvaT5cbiAgICAgICAgICAgICAgPGRwLWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgICAgI2RhdGVQaWNrZXJcbiAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwiZGF0ZVBpY2tlck92ZXJsYXkgPSBmYWxzZTsgY2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtjb25maWddPVwiZGF0ZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZHAtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LW92ZXJsYXlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbG9zZURhdGVQaWNrZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRlUGlja2VyT3ZlcmxheVwiXG4gICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBQb2xpY3kgT3duZXIgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnb3duZXJzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9pbS1jcmVhdGluZy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UE9MSUNZIE9XTkVSKFMpPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtLnBvbGljeV9vd25lcnM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3duZXJzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNlbGVjdCBvd25lcnMgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0ucG9saWN5X293bmVycz8ubGVuZ3RoXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ293bmVycycsIHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnNbMF0sIDApXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXT8ubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8ucG9saWN5X293bmVyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvbGljeVVzZXJQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICArIHt7IHBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0xIHZ4LW1yLTFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+U2FtYW50aGEgSm9uZXM8L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb2xpY3lHcm91cFBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICArNFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lVc2VyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvd25lciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJvd25lcj8ubWVtYmVyX25hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdvd25lcnMnLCBvd25lciwgaSArIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvd25lcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjcG9saWN5R3JvdXBQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgZGF0YSBvZiBbMSwgMSwgMSwgMSwgMSwgMSwgMV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInSGFyc2h2YXJkaGFuIEthcml3YWxhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEhhcnNodmFyZGhhbiBLYXJpd2FsYVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3Rvcignb3duZXJzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwic3VibWl0dGVkICYmICFwb2xpY3lGb3JtPy5wb2xpY3lfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IG93bmVycyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXZpZXcgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyJyB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1xuICAgICAgXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yZXZpZXdlci5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYWRkUmV2aWV3ZXJzXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5SRVZJRVc8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwicmV2aWV3U2VsZWN0aW9uIHZ4LXAtMyB2eC1wYi0wXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1iLTFcIj5cbiAgICAgICAgICAgICAgRG9lcyB0aGlzIHBvbGljeSBuZWVkIHRvIGJlIHJldmlld2VkP1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgIG5hbWU9XCJyZXZpZXctdHlwZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiXG4gICAgICAgICAgICAgIChjaGVja2VkRXZlbnQpPVwidHlwZVNlbGVjdGVkKHRydWUpXCJcbiAgICAgICAgICAgICAgPjxkaXYgY2xhc3M9XCJ2eC1mcy0xMSB2eC1mdy01MDAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0zXCI+XG4gICAgICAgICAgICAgICAgWUVTXG4gICAgICAgICAgICAgIDwvZGl2PjwvYXBwLWNzLXJhZGlvXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YXBwLWNzLXJhZGlvXG4gICAgICAgICAgICAgIG5hbWU9XCJyZXZpZXctdHlwZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiFwb2xpY3lGb3JtPy5hZGRSZXZpZXdlcnNcIlxuICAgICAgICAgICAgICAoY2hlY2tlZEV2ZW50KT1cInR5cGVTZWxlY3RlZChmYWxzZSlcIlxuICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTUwMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTNcIj5cbiAgICAgICAgICAgICAgICBOT1xuICAgICAgICAgICAgICA8L2Rpdj48L2FwcC1jcy1yYWRpb1xuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvbGljeUZvcm0/LmFkZFJldmlld2Vyc1wiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCI+UkVWSUVXRVI8L2xhYmVsPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFNlbGVjdCB0aGUgcGVyc29uIHJlc3BvbnNpYmxlIGZvciByZXZpZXdpbmcgdGhpcyBwb2xpY3lcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyJyAmJlxuICAgICAgICAgICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmV2aWV3ZXIgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3Jldmlld2VyJywgcmV2aWV3ZXIpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiJ1NhbWFudGhhIEpvbmVzJ1wiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyByZXZpZXdlcj8ubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXInXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmV2aWV3ZXInLCB0cnVlKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0zXCI+UkVWSUVXIEZSRVFVRU5DWTwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzID09ICcnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncmV2aWV3ZXJGcmVxdWVuY3knICYmXG4gICAgICAgICAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgV2hlbiBkb2VzIHRoaXMgcG9saWN5IG5lZWRzIHRvIGJlIHJldmlld2VkP1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2VcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHMgIT0gJydcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcbiAgICAgICAgICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFRleHQgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicmV2aWV3ZXJGcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyByZXZpZXdlckZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciAhPT0gJ3Jldmlld2VyRnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICFwb2xpY3lGb3JtPy5yZXZpZXdfZnJlcXVlbmN5X2RldGFpbHNcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2VsZWN0IHRoZSByZXZpZXcgc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBOZXcgQXBwcm92YWwgV29ya2Zsb3cgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycydcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9hcHByb3ZhbC5zdmdcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2FwcHJvdmVycydcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCIgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiXG4gICAgICAgICAgICAgID5BUFBST1ZBTCA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICBjcmVhdGVBcHByb3ZhbFdvcmtmbG93KCk7IGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNyZWF0ZU5ld0J0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBDUkVBVEUgQSBORVcgQVBQUk9WQUwgV09SS0ZMT1dcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgICAhc2VsZWN0ZWRXb3JrZmxvd1swXT8ud29ya2Zsb3dfbmFtZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgY2xpY2tBcHByb3ZhbFdvcmtmbG93KHRydWUpOyBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhcG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzPy5sZW5ndGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIGFwcHJvdmFsIHdvcmtmbG93IGZvciB0aGlzIHBvbGljeVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRXb3JrZmxvdz8ubGVuZ3RoID4gMCAmJiBzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1tYi0yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtbXQtMiB2eC1tYi0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZVdvcmtmbG93KClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJzZWxlY3RlZFdvcmtmbG93WzBdPy53b3JrZmxvd19uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHNlbGVjdGVkV29ya2Zsb3dbMF0/LndvcmtmbG93X25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRXb3JrZmxvdyhzZWxlY3RlZFdvcmtmbG93WzBdKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkV29ya2Zsb3c/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGFwcHJvdmFsIG9mIHNlbGVjdGVkV29ya2Zsb3dbMF0/LmFwcHJvdmFsX3dvcmtmbG93O1xuICAgICAgICAgICAgICAgIGxldCBhcHByb3ZhbEluZGV4ID0gaW5kZXhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlbiB2eC1tYi0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGV2ZWwtbGVmdCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsZXZlbC1uYW1lIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXBhcmFncmFwaC10eHQgdngtdHQtdXBwZXJjYXNlIHZ4LWxoLTNcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFsaWFzX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcHByb3ZhbD8uYWxpYXNfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy5sZXZlbDFcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hbGlhc19uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gYXBwcm92YWw/LmFsaWFzX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHByb3ZhbD8ubGV2ZWwxXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTkgdngtZnctNTAwIHZ4LWxhYmVsLXR4dCB2eC10dC11cHBlcmNhc2UgdngtbGgtM1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LnR5cGUgPT09IFwiUk9VTkRST0JJTlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJST1VORC1ST0JJTlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwcm92YWw/LnR5cGUgPT09IFwiQU5ZT05FXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkFOWSBPTkVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsPy50eXBlXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTIgdngtbWwtMlwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPCEtLSA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgPiAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnICYmXG4gICAgICAgICAgICAgICAgICAgICAgYXBwcm92YWw/LmFwcHJvdmVycz8ubGVuZ3RoIDwgMlxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyAxID09IGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA/IFwiRmluYWxcIiA6IDEgfX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8udHlwZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3NlcXVlbnRpYWwnXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya2Zsb3dMYXZlbCB2eC1mcy0xMSB2eC1mdy01MDAgdngtcGwtMSB2eC1wci0xIHZ4LWxoLTQgdngtbXItMSB2eC10ZXh0LWNlbnRlclwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJhcHByb3ZhbD8uYXBwcm92ZXJzWzBdPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+e3sgYXBwcm92YWw/LmFwcHJvdmVyc1swXT8ubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwid29ya2Zsb3dQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgK3t7IGFwcHJvdmFsPy5hcHByb3ZlcnM/Lmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxhcHAtcG9wb3ZlciAjd29ya2Zsb3dQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcHByb3ZlciBvZiBhcHByb3ZhbD8uYXBwcm92ZXJzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXBwcm92YWxJbmRleCA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImFwcHJvdmVyPy5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsPy50eXBlPy50b0xvd2VyQ2FzZSgpID09PSAnc2VxdWVudGlhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtmbG93TGF2ZWwgdngtZnMtMTEgdngtZnctNTAwIHZ4LXBsLTEgdngtcHItMSB2eC1saC00IHZ4LW1yLTEgdngtdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcHJvdmFsSW5kZXggKyAxID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ZhbD8uYXBwcm92ZXJzPy5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcIkZpbmFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFwcHJvdmFsSW5kZXggKyAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHByb3Zlcj8ubWVtYmVyX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJlZGl0TGV2ZWxDbGlja2VkKGFwcHJvdmFsLGFwcHJvdmFsSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkZWxldGVMZXZlbChhcHByb3ZhbEluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZUJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtbWwtNCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOWFlOzwvaT4gREVMRVRFXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZhbF93b3JrZmxvdz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAgICFwb2xpY3lBcHByb3ZhbEZsYWcgJiZcbiAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBvciBjcmVhdGUgYW4gYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUG9saWN5IEFjY2VzcyAtLT5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInRydWVcIlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncG9saWN5QWNjZXNzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAncG9saWN5QWNjZXNzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJ0cnVlXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIXBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggJiZcbiAgICAgICAgICAgICFwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoICYmXG4gICAgICAgICAgICAhcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9sb2NrLXNjb3BlLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzPy5sZW5ndGggfHxcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlBPTElDWSBQT1JUQUwgQUNDRVNTPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uYXZhaWxhYmxlT25Qb3J0YWxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncG9saWN5QWNjZXNzJywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIiFwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFdobyBzaG91bGQgYmUgYWJsZSB0byB2aWV3IHRoaXMgcG9saWN5P1xuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTNcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcz8ubGVuZ3RoXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuIHZ4LW10LTIgdngtbWItMlwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9saWN5QWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNbMF0/LmVtcGxveWVlX25hbWVcbiAgICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwb2xpY3lBY2Nlc3NQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnMubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dCB2eC1tbC0yIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3Nfb3duZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYWNjZXNzR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1swXT8uZ3JvdXBfbmFtZVxuICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY2Nlc3NHcm91cC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfZ3JvdXBzLmxlbmd0aCAtIDEgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBY2Nlc3NQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXNlciBvZiBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ1c2VyPy5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ3BvbGljeUFjY2VzcycsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB1c2VyPy5lbXBsb3llZV9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNhY2Nlc3NHcm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc190eXBlID09PSAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnYWNjZXNzR3JvdXAnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YT8uZ3JvdXBfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cInZ4LW10LTQgdngtbWItMlwiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cIidwb2xpY3lGb3JtQWNjZXNzVHlwZSdcIiBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGUgPT09IDBcIiAoY2hlY2tlZEV2ZW50KT1cInNldEFjY2Vzc0ZpZWxkKDApXCJcbiAgICAgICAgICAgICAgICAgID48ZGl2IGNsYXNzPVwidngtZnMtMTIgdngtcGFyYWdyYXBoLXR4dFwiPlxuICAgICAgICAgICAgICAgICAgICBFdmVyeW9uZSB3aG8gaGFzIGFjY2VzcyB0byB0aGlzIFBvbGljeSBDYXRlZ29yeVxuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFwcC1jcy1yYWRpb1xuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiJ3BvbGljeUZvcm1BY2Nlc3NUeXBlJ1wiIFtjaGVja2VkXT1cInBvbGljeUZvcm0/LnBvbGljeV9hY2Nlc3NfdHlwZSA9PT0gMVwiIChjaGVja2VkRXZlbnQpPVwic2V0QWNjZXNzRmllbGQoMSlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidngtbXQtMVwiXG4gICAgICAgICAgICAgICAgICA+PGRpdiBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IHVzZXJzL2dyb3Vwc1xuICAgICAgICAgICAgICAgICAgPC9kaXY+PC9hcHAtY3MtcmFkaW9cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmF2YWlsYWJsZU9uUG9ydGFsXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIlxuICAgICAgICAgICAgICA+VmlzaWJsZSB0byBBbGwgQ3VycmVudCAmIEZ1dHVyZSBVc2Vyczwvc3BhblxuICAgICAgICAgICAgPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdwb2xpY3lBY2Nlc3MnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdCB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHBvbGljeUZvcm0uYXZhaWxhYmxlT25Qb3J0YWwgfHxcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX293bmVycz8ubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19ncm91cHM/Lmxlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0uYWNjZXB0U3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgICA+QUNDRVBUIFNVR0dFU1RJT05TXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHVzZXJzIGNhbiBwcm92aWRlIGltcHJvdmVtZW50IHN1Z2dlc3Rpb25zIHRvIHRoZSBwb2xpY2llcyB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlIFBvbGljeSBQb3J0YWwuJ1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgID5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXR0ZXN0YXRpb25zIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJmYWxzZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgKm5nSWY9XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJmYWxzZVwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2F0dGVzdGF0aW9ucy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiZmFsc2VcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+QVRURVNUQVRJT05TPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgdGhlIHBlcnNvbnMgcmVxdWlyZWQgdG8gYXR0ZXN0IHRvIHRoaXMgUG9saWN5XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIidTYW1hbnRoYSBKb25lcydcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5TYW1hbnRoYSBKb25lczwvc3BhblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicG9saWN5QXR0ZXN0YXRpb25Qb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICArNFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyICNwb2xpY3lBdHRlc3RhdGlvblBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCInSGFyc2h2YXJkaGFuIEthcml3YWxhJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICBIYXJzaHZhcmRoYW4gS2FyaXdhbGFcbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1tdC0yXCI+XG4gICAgICAgICAgICA8YXBwLWNzLXN3aXRjaFxuICAgICAgICAgICAgICA+UkVRVUlSRVMgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyB2eC1mcy0xMiB2eC10eHQtYmx1ZSB2eC1tbC0xIHZ4LW1yLTJcIlxuICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgJ1JlcXVpcmVzIGUtc2lnbmF0dXJlIGZvciBhdHRlc3RhdGlvbiBpbmZvIHRleHQgaGVyZS4uLidcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgID4mI3hlOTFmOzwvaVxuICAgICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsIHZ4LW10LTJcIj5XSEVOPzwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCdXR0b24gdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0QnV0dG9uUGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBXaGF0IGlzIHRoZSBhdHRlc3RhdGlvbiBzY2hlZHVsZSBmb3IgdGhpczxiciAvPnBvbGljeT9cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2VcIj5cbiAgICAgICAgICAgICAgU0VUIEEgRlJFUVVFTkNZXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hUZXh0IHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHRcIj5cbiAgICAgICAgICAgICAgRXZlcnkgV2VkbmVzZGF5IGJ5IDExOjU5IHBtXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0QnRuIHZ4LWZzLTExIHZ4LWZ3LTYwMCB2eC10eHQtYmx1ZSB2eC10dC11cHBlcmNhc2UgdngtcC0wIHZ4LW0tMCB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29ucyB2eC1tci0xXCI+JiN4ZTkwYzs8L2k+IEVESVRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbCB2eC1tdC0yXCJcbiAgICAgICAgICAgID5BU1NFU1NNRU5UIE9GIFVOREVSU1RBTkRJTkc8L2xhYmVsXG4gICAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94RW5hYmxlIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdEJveFBsYWNlaG9kZXIgdngtZnMtMTMgdngtcGFyYWdyYXBoLXR4dCB2eC1saC00XCI+XG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTMgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPjUgUXVlc3Rpb25zPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQXBwcm92YWwgV29ya2Zsb3cgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICAqbmdJZj1cImZhbHNlXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhcHByb3ZlcnMnXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhcHByb3ZlcnMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibGVmdFwiXG4gICAgICAgIFtjbGFzcy5jaGVja2VkXT1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgID5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVycz8ubGVuZ3RoID09IDAgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2FwcHJvdmFsLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXBwcm92ZXJzJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwidngtZm9ybS1ncm91cCBhcHByb3ZhbC13b3JrZmxvd1wiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInBvbGljeUFwcHJvdmFsRmxhZyAhPT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgICBBcHByb3ZhbCB3b3JrZmxvdyA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUpO1xuICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHdvcmtmbG93VHlwZSA9ICdTRVFVRU5USUFMJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvblwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIENyZWF0ZSBhIG5ldyBBcHByb3ZhbCBXb3JrZmxvd1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdFwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYXBwcm92ZXJXb3JrRmxvd0xpc3Q/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXBwcm92ZXJzLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxjcy1zZWxlY3RcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93XCJcbiAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRXb3JrZmxvd0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgYXBwcm92YWwgd29ya2Zsb3cgZm9yIHRoaXMgcG9saWN5J1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJzZWxlY3RlZEFwcHJvdmFsV29ya2Zsb3dcIlxuICAgICAgICAgICAgICBbc2V0TWF4V2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjcy1vcHRpb25cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBhcHByb3ZlcldvcmtGbG93TGlzdFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZGF0YS53b3JrZmxvd19uYW1lIH19XG4gICAgICAgICAgICAgIDwvY3Mtb3B0aW9uPlxuICAgICAgICAgICAgICA8Y3Mtb3B0aW9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIi0xXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICBhY3RpdmF0ZVNlbGVjdG9yKCdhcHByb3ZlcnMnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIGFkZE1vcmVMZXZlbHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+Q3JlYXRlIGEgbmV3IGFwcHJvdmFsIHdvcmtmbG93PC9jcy1vcHRpb25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9jcy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFwcHJvdmVyc1swXT8uYXBwcm92ZXJzPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid29ya2Zsb3ctbGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRpdGxlXCI+TGV2ZWwge3sgaSArIDEgfX08L3A+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJkZXNjcmlwdGlvblwiPnt7IGxldmVsLm5hbWUgfX08L3A+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGxldmVsLmFwcHJvdmVycy5zbGljZSgwLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnYXBwcm92ZXJzJywgYXBwcm92ZXIsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ZXBcIiAqbmdJZj1cImxldmVsLm5hbWUgPT0gJ1NFUVVFTlRJQUwnXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBqICsgMVxuICAgICAgICAgICAgICAgICAgICB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+e3sgYXBwcm92ZXIubWVtYmVyX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgID5cblxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsZXZlbC5hcHByb3ZlcnM/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibGFiZWxOYW1lLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICArXG5cbiAgICAgICAgICAgICAgICAgICAge3sgbGV2ZWwuYXBwcm92ZXJzLnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YXBwLXBvcG92ZXIgI2xhYmVsTmFtZSBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFwcHJvdmVyIG9mIGxldmVsLmFwcHJvdmVycyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdhcHByb3ZlcnMnLCBhcHByb3ZlciwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3RlcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwibGV2ZWwubmFtZSA9PSAnU0VRVUVOVElBTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPT0gbGV2ZWwuYXBwcm92ZXJzLnNsaWNlKDEpLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJGaW5hbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGogKyAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhcHByb3Zlci5tZW1iZXJfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlU2VsZWN0b3IoJ2FwcHJvdmVycycsIHRydWUsIGxldmVsLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBhcHByb3ZlcnNMaXN0SW5kZXggPSBpXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbG9zZS1idG5cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnd29ya2Zsb3dMZXZlbCcsIGxldmVsLCBpKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MGQ7PC9pPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uc2VsZWN0ZWRBcHByb3ZlcnM/Lmxlbmd0aCAmJlxuICAgICAgICAgICAgICAhcG9saWN5QXBwcm92YWxGbGFnXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IG9yIGNyZWF0ZSBhbiBhcHByb3ZhbCB3b3JrZmxvdyBmb3IgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXBwcm92ZXJzWzBdPy5hcHByb3ZlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgPjxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgYWN0aXZhdGVTZWxlY3RvcignYXBwcm92ZXJzJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgYWRkTW9yZUxldmVscyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd29ya2Zsb3dUeXBlID0gJ1NFUVVFTlRJQUwnXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICsgQWRkIE1vcmUgTGV2ZWxzXG4gICAgICAgICAgICA8L2J1dHRvbj48L2xhYmVsXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBXaG8gLyBub3cgQXR0ZXN0YXRpb24gLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXNzaWduZWVzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnYXNzaWduZWVzJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAgICAgICBhY3RpdmVTZWxlY3RvciA9PT0gJ2Fzc2lnbmVlcydcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy93aG8uc3ZnXCJcbiAgICAgICAgICBhbHQ9XCJpbVwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdhc3NpZ25lZXMnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5BdHRlc3RhdGlvbjwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtbWItMlwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwICYmICFncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgIChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQgJiZcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID09IDApXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2Fzc2lnbmVlcycsIHRydWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IHRoZSBwZXJzb25zIHJlc3BvbnNpYmxlIGZvciBhdHRlc3RpbmcgdGhpcyBwb2xpY3kuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW4gdngtbWItMlwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFncm91cEVuYWJsZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICBsZXQgYXNzaWduZWUgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/LnNsaWNlKDAsIDEpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJhc3NpZ25lZS5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduZWVQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdyb3VwRW5hYmxlZFwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZSgnYXNzaWduZWVzJywgcG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXNbMF0pXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXT8uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlc1swXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlVzZXJQb3BvdmVyLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICdncm91cEFzc2lnbmVlcycsXG4gICAgICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRHcm91cEFzc2lnbmVlWzBdXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWVbMF0/Lmdyb3VwX25hbWVcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWVbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJncm91cC5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkR3JvdXBBc3NpZ25lZS5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdEJ0biB2eC1mcy0xMSB2eC1mdy02MDAgdngtdHh0LWJsdWUgdngtdHQtdXBwZXJjYXNlIHZ4LXAtMCB2eC1tLTAgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdhc3NpZ25lZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgKChwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAmJlxuICAgICAgICAgICAgICAgICFncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgICAgKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5zZWxlY3RlZEdyb3VwQXNzaWduZWUubGVuZ3RoID09IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgICAgICAgICAgICBncm91cEVuYWJsZWQpIHx8XG4gICAgICAgICAgICAgICAgKGlzU2VuZEZvckF0dGVzdGF0aW9uICYmXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcz8ubGVuZ3RoID09PSAwKSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBpZD1cIndob3ZhbGlkYXRlbXNnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCB0aGUgcGVyc29ucyByZXF1aXJlZCB0byBhdHRlc3QgdG8gdGhpcyBQb2xpY3kuXG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxhcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgICBbKG5nVmFsdWUpXT1cInBvbGljeUZvcm0ucmVxdWlyZXNTaWduYXR1cmVGb3JBdHRlc3RhdGlvblwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRBc3NpZ25lZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2hvLXRvZ2dsZVwiXG4gICAgICAgICAgICA+VEhJUyBQT0xJQ1kgUkVRVUlSRVMgRS1TSUdOQVRVUkUgRk9SIEFUVEVTVEFUSU9OXG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cImljb25zXCJcbiAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgJ0lmIHNlbGVjdGVkLCB0aGUgcmVhZGVycyB3aWxsIGJlIHJlcXVpcmVkIHRvIGF0dGVzdCB0aGlzIHBvbGljeSB1c2luZyB0aGVpciBlbGVjdHJvbmljIHNpZ25hdHVyZS4nXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cInRydWVcIlxuICAgICAgICAgICAgICA+JiN4ZTkxZjs8L2lcbiAgICAgICAgICAgID48L2FwcC1jcy1zd2l0Y2hcbiAgICAgICAgICA+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNhc3NpZ25lZVBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzc2lnbmVlIG9mIHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2Fzc2lnbmVlcycsIGFzc2lnbmVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgYXNzaWduZWUuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI1VzZXJQb3BvdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBhc3NpZ25lZSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEFzc2lnbmVlcyB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdhc3NpZ25lZXMnLCBhc3NpZ25lZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGFzc2lnbmVlLmVtcGxveWVlX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1wb3BvdmVyICNncm91cCBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWUgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnZ3JvdXBBc3NpZ25lZXMnLCBkYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+JiN4ZTkwZDs8L2lcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZGF0YS5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciAtLT5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgb3ZlcnNlZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8uZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyR3JvdXAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgb2YgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiIChjbGljayk9XCJyZW1vdmUoJ2NjR3JvdXBFbWFpbCcsIGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhPy5ncm91cF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgIDwhLS0gb3ZlcnNlZXIgZW5kIC0tPlxuXG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBmYWlsIHN0YXJ0IC0tPlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjb3ZlcnNlZXJGYWlsUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgb3ZlcnNlZXIgb2YgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWwgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgb3ZlcnNlZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvdmVyc2Vlcj8uZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI292ZXJzZWVyRmFpbEdyb3VwIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXAgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGE/Lmdyb3VwX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPCEtLSBvdmVyc2VlciBmYWlsIGVuZCAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gV2hlbiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+V2hlbj88L2xhYmVsPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyA9PSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBidXR0b24tc2VjXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWlucHV0IGZyZXF1ZW5jeS1jdXN0b20taW5wdXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBmcmVxdWVuY3lQbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2ZyZXF1ZW5jeScsIHRydWUpXCIgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgICAgICAgICBTZXQgQSBmcmVxdWVuY3lcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIlxuICAgICAgICAgID4gLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWMgc2VsZWN0Qm94U3VjY2VzcyB2eC1wbC0yIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWJldHdlZW5cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdmcmVxdWVuY3knLCByYylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJmcmVxdWVuY3lQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPnt7IGZyZXF1ZW5jeVBsYWNlaG9sZGVyIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yICE9PSAnZnJlcXVlbmN5J1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignZnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8IS0tIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwXCI+e3sgZnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdmcmVxdWVuY3knXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdmcmVxdWVuY3knLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT5FZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgIXBvbGljeUZvcm0/LmZyZXF1ZW5jeV9kZXRhaWxzICYmXG4gICAgICAgICAgICAgICAgIWdyb3VwRW5hYmxlZCkgfHxcbiAgICAgICAgICAgICAgICAoKHBvbGljeUZvcm0/LnNlbGVjdGVkQXNzaWduZWVzPy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZEdyb3VwQXNzaWduZWU/Lmxlbmd0aCA+IDApICYmXG4gICAgICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8uZnJlcXVlbmN5X2RldGFpbHMgJiZcbiAgICAgICAgICAgICAgICAgIGdyb3VwRW5hYmxlZCkpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IGFuIGF0dGVzdGF0aW9uIHNjaGVkdWxlIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5FZmZlY3RpdmUgRGF0ZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS10aW1lLXBpY2tlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrZXItZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIGRhdGUgZnJvbSB3aGljaCB0aGlzIHBvbGljeSBnb2VzIGludG8gZWZmZWN0LlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicG9saWN5Rm9ybS5wb2xpY3lEdWVEYXRlICB8IGRhdGU6ICdkZCBNTU0geXl5eSdcIiAoY2xpY2spPVwib3BlbkRhdGVQaWNrZXIoKTtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MmQ7PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHAtZGF0ZS1waWNrZXIgI2RhdGVQaWNrZXIgKG9uU2VsZWN0KT1cImRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7Y2xvc2VEYXRlUGlja2VyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJkYXRlQ29uZmlnXCIgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnBvbGljeUR1ZURhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kcC1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZ4LW92ZXJsYXlcIiAoY2xpY2spPVwiY2xvc2VEYXRlUGlja2VyKCRldmVudClcIiAqbmdJZj1cImRhdGVQaWNrZXJPdmVybGF5XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIENoZWNrcG9pbnRzIC8gQXNzZXNzbWVudCBvZiBVbmRlcnN0YW5kaW5nIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAqbmdJZj1cInRydWVcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NoZWNrcG9pbnRzJ1wiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2hlY2twb2ludHMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+XG4gICAgICAgICAgICBBc3Nlc3NtZW50IG9mIFVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoPT09MFwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ2NoZWNrcG9pbnRzJyx0cnVlKVwiPisgQWRkIENoZWNrcG9pbnRzPC9idXR0b24+IC0tPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdjaGVja3BvaW50cycsIHRydWUpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiU2V0IHVwIGEgcXVlc3Rpb25uYWlyZSB0byBjb25maXJtIHRoZSByZWFkZXLigJlzIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHBvbGljeS5cIiByZWFkb25seT4gLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tLWlucHV0XCI+XG4gICAgICAgICAgICAgIFNldCB1cCBhIHF1ZXN0aW9ubmFpcmUgdG8gY29uZmlybSB0aGUgcmVhZGVy4oCZczxiciAvPnVuZGVyc3RhbmRpbmdcbiAgICAgICAgICAgICAgb2YgdGhlIHBvbGljeS5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2hpcC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj57e3BvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzPy5sZW5ndGggKyAocG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDEgPycgQ2hlY2twb2ludHMnOicgQ2hlY2twb2ludCcpfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoZWNrcG9pbnQtcG9pbnQtdGV4dCBmaXJzdFwiPlRPVEFMIFBPSU5UUzogPHNwYW4gY2xhc3M9XCJub1wiPnt7cG9saWN5Rm9ybT8udG90YWxRdWVzdGlvbn19PC9zcGFuPjxicj48ZW0+RWFjaCBxdWVzdGlvbiBjYXJyaWVzIDEgcG9pbnQ8L2VtPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hlY2twb2ludC1wb2ludC10ZXh0XCI+UE9JTlRTIFJFUVVJUkVEIFRPIEFUVEVTVCA6IDxzcGFuIGNsYXNzPVwibm9cIj57e3BvbGljeUZvcm0/LnBhc3NpbmdNYXJrc319PC9zcGFuPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NoZWNrcG9pbnRzJywgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHMpXCJcbiAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiPnt7XG4gICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCArXG4gICAgICAgICAgICAgICAgICAocG9saWN5Rm9ybT8uY2hlY2twb2ludERldGFpbHM/Lmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgPyBcIiBRdWVzdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiIFF1ZXN0aW9uXCIpXG4gICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2hlY2twb2ludHMnLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOWJhOzwvaT4gRWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8YXBwLXBvcG92ZXIgI2NoZWNrcG9pbnRQb3BPdmVyIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgY2hlY2twb2ludCBvZiBwb2xpY3lGb3JtPy5jaGVja3BvaW50RGV0YWlscyB8IHNsaWNlOiAxOyBsZXQgaiA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjaGVja3BvaW50cycsY2hlY2twb2ludCxqKzEpXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNoZWNrcG9pbnQ/LnF1ZXN0aW9uIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2FwcC1wb3BvdmVyPiAtLT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmlzayBDbGFzc2lmaWNhdGlvbiAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgICpuZ0lmPVwic2hvd1Jpc2tDbGFzc2lmaWNhdGlvbiAmJiBmYWxzZVwiXG4gICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiYWN0aXZlU2VsZWN0b3IgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICduYW1lJ1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtLnJpc2tSYXRpbmdcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yaXNrcy5zdmdcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5yaXNrUmF0aW5nXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmlza1JhdGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJpc2sgQ2xhc3NpZmljYXRpb248L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvblwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIGNsYXNzPVwibG93XCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNsYXNzIG9mIHJpc2tDbGFzc2lmaWNhdGlvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjbGFzcy5jbGFzc11cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJjbGFzc2lmaWNhdGlvblwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNsYXNzLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5yaXNrUmF0aW5nID09PSBjbGFzcy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwb2xpY3lGb3JtLnJpc2tSYXRpbmdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBjbGFzcy5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVzcG9uc2liaWxpdHkgQ2VudGVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0uYWRkUmVzcG9uc2liaWxpdHlDZW50ZXJzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdyYydcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ3JjJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIiBbY2xhc3MuY2hlY2tlZF09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJDcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPT0gMCB8fCBhY3RpdmVTZWxlY3RvciA9PT0gJ3JjJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3Jlc3BvbnNpYmlsaXR5LWNlbnRlci5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDAgJiYgYWN0aXZlU2VsZWN0b3IgIT09ICdyYydcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJlc3BvbnNpYmlsaXR5IENlbnRlcjwvbGFiZWw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdFwiICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA9PSAwXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcigncmMnLCB0cnVlKVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJlc3BvbnNpYmlsaXR5IENlbnRlcihzKSB0aGF0IHRoaXMgcG9saWN5IHJlbGF0ZXMgdG8uXCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cInBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/LnNsaWNlKDAsIDEpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdyYycsIHJjKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInJjLml0ZW1fbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyByYy5pdGVtX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJjUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3M/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LnNlbGVjdGVkUkNzPy5zbGljZSgxKS5sZW5ndGggfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyYycsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JjUG9wb3ZlciBbZG9udENsb3Nlb25DbGlja109XCJ0cnVlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgcmMgb2YgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSQ3MgfCBzbGljZSA6IDE7XG4gICAgICAgICAgICAgICAgICAgIGxldCBqID0gaW5kZXhcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCIgKGNsaWNrKT1cInJlbW92ZSgncmMnLCByYylcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByYy5pdGVtX25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFZlcnNpb24gLS0+XG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFZlcnNpb25cIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiYgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L2Fzc29jaWF0ZWQtcmlza3Muc3ZnXCJcbiAgICAgICAgICBhbHQ9XCJuYW1lXCJcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLnBvbGljeV92ZXJzaW9uXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5WRVJTSU9OPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicG9saWN5Rm9ybS5wb2xpY3lfdmVyc2lvblwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uVmVyc2lvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3BlY2lmeSB0aGUgcG9saWN5IHZlcnNpb24uXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIiFpc1ZlcnNpb25WYWxpZFwiXG4gICAgICAgICAgICBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxuICAgICAgICAgICAgW2FwcFNjcm9sbEluVmlld109XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB2ZXJzaW9uRXJyb3JNZXNzYWdlIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXZpZXdlciAtLT5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFthcHBTY3JvbGxJblZpZXddPVwic2Nyb2xsVG9Cb3R0b21cIlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZFJldmlld2VycyAmJiBmYWxzZVwiXG4gICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcicgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeScgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJsZWZ0XCJcbiAgICAgICAgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIHBvbGljeUZvcm0/LnNlbGVjdGVkUmV2aWV3ZXJzPy5sZW5ndGggPT0gMCB8fFxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgPT09ICdyZXZpZXdlcidcbiAgICAgICAgICBcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9yZXZpZXdlci5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlcidcbiAgICAgICAgICBcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDUyIDUyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjaXJjbGVcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaXJjbGVcIlxuICAgICAgICAgICAgY3g9XCIyNlwiXG4gICAgICAgICAgICBjeT1cIjI2XCJcbiAgICAgICAgICAgIHI9XCIyNVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NoZWNrXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGQ9XCJNMTQuMSAyNy4ybDcuMSA3LjIgMTYuNy0xNi44XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2eC1mb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwidngtY29udHJvbC1wYW5lbFwiPlJldmlld2VyIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID09IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlcicsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdGhlIHBlcnNvbiByZXNwb25zaWJsZSBmb3IgcmV2aWV3aW5nIHRoaXMgcG9saWN5XCJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByZXZpZXdlciBvZiBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vyc1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgncmV2aWV3ZXInLCByZXZpZXdlcilcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJyZXZpZXdlci5tZW1iZXJfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyByZXZpZXdlci5tZW1iZXJfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxwXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiZcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uc2VsZWN0ZWRSZXZpZXdlcnM/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlsc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiXG4gICAgICAgICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInRydWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNlbGVjdCBhIHJldmlld2VyIGZvciB0aGlzIHBvbGljeS5cbiAgICAgICAgICA8L3A+XG5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+V2hlbj8gPC9sYWJlbD5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzID09ICcnXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0IGJ1dHRvbi1zZWNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdyZXZpZXdlckZyZXF1ZW5jeScsIHRydWUpXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU2V0IEEgZnJlcXVlbmN5XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LnJldmlld19mcmVxdWVuY3lfZGV0YWlscyAhPSAnJ1wiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdGVkIGJ1dHRvbi1zZWNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPnt7IHJldmlld2VyRnJlcXVlbmN5UGxhY2Vob2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09ICdyZXZpZXdlckZyZXF1ZW5jeSdcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJlZGl0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlU2VsZWN0b3IoJ3Jldmlld2VyRnJlcXVlbmN5JywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+RWRpdFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHBcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5zZWxlY3RlZFJldmlld2Vycz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAhcG9saWN5Rm9ybT8ucmV2aWV3X2ZyZXF1ZW5jeV9kZXRhaWxzXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCJcbiAgICAgICAgICAgIFthcHBTY3JvbGxJblZpZXddPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VsZWN0IHRoZSByZXZpZXcgc2NoZWR1bGUgZm9yIHRoaXMgcG9saWN5LlxuICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDxhcHAtZm9ybWF0LWFuZC1ldmlkZW5jZVxuICAgICAgICAgICAgKHVwZGF0ZUZpbGVzKT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyX2F0dGFjaG1lbnRzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAjZm9ybWF0RXZpZGVuY2VcbiAgICAgICAgICAgIFttb2RlXT1cIidwb2xpY3lSZXZpZXdlcidcIlxuICAgICAgICAgICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxuICAgICAgICAgICAgW2Zvcm1hdEV2aWRhbmNlRGF0YV09XCJwb2xpY3lGb3JtPy5kb2N1bWVudHNBbmRMaW5rc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXBwLWZvcm1hdC1hbmQtZXZpZGVuY2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE92ZXJzZWVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICAqbmdJZj1cInBvbGljeUZvcm0uYWRkT3ZlcnNlZXJzXCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgfHwgYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnXG4gICAgICBcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2NjRW1haWwnICYmXG4gICAgICAgIGFjdGl2ZVNlbGVjdG9yICE9PSAnY2NGYWlsJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwIHx8IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgKHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPT0gMCkgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NFbWFpbCcgfHxcbiAgICAgICAgICAgIGFjdGl2ZVNlbGVjdG9yID09PSAnY2NGYWlsJ1xuICAgICAgICAgIFwiXG4gICAgICAgICAgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L292ZXJzaWdodC5zdmdcIlxuICAgICAgICAgIGFsdD1cImltXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0VtYWlsJyAmJlxuICAgICAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdjY0ZhaWwnXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5PdmVyc2lnaHQ8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA9PSAwICYmXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbC5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJXaG8gc2hvdWxkIGhhdmUgb3ZlcnNpZ2h0IG9mIHRoaXMgcG9saWN5P1wiXG4gICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMCB8fFxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NFbWFpbCBvZiBwb2xpY3lGb3JtPy5DQ0VtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NFbWFpbCcsIGNjRW1haWwpXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiY2NFbWFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjY0VtYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cEVuYWJsZWRcIiBjbGFzcz1cImNoaXAtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBFbmFibGVkICYmIHBvbGljeUZvcm0/LkNDRW1haWw/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmUoJ2NjRW1haWwnLCBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRW1haWxbMF0uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0VtYWlsWzBdLmVtcGxveWVlX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00IGdyZWVuQmdcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0VtYWlsPy5sZW5ndGggPiAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ2eC1mcy0xMiB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1sLTIgdngtbXItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRW1haWwubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsPy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWwubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NHcm91cEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NHcm91cEVtYWlsWzBdKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbFswXT8uZ3JvdXBfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0dyb3VwRW1haWxbMF0/Lmdyb3VwX25hbWUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICAgIGFwcFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvdmVyc2Vlckdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDR3JvdXBFbWFpbD8ubGVuZ3RoIC0gMSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NFbWFpbCcsIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggPT0gMCAmJlxuICAgICAgICAgICAgICBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggPT0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIldobyBzaG91bGQgYmUgbm90aWZpZWQgaWYgdGhlIHBvbGljeSBpcyBub3QgYXR0ZXN0ZWQgb24gdGltZT9cIlxuICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWRcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cD8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hpcENvbnRhaW5lciB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LXBsLTIgdngtcHItMlwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWdyb3VwRW5hYmxlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2NGYWlsIG9mIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpY29ucyBjcm9zcyB2eC1mcy0xMCB2eC1wYXJhZ3JhcGgtdHh0IHZ4LW1yLTFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZSgnY2NGYWlsJywgY2NGYWlsKVwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cImNjRmFpbC5lbXBsb3llZV9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IGNjRmFpbC5lbXBsb3llZV9uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY291bnRCdG4gdngtZnMtOSB2eC1mdy01MDAgdngtdHh0LXdoaXRlIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1jZW50ZXIgdngtbGgtNCBncmVlbkJnXCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNjRmFpbFBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/LnNsaWNlKDEpLmxlbmd0aCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXBFbmFibGVkXCIgY2xhc3M9XCJjaGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImdyb3VwRW5hYmxlZCAmJiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbC5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXSlcIlxuICAgICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgID57eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbFswXT8uZW1wbG95ZWVfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTQgZ3JlZW5CZ1wiXG4gICAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3ZlcnNlZXJGYWlsUG9wb3Zlci5wb3BvdmVyKClcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbD8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgK3t7IHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cInZ4LWZzLTEyIHZ4LXBhcmFncmFwaC10eHQgdngtbWwtMiB2eC1tci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWw/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgIHBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlKCdjY0dyb3VwRmFpbEVtYWlsJywgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXSlcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+JiN4ZTlhZTs8L2lcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcE5hbWUgdngtZnMtMTEgdngtbGFiZWwtdHh0XCJcbiAgICAgICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXBbMF0/Lmdyb3VwX25hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8uQ0NGYWlsRW1haWxHcm91cFswXT8uZ3JvdXBfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm92ZXJzZWVyRmFpbEdyb3VwLnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LkNDRmFpbEVtYWlsR3JvdXA/Lmxlbmd0aCA+IDFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICt7eyBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbEdyb3VwPy5sZW5ndGggLSAxIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignY2NGYWlsJywgdHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTliYTs8L2k+IEVkaXRcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxhcHAtcG9wb3ZlciAjY2NFbWFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRW1haWwgb2YgcG9saWN5Rm9ybT8uQ0NFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0VtYWlsJywgY2NFbWFpbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPiYjeGU5MGQ7PC9pXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGNjRW1haWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI2NjRmFpbFBvcG92ZXIgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNjRmFpbCBvZiBwb2xpY3lGb3JtPy5DQ0ZhaWxFbWFpbCB8IHNsaWNlIDogMTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGogPSBpbmRleFxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIiAoY2xpY2spPVwicmVtb3ZlKCdjY0ZhaWwnLCBjY0ZhaWwpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBjY0ZhaWwuZW1wbG95ZWVfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hcHAtcG9wb3Zlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVsYXRlZCBEb2N1bWVudHMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJmb3JtLWdyb3VwLXJvd1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRBc3NvY2lhdGVkRG9jdW1lbnRzXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJhY3RpdmVTZWxlY3RvciAmJiBhY3RpdmVTZWxlY3RvciAhPT0gJ25hbWUnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFzc29jaWF0ZWREb2N1bWVudHMuZm9ybWF0RmlsZXM/Lmxlbmd0aCA9PSAwXCJcbiAgICAgICAgICBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvZm9ybWF0LWV2aWRlbmNlLnN2Z1wiXG4gICAgICAgICAgYWx0PVwiaW1cIlxuICAgICAgICAvPlxuXG4gICAgICAgIDxzdmdcbiAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0uYXNzb2NpYXRlZERvY3VtZW50cy5mb3JtYXRGaWxlcz8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCI+UkVMQVRFRCBET0NVTUVOVFM8L2xhYmVsPlxuICAgICAgICAgIDxhcHAtZm9ybWF0LWFuZC1ldmlkZW5jZVxuICAgICAgICAgICAgKHVwZGF0ZUZpbGVzKT1cInNhdmVTZWxlY3RlZExpc3QoJ2Fzc29jaWF0ZWREb2N1bWVudHMnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFttb2RlXT1cIidwb2xpY3knXCJcbiAgICAgICAgICAgIFtvcmdhbml6YXRpb25faWRdPVwib3JnYW5pemF0aW9uX2lkXCJcbiAgICAgICAgICAgIFtmb3JtYXRFdmlkYW5jZURhdGFdPVwicG9saWN5Rm9ybT8uYXNzb2NpYXRlZERvY3VtZW50c1wiXG4gICAgICAgICAgPjwvYXBwLWZvcm1hdC1hbmQtZXZpZGVuY2U+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExpbmsgUHJvZ3JhbXMgJiBSZXNwb25zaWJpbGl0aWVzIC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYWRkTGlua1Byb2dyYW1cIlxuICAgICAgW2FwcFNjcm9sbEluVmlld109XCJzY3JvbGxUb0JvdHRvbVwiXG4gICAgICBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCJcbiAgICAgIFtjbGFzcy5hY3RpdmVdPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdsaW5rUHJvZ3JhbSdcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2xpbmtQcm9ncmFtJyAmJlxuICAgICAgICBzaWRlU2VsZWN0b3JFbGVtZW50cy5pbmNsdWRlcyhhY3RpdmVTZWxlY3RvcilcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImxlZnRcIlxuICAgICAgICBbY2xhc3MuY2hlY2tlZF09XCJcbiAgICAgICAgICBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXCJcbiAgICAgICAgICBzcmM9XCJodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL3dvcmtmbG93LWVuZ2luZS9hc3NldHMvd29ya2Zsb3cvbGluay1pdGVtcy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25cIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTIgNTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNpcmNsZVxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja0ljb25fX2NpcmNsZVwiXG4gICAgICAgICAgICBjeD1cIjI2XCJcbiAgICAgICAgICAgIGN5PVwiMjZcIlxuICAgICAgICAgICAgcj1cIjI1XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2hlY2tcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInZ4LWZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2eC1jb250cm9sLXBhbmVsXCJcbiAgICAgICAgICAgID5MSU5LIFBST0dSQU1TICYgUkVTUE9OU0lCSUxJVElFUzwvbGFiZWxcbiAgICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCIhcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbGlua1Byb2dyYW0nLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgUHJvZ3JhbXMgJiByZXNwb25zaWJpbGl0aWVzIHRoYXQgYXJlPGJyIC8+YXNzb2NpYXRlZCB3aXRoXG4gICAgICAgICAgICAgIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveFN1Y2Nlc3MgdngtcGwtMiB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtanVzdGlmeS1iZXR3ZWVuXCJcbiAgICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5jYXRlZ29yeV9pZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgIHJlbW92ZSgnbGlua1Byb2dyYW0nLCBwb2xpY3lGb3JtPy5wcm9ncmFtU2VsZWN0ZWRWYWx1ZXMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5uYW1lXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgZGVsYXk9XCIwXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+e3sgcG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5uYW1lIH19PC9zcGFuXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb3VudEJ0biB2eC1mcy05IHZ4LWZ3LTUwMCB2eC10eHQtd2hpdGUgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1qdXN0aWZ5LWNlbnRlciB2eC1saC00XCJcbiAgICAgICAgICAgICAgICBhcHBQb3BvdmVyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInByb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXIucG9wb3ZlcigpXCJcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICs0XG4gICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGFwcC1wb3BvdmVyXG4gICAgICAgICAgICAgICNwcm9ncmFtUmVzcG9uc2liaWxpdHlQb3BvdmVyXG4gICAgICAgICAgICAgIFtkb250Q2xvc2VvbkNsaWNrXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2YtYWN0aW9uLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBkYXRhIG9mIFsxLCAxLCAxLCAxLCAxLCAxLCAxXVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1JlcG9ydGluZyBpbmZvcm1hdGlvbiBzZWN1cml0eSB3ZWFrbmVzc2VzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTBkOzwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlcG9ydGluZyBpbmZvcm1hdGlvbiBzZWN1cml0eSB3ZWFrbmVzc2VzXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignbGlua1Byb2dyYW0nLCB0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbnMgdngtbXItMVwiPiYjeGU5MGM7PC9pPiBFRElUXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTGluayBBc3Nlc3NtZW50IC0tPlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicG9saWN5Rm9ybS5hZGRMaW5rQXNzZXNzbWVudFwiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAmJlxuICAgICAgICBhY3RpdmVTZWxlY3RvciAhPT0gJ2lzQXNzZXNzbWVudCcgJiZcbiAgICAgICAgc2lkZVNlbGVjdG9yRWxlbWVudHMuaW5jbHVkZXMoYWN0aXZlU2VsZWN0b3IpXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJsZWZ0XCIgW2NsYXNzLmNoZWNrZWRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCI+XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAqbmdJZj1cIiFwb2xpY3lGb3JtPy5hc3Nlc3NtZW50Py5sZW5ndGhcIlxuICAgICAgICAgIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9hc3Nlc3NtZW50cy5zdmdcIlxuICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgIC8+XG5cbiAgICAgICAgPHN2Z1xuICAgICAgICAgICpuZ0lmPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudD8ubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvblwiXG4gICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIEFTU0VTU01FTlRTPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hFbmFibGUgdngtcGwtMyB2eC1wci0zIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0Qm94UGxhY2Vob2RlciB2eC1mcy0xMyB2eC1wYXJhZ3JhcGgtdHh0IHZ4LWxoLTRcIj5cbiAgICAgICAgICAgICAgU2VsZWN0IGFzc2Vzc21lbnRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzPGJyIC8+cG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3RCb3hTdWNjZXNzIHZ4LXBsLTIgdngtcHItMyB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktYmV0d2VlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNoaXBDb250YWluZXIgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlciB2eC1wbC0yIHZ4LXByLTJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIGNyb3NzIHZ4LWZzLTEwIHZ4LXBhcmFncmFwaC10eHQgdngtbXItMVwiXG4gICAgICAgICAgICAgICAgPiYjeGU5YWU7PC9pXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNoaXBOYW1lIHZ4LWZzLTExIHZ4LWxhYmVsLXR4dFwiXG4gICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICBwb2xpY3lGb3JtLmFzc2Vzc21lbnRbMF0/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJibGFja1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID57e1xuICAgICAgICAgICAgICAgICAgcG9saWN5Rm9ybS5hc3Nlc3NtZW50WzBdPy5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW5cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YXBwLXBvcG92ZXJcbiAgICAgICAgICAgICAgI3Byb2dyYW1SZXNwb25zaWJpbGl0eVBvcG92ZXJcbiAgICAgICAgICAgICAgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3Zi1hY3Rpb24tbGlzdFwiPlxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFzc2Vzc21lbnQgb2YgcG9saWN5Rm9ybS5hc3Nlc3NtZW50IHwgc2xpY2UgOiAxXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF2YXRhci1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vzc21lbnQ/LmFzc2Vzc21lbnREZXRhaWxzPy5hc3Nlc3NtZW50X25hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tbGVmdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJsYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwTWFuZGF0b3J5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zXCI+JiN4ZTkwZDs8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhc3Nlc3NtZW50Py5hc3Nlc3NtZW50RGV0YWlscz8uYXNzZXNzbWVudF9uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FwcC1wb3BvdmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcignaXNBc3Nlc3NtZW50JywgdHJ1ZSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImVkaXRCdG4gdngtZnMtMTEgdngtZnctNjAwIHZ4LXR4dC1ibHVlIHZ4LXR0LXVwcGVyY2FzZSB2eC1wLTAgdngtbS0wIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LW1yLTFcIj4mI3hlOTBjOzwvaT4gRURJVFxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExpbmsgUmVsYXRlZCBQb2xpY2VzIC0tPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJwb2xpY3lGb3JtLmFkZExpbmtQb2xpY2llc1wiXG4gICAgICBbYXBwU2Nyb2xsSW5WaWV3XT1cInNjcm9sbFRvQm90dG9tXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1ncm91cC1yb3dcIlxuICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgJiZcbiAgICAgICAgYWN0aXZlU2VsZWN0b3IgIT09ICdpc0xpbmtlZFBvbGljZXMnICYmXG4gICAgICAgIHNpZGVTZWxlY3RvckVsZW1lbnRzLmluY2x1ZGVzKGFjdGl2ZVNlbGVjdG9yKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwibGVmdFwiIFtjbGFzcy5jaGVja2VkXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIj5cbiAgICAgICAgPGltZ1xuICAgICAgICAgICpuZ0lmPVwiIVNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgW3NyY109XCJMSU5LUy5saW5rZWRQb2xpY3lJbWFnZVwiXG4gICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgLz5cblxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJTZWxlY3RlZExpc3RPZlBvbGljaWVzPy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uXCJcbiAgICAgICAgICBbeG1sbnNdPVwiTElOS1MuY2hlY2tlZFwiXG4gICAgICAgICAgdmlld0JveD1cIjAgMCA1MiA1MlwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2lyY2xlXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrSWNvbl9fY2lyY2xlXCJcbiAgICAgICAgICAgIGN4PVwiMjZcIlxuICAgICAgICAgICAgY3k9XCIyNlwiXG4gICAgICAgICAgICByPVwiMjVcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tJY29uX19jaGVja1wiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICBkPVwiTTE0LjEgMjcuMmw3LjEgNy4yIDE2LjctMTYuOFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidngtZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInZ4LWNvbnRyb2wtcGFuZWxcIj5MSU5LIFJFTEFURUQgUE9MSUNJRVM8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVNlbGVjdG9yKCdpc0xpbmtlZFBvbGljZXMnLCB0cnVlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdEJveEVuYWJsZSB2eC1wbC0zIHZ4LXByLTMgdngtZC1mbGV4IHZ4LWFsaWduLWNlbnRlclwiXG4gICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RCb3hQbGFjZWhvZGVyIHZ4LWZzLTEzIHZ4LXBhcmFncmFwaC10eHQgdngtbGgtNFwiPlxuICAgICAgICAgICAgICBTZWxlY3QgcG9saWNpZXMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcG9saWN5LlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWRcIiAqbmdJZj1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXM/Lmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwQ29udGFpbmVyIHZ4LWQtZmxleCB2eC1hbGlnbi1jZW50ZXIgdngtcGwtMiB2eC1wci0yXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwb2xpY3kgb2YgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcy5zbGljZSgwLCAxKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShDT05TVEFOVFMuTElOS19QT0xJQ1ksIHBvbGljeT8uY29udHJhY3RfaWQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnMgY3Jvc3MgdngtZnMtMTAgdngtcGFyYWdyYXBoLXR4dCB2eC1tci0xXCJcbiAgICAgICAgICAgICAgICAgID4mI3hlOWFlOzwvaVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwTmFtZSB2eC1mcy0xMSB2eC1sYWJlbC10eHRcIlxuICAgICAgICAgICAgICAgICAgW2FwcFRvb2x0aXBdPVwicG9saWN5Py5jb250cmFjdF9uYW1lXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGRlbGF5PVwiMFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYmxhY2tcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBNYW5kYXRvcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgPnt7IHBvbGljeT8uY29udHJhY3RfbmFtZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvdW50QnRuIHZ4LWZzLTkgdngtZnctNTAwIHZ4LXR4dC13aGl0ZSB2eC1kLWZsZXggdngtYWxpZ24tY2VudGVyIHZ4LWp1c3RpZnktY2VudGVyIHZ4LWxoLTRcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8ubGVuZ3RoID4gMVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXBwUG9wb3ZlclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWxhdGVkUG9saWN5LnBvcG92ZXIoKVwiXG4gICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAre3sgU2VsZWN0ZWRMaXN0T2ZQb2xpY2llcz8uc2xpY2UoMSkubGVuZ3RoIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgIT09IENPTlNUQU5UUy5MSU5LX1BPTElDWVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZWRpdFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWN0aXZhdGVTZWxlY3RvcihDT05TVEFOVFMuTElOS19QT0xJQ1ksIHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5YmE7PC9pPiBFZGl0XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YXBwLXBvcG92ZXIgI3JlbGF0ZWRQb2xpY3kgW2RvbnRDbG9zZW9uQ2xpY2tdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmLWFjdGlvbi1saXN0XCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImFjdGlvbi1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvbGljeSBvZiBTZWxlY3RlZExpc3RPZlBvbGljaWVzIHwgc2xpY2UgOiAxO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IGluZGV4XG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY2FyZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCBwb2xpY3k/LmNvbnRyYWN0X2lkKVxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID4mI3hlOTBkOzwvaVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwb2xpY3k/LmNvbnRyYWN0X25hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYXBwLXBvcG92ZXI+XG4gICAgICAgICAgPGFwcC1jcy1zd2l0Y2hcbiAgICAgICAgICAgIFsobmdWYWx1ZSldPVwicG9saWN5Rm9ybS5pc1BvcnRhbERpc3BsYXlFbmFibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJwb2xpY3lGb3JtPy5MaW5rZWRQb2xpY2llcyA9PSAwXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2hvLXRvZ2dsZVwiXG4gICAgICAgICAgICA+RElTUExBWSBPTiBUSEUgUE9MSUNZIFBPUlRBTFxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJpY29uc1wiXG4gICAgICAgICAgICAgIFthcHBUb29sdGlwXT1cIkNPTlNUQU5UUy5MSU5LX1BPTElDWV9IRUxQX1RFWFRcIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgICAgICAgICB0eXBlPVwid2hpdGVcIlxuICAgICAgICAgICAgICBkZWxheT1cIjBcIlxuICAgICAgICAgICAgICBbdG9vbHRpcE1hbmRhdG9yeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPiYjeGU5MWY7PC9pXG4gICAgICAgICAgICA+PC9hcHAtY3Mtc3dpdGNoXG4gICAgICAgICAgPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8YXBwLWNoZWNrYm94LWxpc3RcbiAgICBbY29uZmlnXT1cImNhdGVnb3J5Q29uZmlnXCJcbiAgICBbdHdvQ29sdW1uXT1cImZhbHNlXCJcbiAgICBbaXRlbXNMaXN0XT1cImNhdGVnb3J5TGlzdFwiXG4gICAgW3NlbGVjdGVkSXRlbXNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFtpZGVudGlmaWVyS2V5XT1cIidfaWQnXCJcbiAgICBbZGlzcGxheUtleV09XCInaXRlbV9uYW1lJ1wiXG4gICAgW3Rvb2x0aXBLZXldPVwiJ2l0ZW1fbmFtZSdcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjYXRlZ29yeSdcIlxuICAgIChzYXZlTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjYXRlZ29yeScsICRldmVudClcIlxuICAgIChjbG9zZUxpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtsb2FkZWRdPVwiIWNhdGVnb3JpZXNMaXN0TG9hZGVkXCJcbiAgPlxuICA8L2FwcC1jaGVja2JveC1saXN0PlxuICA8IS0tIDxhcHAtY2hlY2tib3gtbGlzdCBbY29uZmlnXT1cImFwcHJvdmFsV29ya2Zsb3dDb25maWdcIiBbdHdvQ29sdW1uXT1cInRydWVcIlxuICBbaXRlbXNMaXN0XT1cIlwiXG4gIFtzZWxlY3RlZEl0ZW1zXT1cInBvbGljeUZvcm0uaXNzdWVDQ1VzZXJzXCIgW2lkZW50aWZpZXJLZXldPVwiJ2VtcGxveWVlX2VtYWlsJ1wiIFtkaXNwbGF5S2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiIFt0b29sdGlwS2V5XT1cIidlbXBsb3llZV9lbWFpbCdcIlxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yPT09J0lTU1VFX0NDJ1wiIChzYXZlTGlzdCk9XCJzZWxlY3RvckFjdGlvbigkZXZlbnQsJ0lTU1VFX0NDJylcIlxuICAoY2xvc2VMaXN0KT1cImZpZWxkRGVzZWxlY3RvcignSVNTVUVfQ0MnKVwiPlxuPC9hcHAtY2hlY2tib3gtbGlzdD4gLS0+XG5cbiAgPGFwcC1yZXNwb25zaWJpbGl0eS1jZW50ZXJzLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmMnXCJcbiAgICBbcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdF09XCJyY0xpc3RcIlxuICAgIFtzZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkUkNzXCJcbiAgICBbcmNJZEtleV09XCInaXRlbV9pZCdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3JjJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlUmNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbbG9hZGVkXT1cInJjTGlzdExvYWRlZFwiXG4gID5cbiAgPC9hcHAtcmVzcG9uc2liaWxpdHktY2VudGVycy1saXN0PlxuXG4gIDxhcHAtbGluay1yZWxhdGVkLXBvbGljaWVzXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gQ09OU1RBTlRTLkxJTktfUE9MSUNZXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFttb2RlXT1cIm1vZGVcIlxuICAgIFtzZWxlY3RlZFBvbGljaWVzXT1cIlNlbGVjdGVkTGlzdE9mUG9saWNpZXNcIlxuICAgIChjbG9zZUxpbmtQb2xpY3lMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICAoc2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoQ09OU1RBTlRTLkxJTktfUE9MSUNZLCAkZXZlbnQpXCJcbiAgPjwvYXBwLWxpbmstcmVsYXRlZC1wb2xpY2llcz5cblxuICA8YXBwLXVzZXJzLXJhZGlvLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXInXCJcbiAgICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgICBbdXNlcnNMaXN0XT1cImFsbFJldmlld2Vyc1wiXG4gICAgW2hlYWRlclRleHRdPVwiJ1NlbGVjdCBhIFJldmlld2VyJ1wiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5zZWxlY3RlZFJldmlld2Vyc1wiXG4gICAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ3Jldmlld2VyJywgJGV2ZW50KVwiXG4gICAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgPlxuICA8L2FwcC11c2Vycy1yYWRpby1saXN0PlxuXG4gIDxhcHAtb3duZXItbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0VtYWlsJyAmJiAhZ3JvdXBFbmFibGVkXCJcbiAgICBbdXNlcnNMaXN0XT1cIm92ZXJzZWVyc0xpc3RcIlxuICAgIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLkNDRW1haWxcIlxuICAgIFt1c2VySWRLZXldPVwiJ2VtcGxveWVlX2lkJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidlbXBsb3llZV9uYW1lJ1wiXG4gICAgKHNhdmVTZWxlY3RlZExpc3QpPVwic2F2ZVNlbGVjdGVkTGlzdCgnY2NFbWFpbCcsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gID5cbiAgPC9hcHAtb3duZXItbGlzdD5cblxuICA8dXNlci1ncm91cC1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRW1haWwnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NFbWFpbFwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uQ0NHcm91cEVtYWlsXCJcbiAgICAoc2F2ZSk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0VtYWlsJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2ZlYXR1cmVmbGFnXT1cImdyb3VwRW5hYmxlZFwiXG4gID5cbiAgPC91c2VyLWdyb3VwLWxpc3Q+XG5cbiAgPGFwcC1vd25lci1saXN0XG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2NjRmFpbCcgJiYgIWdyb3VwRW5hYmxlZFwiXG4gICAgW3VzZXJzTGlzdF09XCJvdmVyc2VlcnNMaXN0XCJcbiAgICBbc2luZ3VsYXJUZXh0XT1cIidVc2VyIHNlbGVjdGVkJ1wiXG4gICAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybS5DQ0ZhaWxFbWFpbFwiXG4gICAgW3VzZXJJZEtleV09XCInZW1wbG95ZWVfaWQnXCJcbiAgICBbaXRlbU5hbWVLZXldPVwiJ2VtcGxveWVlX25hbWUnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjY0ZhaWwnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLW93bmVyLWxpc3Q+XG5cbiAgPHVzZXItZ3JvdXAtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjY0ZhaWwnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3ZlcnNlZXJzTGlzdFwiXG4gICAgW2dyb3VwTGlzdF09XCJvdmVyc2Vlckdyb3Vwc0xpc3RcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0uQ0NGYWlsRW1haWxcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtLkNDRmFpbEVtYWlsR3JvdXBcIlxuICAgIChzYXZlKT1cInNhdmVTZWxlY3RlZExpc3QoJ2NjRmFpbCcsICRldmVudClcIlxuICAgIChjYW5jZWwpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICAgIFtmZWF0dXJlZmxhZ109XCJncm91cEVuYWJsZWRcIlxuICA+XG4gIDwvdXNlci1ncm91cC1saXN0PlxuXG4gIDxhcHAtZ3JvdXAtdXNlcnMtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmICFncm91cEVuYWJsZWRcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYXNzaWduZWVzTGlzdFwiXG4gICAgW2dyb3Vwc0xpc3RdPVwib3ZlcnNlZXJHcm91cHNMaXN0XCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcbiAgICBbdXNlcklkS2V5XT1cIidteV9tZW1iZXJfaWQnXCJcbiAgICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdhc3NpZ25lZXMnLCAkZXZlbnQpXCJcbiAgICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+XG4gIDwvYXBwLWdyb3VwLXVzZXJzLWxpc3Q+XG5cbiAgPHVzZXItZ3JvdXAtbGlzdFxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdhc3NpZ25lZXMnICYmIGdyb3VwRW5hYmxlZFwiXG4gICAgW2dyb3VwRW5hYmxlZF09XCJ0cnVlXCJcbiAgICBbdXNlcmxpc3RdPVwib3duZXJsaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgKHNhdmUpPVwic2F2ZVNlbGVjdGVkTGlzdCgnYXNzaWduZWVzJywgJGV2ZW50KVwiXG4gICAgKGNhbmNlbCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW3NlbGVjdGVkR3JvdXBzXT1cInBvbGljeUZvcm0uc2VsZWN0ZWRHcm91cEFzc2lnbmVlXCJcbiAgICBbc2VsZWN0ZWRVc2Vyc109XCJwb2xpY3lGb3JtLnNlbGVjdGVkQXNzaWduZWVzXCJcbiAgICBbZmVhdHVyZWZsYWddPVwiZ3JvdXBFbmFibGVkXCJcbiAgPlxuICA8L3VzZXItZ3JvdXAtbGlzdD5cblxuICA8YXBwLW93bmVyLWxpc3RcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnYXBwcm92ZXJzJyAmJiBmYWxzZVwiXG4gICAgW2xpc3RIZWFkaW5nXT1cIidTZWxlY3QgQXBwcm92ZXJzJ1wiXG4gICAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICAgIFtwbHVyYWxUZXh0XT1cIidVc2VycyBzZWxlY3RlZCdcIlxuICAgIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICAgIFtzZWxlY3RlZFVzZXJzXT1cIlxuICAgICAgYWRkTW9yZUxldmVsc1xuICAgICAgICA/IFtdXG4gICAgICAgIDogcG9saWN5Rm9ybS5zZWxlY3RlZEFwcHJvdmVyc1thcHByb3ZlcnNMaXN0SW5kZXhdLmFwcHJvdmVyc1xuICAgIFwiXG4gICAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gICAgW2l0ZW1FbWFpbEtleV09XCInbWVtYmVyX2VtYWlsJ1wiXG4gICAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAgIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAgIChjbG9zZVVzZXJzTGlzdCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW21vZGVdPVwibW9kZVwiXG4gICAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gICAgKHJldmlld2VyV29ya2Zsb3dUeXBlQ2hhbmdlKT1cInJldmlld2VyVHlwZUNoYW5nZSgkZXZlbnQpXCJcbiAgICBbd29ya2Zsb3dMaXN0XT1cIndvcmtmbG93TGlzdFwiXG4gICAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbiAgPlxuICA8L2FwcC1vd25lci1saXN0PlxuXG4gIDxhcHAtZnJlcXVlbmN5LWNvbnRhaW5lclxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdmcmVxdWVuY3knXCJcbiAgICBbbW9kZV09XCIncG9saWN5J1wiXG4gICAgW2ZyZXF1ZW5jeURldGFpbHNdPVwiZnJlcXVlbmN5RGV0YWlsc1wiXG4gICAgKHNlbGVjdGVkRnJlcXVlbmN5KT1cImZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXG4gICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCJcbiAgICAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cblxuICA8YXBwLWZyZXF1ZW5jeS1jb250YWluZXJcbiAgICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAncmV2aWV3ZXJGcmVxdWVuY3knXCJcbiAgICBbbW9kZV09XCIncmV2aWV3ZXJGcmVxdWVuY3knXCJcbiAgICBbZnJlcXVlbmN5RGV0YWlsc109XCJyZXZpZXdlckZyZXF1ZW5jeURldGFpbHNcIlxuICAgIChzZWxlY3RlZEZyZXF1ZW5jeSk9XCJyZXZpZXdlckZyZXF1ZW5jeURhdGEoJGV2ZW50KVwiXG4gICAgW2ZlYXR1cmVdPVwiZmVhdHVyZVwiXG4gICAgW3BhZ2VUeXBlXT1cIidwb2xpY3knXCJcbiAgICAoY2xvc2VGcmVxdWVuY3kpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICA+PC9hcHAtZnJlcXVlbmN5LWNvbnRhaW5lcj5cblxuICA8dmMtbGluay1wcm9ncmFtXG4gICAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2xpbmtQcm9ncmFtJ1wiXG4gICAgKGNsb3NlKT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgICBbcG9saWN5XT1cInBvbGljeUZvcm1cIlxuICAgIFtzZWxlY3RlZFByb2dyYW1dPVwicG9saWN5Rm9ybT8ucHJvZ3JhbVNlbGVjdGVkVmFsdWVzXCJcbiAgICBbbW9kZV09XCJtb2RlXCJcbiAgICBbc2VsZWN0ZWRMaW5rUHJvZ3JhbV09XCJzZWxlY3RlZExpbmtQcm9ncmFtXCJcbiAgICAoY2hhbmdlVGFiKT1cImNoYW5nZVRhYignbGlua2VkUHJvZ3JhbXMnKVwiXG4gICAgKHVwZGF0ZWRQcm9ncmFtRGV0YWlscyk9XCJ1cGRhdGVkUHJvZ3JhbURldGFpbHMoJGV2ZW50KVwiXG4gID5cbiAgPC92Yy1saW5rLXByb2dyYW0+XG5cbiAgPGFwcC1jaGVja3BvaW50cy1wb2xpY3ktY29udGFpbmVyXG4gICAgKGNsb3NlQ2hlY2tQb2ludCk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW2NoZWNrcG9pbnREYXRhXT1cInBvbGljeUZvcm0/LmNoZWNrcG9pbnREZXRhaWxzXCJcbiAgICBbcmVxdWlyZWRQb2ludF09XCJwb2xpY3lGb3JtPy5wYXNzaW5nTWFya3NcIlxuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdjaGVja3BvaW50cydcIlxuICAgIChzYXZlQ2hlY2tQb2ludCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdjaGVja3BvaW50cycsICRldmVudClcIlxuICA+PC9hcHAtY2hlY2twb2ludHMtcG9saWN5LWNvbnRhaW5lcj5cbiAgPGFwcC1sb2FkZXItaW5saW5lICpuZ0lmPVwibG9hZGVyXCI+PC9hcHAtbG9hZGVyLWlubGluZT5cblxuICA8YXBwLWFwcHJvdmFsLXdvcmtmbG93XG4gICAgKm5nSWY9XCJlbmFibGVBcHByb3ZhbFdvcmtmbG93XCJcbiAgICBbc2VsZWN0ZWRDYXRlZ29yeV09XCJwb2xpY3lGb3JtPy5zZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgIFthcHByb3ZlcldvcmtGbG93TGlzdF09XCJhcHByb3ZlcldvcmtGbG93TGlzdFwiXG4gICAgW2FsbEFwcHJvdmVyc109XCJhbGxBcHByb3ZlcnNcIlxuICAgIChsaXN0Q2FuY2VsQ2xpY2tlZCk9XCJsaXN0Q2FuY2VsQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0ZWRXb3JrZmxvd05leHQpPVwic2VsZWN0ZWRBcHByb3ZhbFdvcmtmbG93KCRldmVudClcIlxuICAgIChzYXZlQXBwcm92YWxXb3JrZmxvdyk9XCJhcHByb3ZhbFdvcmtmbG93QVBJQ2FsbCgkZXZlbnQpXCJcbiAgICBbZWRpdEFwcHJvdmFsV29ya2Zsb3ddPVwiZWRpdEFwcHJvdmFsV29ya2Zsb3dcIlxuICAgIFtjcmVhdGVBcHByb3ZhbENsaWNrXT1cImNyZWF0ZUFwcHJvdmFsQ2xpY2tcIlxuICAgIChjbG9zZUNyZWF0ZUNsaWNrZWQpPVwiY2xvc2VDbGlja2VkQ3JlYXRlRm9ybSgpXCJcbiAgICBbZWRpdFdvcmtmbG93TGV2ZWxdPVwiZWRpdFdvcmtmbG93TGV2ZWxcIlxuICA+PC9hcHAtYXBwcm92YWwtd29ya2Zsb3c+XG4gIDwhLS0gPGFwcC1zZWxlY3QtYXBwcm92ZXJzPjwvYXBwLXNlbGVjdC1hcHByb3ZlcnM+IC0tPlxuXG4gIDxhcHAtcG9saWN5LWFjY2Vzc1xuICAgICpuZ0lmPVwiYWN0aXZlU2VsZWN0b3IgPT09ICdwb2xpY3lBY2Nlc3MnXCJcbiAgICBbcG9saWN5QWNjZXNzVHlwZV09XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX3R5cGVcIlxuICAgIChjbG9zZSk9XCJkaXNhYmxlU2VsZWN0b3IoKVwiXG4gICAgW29yZ1VzZXJzTGlzdF09XCJ1c2Vyc0xpc3RcIlxuICAgIFt1c2Vyc0FjY2Vzc0xpc3RdPVwidXNlcnNBY2Nlc3NMaXN0XCJcbiAgICBbZ3JvdXBMaXN0XT1cIm92ZXJzZWVyR3JvdXBzTGlzdFwiXG4gICAgW2dyb3Vwc0FjY2Vzc0xpc3RdPVwiZ3JvdXBzQWNjZXNzTGlzdFwiXG4gICAgW3NlbGVjdGVkVXNlcnNdPVwicG9saWN5Rm9ybT8ucG9saWN5X2FjY2Vzc19vd25lcnNcIlxuICAgIFtzZWxlY3RlZEdyb3Vwc109XCJwb2xpY3lGb3JtPy5wb2xpY3lfYWNjZXNzX2dyb3Vwc1wiXG4gICAgW2Rpc2FibGVkSWRzXT1cInVzZXJzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Rpc2FibGVkR3JvdXBJZHNdPVwiZ3JvdXBzQWNjZXNzTGlzdElkc1wiXG4gICAgW2Z1dHVyZVVzZXJzV2lsbFNlbGVjdF09XCJwb2xpY3lGb3JtPy5hdmFpbGFibGVPblBvcnRhbFwiXG4gICAgKHNhdmVDaGVja1BvaW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ3BvbGljeUFjY2VzcycsICRldmVudClcIlxuICAgIChzZXRQb2xpY3lBY2Nlc3NUeXBlKT1cInBvbGljeUZvcm0ucG9saWN5X2FjY2Vzc190eXBlID0gJGV2ZW50XCJcbiAgPlxuICA8L2FwcC1wb2xpY3ktYWNjZXNzPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiPlxuICA8IS0tIDxhcHAtY3JlYXRlLWRvY3VtZW50cyAqbmdJZj1cInNob3dDcmVhdGVEb2N1bWVudHNcIlxuICAgW29yZ2FuaXphdGlvbl9pZF09XCJvcmdhbml6YXRpb25faWRcIlxuICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICBbdXNlckluZm9dPVwidXNlckluZm9cIlxuICAgW3BvbGljeUlkXT1cInBvbGljeUlkXCJcbiAgIFtwb2xpY3lOYW1lXT1cInBvbGljeUZvcm0ucG9saWN5TmFtZVwiXG4gICAoZGlzY29ubmVjdFJlZnJlc2gpPVwiZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSlcIlxuICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICA+PC9hcHAtY3JlYXRlLWRvY3VtZW50cz4gLS0+XG4gIDxsaWItZG9jdW1lbnQtc2VjdGlvblxuICAgICpuZ0lmPVwic2hvd0NyZWF0ZURvY3VtZW50c1wiXG4gICAgW3RlbXBsYXRlVmlld109XCJpc1RlbXBsYXRlQ2xvc2VkXCJcbiAgICBbb3JnYW5pemF0aW9uX2lkXT1cIm9yZ2FuaXphdGlvbl9pZFwiXG4gICAgW21lbWJlcl9vYmpfaWRdPVwibWVtYmVyX29ial9pZFwiXG4gICAgW3VzZXJJbmZvXT1cInVzZXJJbmZvXCJcbiAgICBbcG9saWN5SWRdPVwicG9saWN5SWRcIlxuICAgIFtmZWF0dXJlXT1cImZlYXR1cmVcIlxuICAgIFt0ZW1wbGF0ZVVybF09XCJ0ZW1wbGF0ZVVybFwiXG4gICAgW2lzVGVtcGxhdGVPcGVuZWRdPVwidGVtcGxhdGVWaWV3XCJcbiAgICBbcG9saWN5TmFtZV09XCJwb2xpY3lGb3JtLnBvbGljeU5hbWVcIlxuICAgIChkaXNjb25uZWN0UmVmcmVzaCk9XCJkaXNjb25uZWN0UmVmcmVzaC5lbWl0KGZhbHNlKVwiXG4gICAgKGVkaXRQb2xpY3kpPVwiZWRpdFBvbGljeUZyb21Eb2N1bWVudHMoKVwiXG4gICAgKG9wZW5UZW1wbGF0ZSk9XCJ0ZW1wbGF0ZVZpZXcgPSB0cnVlXCJcbiAgPjwvbGliLWRvY3VtZW50LXNlY3Rpb24+XG48L25nLWNvbnRhaW5lcj5cblxuPGFwcC1hc3Nlc3NtZW50LWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2lzQXNzZXNzbWVudCdcIlxuICBbcHJvZ3JhbV9pZHNdPVwiJydcIlxuICBbaXNFZGl0XT1cInBvbGljeUZvcm0/LmFzc2Vzc21lbnQ/Lmxlbmd0aFwiXG4gIChjYW5jZWxBc3Nlc3NtZW50KT1cInNhdmVTZWxlY3RlZExpc3QoJ2lzQXNzZXNzbWVudCcsIGZhbHNlKVwiXG4gIFtzZWxlY3RlZEFzc2Vzc21lbnRdPVwicG9saWN5Rm9ybT8uYXNzZXNzbWVudFswXVwiXG4gIFttb2RlXT1cIidwb2xpY3knXCJcbiAgKG9uQXNzZXNzbWVudFNlbGVjdCk9XCJcbiAgICBvbkFzc2Vzc21lbnRTZWxlY3QoJGV2ZW50KTsgc2F2ZVNlbGVjdGVkTGlzdCgnaXNBc3Nlc3NtZW50JywgZmFsc2UpXG4gIFwiXG4+PC9hcHAtYXNzZXNzbWVudC1saXN0PlxuXG48YXBwLW93bmVyLWxpc3RcbiAgKm5nSWY9XCJhY3RpdmVTZWxlY3RvciA9PT0gJ2FwcHJvdmVycycgJiYgZmFsc2VcIlxuICBbbGlzdEhlYWRpbmddPVwiJ1NlbGVjdCBBcHByb3ZlcnMnXCJcbiAgW3Npbmd1bGFyVGV4dF09XCInVXNlciBzZWxlY3RlZCdcIlxuICBbcGx1cmFsVGV4dF09XCInVXNlcnMgc2VsZWN0ZWQnXCJcbiAgW3VzZXJzTGlzdF09XCJhbGxBcHByb3ZlcnNcIlxuICBbc2hvd1dvcmtmbG93XT1cInRydWVcIlxuICBbc2VsZWN0ZWRVc2Vyc109XCJcbiAgICBhZGRNb3JlTGV2ZWxzXG4gICAgICA/IFtdXG4gICAgICA6IHBvbGljeUZvcm0uc2VsZWN0ZWRBcHByb3ZlcnNbYXBwcm92ZXJzTGlzdEluZGV4XS5hcHByb3ZlcnNcbiAgXCJcbiAgW3VzZXJJZEtleV09XCInbWVtYmVyX2lkJ1wiXG4gIFtpdGVtRW1haWxLZXldPVwiJ21lbWJlcl9lbWFpbCdcIlxuICBbaXRlbU5hbWVLZXldPVwiJ21lbWJlcl9uYW1lJ1wiXG4gIChzYXZlU2VsZWN0ZWRMaXN0KT1cInNhdmVTZWxlY3RlZExpc3QoJ2FwcHJvdmVycycsICRldmVudClcIlxuICAoY2xvc2VVc2Vyc0xpc3QpPVwiZGlzYWJsZVNlbGVjdG9yKClcIlxuICBbbW9kZV09XCJtb2RlXCJcbiAgW3Jldmlld2VyV29ya2Zsb3dUeXBlXT1cIndvcmtmbG93VHlwZVwiXG4gIChyZXZpZXdlcldvcmtmbG93VHlwZUNoYW5nZSk9XCJyZXZpZXdlclR5cGVDaGFuZ2UoJGV2ZW50KVwiXG4gIFt3b3JrZmxvd0xpc3RdPVwid29ya2Zsb3dMaXN0XCJcbiAgW3dvcmtmbG93VGV4dF09XCInQXBwcm92YWwgV29ya2Zsb3cnXCJcbj5cbjwvYXBwLW93bmVyLWxpc3Q+XG5cbjxhcHAtb3duZXItbGlzdFxuICAqbmdJZj1cImFjdGl2ZVNlbGVjdG9yID09PSAnb3duZXJzJ1wiXG4gIFtsaXN0SGVhZGluZ109XCInU2VsZWN0IE93bmVyKHMpJ1wiXG4gIFtzaW5ndWxhclRleHRdPVwiJ1VzZXIgc2VsZWN0ZWQnXCJcbiAgW3BsdXJhbFRleHRdPVwiJ1VzZXJzIHNlbGVjdGVkJ1wiXG4gIFt1c2Vyc0xpc3RdPVwiYWxsQXBwcm92ZXJzXCJcbiAgW3Nob3dXb3JrZmxvd109XCJmYWxzZVwiXG4gIFt1c2VySWRLZXldPVwiJ21lbWJlcl9pZCdcIlxuICBbaXRlbUVtYWlsS2V5XT1cIidtZW1iZXJfZW1haWwnXCJcbiAgW2l0ZW1OYW1lS2V5XT1cIidtZW1iZXJfbmFtZSdcIlxuICAoc2F2ZVNlbGVjdGVkTGlzdCk9XCJzYXZlU2VsZWN0ZWRMaXN0KCdvd25lcnMnLCAkZXZlbnQpXCJcbiAgKGNsb3NlVXNlcnNMaXN0KT1cImRpc2FibGVTZWxlY3RvcigpXCJcbiAgW21vZGVdPVwibW9kZVwiXG4gIFtzZWxlY3RlZFVzZXJzXT1cInBvbGljeUZvcm0/LnBvbGljeV9vd25lcnMgPz8gW11cIlxuPlxuPC9hcHAtb3duZXItbGlzdD5cblxuPGFwcC1zZWxlY3QtdGVtcGxhdGUtbGlzdFxuICAqbmdJZj1cInRlbXBsYXRlVmlld1wiXG4gIFtzZWxlY3RlZENhdGVnb3J5SWRdPVwicG9saWN5Rm9ybT8uc2VsZWN0ZWRDYXRlZ29yaWVzXCJcbiAgKG9uVGVtcGxhdGVTZWxlY3QpPVwib25UZW1wbGF0ZVNlbGVjdCgkZXZlbnQpXCJcbj48L2FwcC1zZWxlY3QtdGVtcGxhdGUtbGlzdD5cbiJdfQ==