vcomply-workflow-engine 2.9.62 → 2.9.64

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 (59) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +154 -122
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.js +28 -36
  4. package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngfactory.js +35 -25
  5. package/esm2015/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.ngsummary.json +1 -1
  6. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.js +14 -8
  7. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.ngfactory.js +13 -9
  8. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.ngsummary.json +1 -1
  9. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow.component.js +21 -4
  10. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow.component.ngfactory.js +8 -5
  11. package/esm2015/lib/sharedComponents/approval-workflow/approval-workflow.component.ngsummary.json +1 -1
  12. package/esm2015/lib/sharedComponents/assessment-list/assessment-list.component.js +2 -2
  13. package/esm2015/lib/sharedComponents/assessment-list/assessment-list.component.ngfactory.js +5 -5
  14. package/esm2015/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.js +2 -2
  15. package/esm2015/lib/sharedComponents/checkpoint-policy/checkpoints-policy-questions/checkpoints-policy-questions.component.ngfactory.js +2 -2
  16. package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.js +2 -2
  17. package/esm2015/lib/sharedComponents/floating-bar/floating-bar.component.ngfactory.js +3 -3
  18. package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.js +4 -4
  19. package/esm2015/lib/sharedComponents/format-and-evidence/format-and-evidence.component.ngfactory.js +19 -40
  20. package/esm2015/lib/sharedComponents/frequency/frequency-checkbox-list/frequency-checkbox-list.component.js +3 -3
  21. package/esm2015/lib/sharedComponents/frequency/frequency-checkbox-list/frequency-checkbox-list.component.ngfactory.js +4 -4
  22. package/esm2015/lib/sharedComponents/frequency/frequency-container/frequency-container.component.js +3 -3
  23. package/esm2015/lib/sharedComponents/frequency/frequency-container/frequency-container.component.ngfactory.js +7 -7
  24. package/esm2015/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.js +3 -3
  25. package/esm2015/lib/sharedComponents/frequency/frequency-lifecycle/frequency-lifecycle.component.ngfactory.js +3 -3
  26. package/esm2015/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.js +3 -3
  27. package/esm2015/lib/sharedComponents/frequency/frequency-one-time/frequency-one-time.component.ngfactory.js +9 -9
  28. package/esm2015/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.js +3 -3
  29. package/esm2015/lib/sharedComponents/frequency/frequency-radio-list/frequency-radio-list.component.ngfactory.js +4 -4
  30. package/esm2015/lib/sharedComponents/frequency/frequency-top/frequency-top.component.js +5 -5
  31. package/esm2015/lib/sharedComponents/frequency/frequency-top/frequency-top.component.ngfactory.js +19 -19
  32. package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-checkbox-list/frequency-dialog-checkbox-list.component.js +1 -1
  33. package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.js +3 -3
  34. package/esm2015/lib/sharedComponents/frequency-dialog/frequency-dialog-container/frequency-dialog-container.component.ngfactory.js +2 -2
  35. package/esm2015/lib/sharedComponents/group-users-list/group-users-list.component.js +3 -3
  36. package/esm2015/lib/sharedComponents/group-users-list/group-users-list.component.ngfactory.js +2 -2
  37. package/esm2015/lib/sharedComponents/link-program/link-program/link-program.component.js +13 -13
  38. package/esm2015/lib/sharedComponents/link-program/link-program/link-program.component.ngfactory.js +61 -36
  39. package/esm2015/lib/sharedComponents/link-program/restapi.service.js +8 -8
  40. package/esm2015/lib/sharedComponents/select-approvers/select-approvers.component.js +2 -8
  41. package/esm2015/lib/sharedComponents/select-approvers/select-approvers.component.ngfactory.js +2 -2
  42. package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
  43. package/esm2015/lib/workflow-policy/workflow-policy.component.js +48 -25
  44. package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +415 -335
  45. package/esm2015/lib/workflow-policy/workflow-policy.component.ngsummary.json +1 -1
  46. package/esm2015/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.js +2 -2
  47. package/esm2015/lib/workflow-program/create-program-ui/floating-bar/floating-bar.component.ngfactory.js +2 -2
  48. package/fesm2015/vcomply-workflow-engine.js +154 -122
  49. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  50. package/lib/sharedComponents/approval-workflow/approval-create-form/approval-create-form.component.d.ts +3 -0
  51. package/lib/sharedComponents/approval-workflow/approval-workflow-list/approval-workflow-list.component.d.ts +3 -0
  52. package/lib/sharedComponents/approval-workflow/approval-workflow.component.d.ts +5 -0
  53. package/lib/sharedComponents/link-program/restapi.service.d.ts +1 -1
  54. package/lib/workflow-policy/workflow-policy.component.d.ts +9 -0
  55. package/package.json +2 -2
  56. package/vcomply-workflow-engine.metadata.json +1 -1
  57. package/lib/ui-kit/directive/directive.module.ts +0 -17
  58. package/lib/ui-kit/directive/stop-propagation.directive.spec.ts +0 -8
  59. package/lib/ui-kit/directive/stop-propagation.directive.ts +0 -15
@@ -109,7 +109,7 @@ export class LinkProgramComponent {
109
109
  getPrograms(data) {
110
110
  this.loader = true;
111
111
  let params = new HttpParams();
112
- params = params.append('mode', 'complianceCategory/programList');
112
+ // params = params.append('mode', 'complianceCategory/programList');
113
113
  params = params.append('programType', this.programTypeObject[this.activeTab]);
114
114
  params = params.append('pageName', "policyWorkroom");
115
115
  if ((data === null || data === void 0 ? void 0 : data.search) || this.searchText.program) {
@@ -120,10 +120,10 @@ export class LinkProgramComponent {
120
120
  }
121
121
  const request = {
122
122
  method: 'get',
123
- action: '/compliance/',
123
+ action: 'complianceGet',
124
124
  params
125
125
  };
126
- this.restApiService.apiDelegate(request).pipe(takeUntil(this.unsubscribe)).subscribe({
126
+ this.restApiService.apiDelegate(request, 'complianceCategory/programList').pipe(takeUntil(this.unsubscribe)).subscribe({
127
127
  next: (res) => {
128
128
  this.programData.data = res.data;
129
129
  this.programData.from = res.from;
@@ -151,10 +151,10 @@ export class LinkProgramComponent {
151
151
  }
152
152
  const request = {
153
153
  method: 'get',
154
- action: '/program/subCategories',
154
+ action: 'programEndpoint',
155
155
  params
156
156
  };
157
- this.restApiService.apiDelegate(request).pipe(takeUntil(this.unsubscribe)).subscribe({
157
+ this.restApiService.apiDelegate(request, '/subCategories').pipe(takeUntil(this.unsubscribe)).subscribe({
158
158
  next: (res) => {
159
159
  var _a, _b, _c, _d, _e;
160
160
  this.subCategoriesList.from = (_a = res.items_from) !== null && _a !== void 0 ? _a : 1;
@@ -177,22 +177,22 @@ export class LinkProgramComponent {
177
177
  this.getPrograms();
178
178
  }
179
179
  getResponsibilities(data) {
180
- var _a, _b, _c, _d;
180
+ var _a, _b, _c, _d, _e, _f, _g;
181
181
  this.loader = true;
182
182
  const request = {
183
183
  method: 'get',
184
- action: '/program/categoryResponsibilities',
184
+ action: 'programEndpoint',
185
185
  payloadObject: {
186
186
  "start_date": (_a = this.currentBusinessCycle) === null || _a === void 0 ? void 0 : _a.start_date,
187
187
  "end_date": (_b = this.currentBusinessCycle) === null || _b === void 0 ? void 0 : _b.end_date,
188
188
  "selected_cycle_arr": (_c = this.currentBusinessCycle) === null || _c === void 0 ? void 0 : _c.selected_cycle_arr,
189
189
  "selected_cycle": (_d = this.currentBusinessCycle) === null || _d === void 0 ? void 0 : _d.selected_cycle,
190
- 'categoryIds': this.selectedIds.categories,
191
- 'pageNo': this.responsibilitiesList.currentPage,
192
- 'searchText': (data === null || data === void 0 ? void 0 : data.search) ? this.searchText.responsibility : ''
190
+ 'categoryIds': (_e = this.selectedIds) === null || _e === void 0 ? void 0 : _e.categories,
191
+ 'pageNo': (_f = this.responsibilitiesList) === null || _f === void 0 ? void 0 : _f.currentPage,
192
+ 'searchText': (data === null || data === void 0 ? void 0 : data.search) ? (_g = this.searchText) === null || _g === void 0 ? void 0 : _g.responsibility : ''
193
193
  }
194
194
  };
195
- this.restApiService.apiDelegate(request).pipe(takeUntil(this.unsubscribe)).subscribe({
195
+ this.restApiService.apiDelegate(request, '/categoryResponsibilities').pipe(takeUntil(this.unsubscribe)).subscribe({
196
196
  next: (res) => {
197
197
  var _a, _b, _c, _d, _e;
198
198
  this.loader = false;
@@ -421,7 +421,7 @@ export class LinkProgramComponent {
421
421
  LinkProgramComponent.decorators = [
422
422
  { type: Component, args: [{
423
423
  selector: 'vc-link-program',
424
- template: "<div class=\"link-policy\" [class.animate]=\"animation\">\r\n <ng-container *ngIf=\"currentList =='programs'\">\r\n <div class=\"program-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Select a Program</div>\r\n <!-- <button (click)=\"goBack()\" class=\"back-btn vx-fs-12 vx-fw-500 vx-lable-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"><i class=\"icons vx-mr-1\">&#xe91d;</i> Back</button> -->\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row vx-d-flex vx-mb-2\">\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTabProgram('regulations')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">REGULATIONS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">{{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTabProgram('standards')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">STANDARDS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">{{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'internal_controls'\" (click)=\"changeTabProgram('internal_controls')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">INTERNAL CONTROLS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">{{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTabProgram('others')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">OTHERS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">{{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTabProgram('regulations')\">\r\n <div class=\"left\">\r\n <label>REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div> -->\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTabProgram('standards')\">\r\n <div class=\"left\">\r\n <label>STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div> -->\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'internal_controls'\" (click)=\"changeTabProgram('internal_controls')\">\r\n <div class=\"left\">\r\n <label>INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div> -->\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTabProgram('others')\">\r\n <div class=\"left\">\r\n <label>OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div> -->\r\n </div>\r\n <div class=\"link-policy-search vx-mb-2\">\r\n <i class=\"icons vx-fs-12\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search Programs\" #searchProgram\r\n (keyup.enter)=\"searchBy($event.target.value,'programs')\" />\r\n </div>\r\n <vui-pagination *ngIf=\"(!loader) && programData.totalPages>1\" [from]=\"programData.from\"\r\n [to]=\"programData.to\" [total]=\"programData.totalRecords\" [showPageDetail]=\"true\"\r\n [totalPage]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" [pageInSingleView]=\"5\"\r\n (pageChanged)=\"changePage($event,'programs')\">\r\n </vui-pagination>\r\n <div class=\"program-listing-part vx-mb-4\" [class.with-pagination]=\"(!loader) && programData.totalPages>1\">\r\n <app-no-data *ngIf=\"programData?.data?.length==0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"selectedValues?.program?.category_id == program?.category_id\"\r\n *ngFor=\"let program of programData.data;let i = index\">\r\n <div class=\"table-row main-list\" [class.active]=\"selectedValues?.program?.category_id == program?.category_id\"\r\n [class.disabled]=\"program?.programReportExists==0\" (click)=\"selectProgram(true,program)\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n\r\n <app-cs-radio [name]=\"'policyName'\"\r\n [checked]=\"selectedValues?.program?.category_id == program?.category_id\"\r\n (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" appTooltip=\"{{program?.name | tooltipValidation}}\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"link-policy-floating-bar vx-d-flex vx-align-center vx-justify-between vx-p-3\">\r\n <div class=\"link-policy-floating-bar-left vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"selectedValues?.program?.name\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('programs','')\">&#xe9ae;</i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedValues?.program?.name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedValues?.program?.name}}</span>\r\n </div>\r\n\r\n <!-- <div class=\"chip vx-pl-2 vx-pr-2 vx-txt-blue vx-fs-12 vx-lh-6 vx-mr-1\" *ngIf=\"selectedValues?.program?.name\"><i class=\"icons vx-mr-1\" (click)=\"remove('programs','')\">&#xe9ae;</i>{{selectedValues?.program?.name}}</div> -->\r\n <!-- <div class=\"vx-fs-12 vx-fw-500 vx-paragraph-txt vx-ml-2\">Policy selected</div> -->\r\n\r\n </div>\r\n <div class=\"link-policy-floating-bar-right vx-d-flex vx-align-center\">\r\n <button (click)=\"goBack()\" class=\"cancel-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-m-0 vx-mr-2 vx-d-flex vx-align-center vx-justify-center vx-txt-red\">CANCEL</button>\r\n <button (click)=\"saveChanges('programs')\" [class.disabled]=\"!selectedValues?.program?.name\" class=\"white-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-m-0 vx-mr-1 vx-d-flex vx-align-center vx-justify-center vx-txt-blue\">\r\n LINK CATEGORIES AND RESPONSIBILITIES</button>\r\n <button (click)=\"saveChanges('programsOnly')\" [class.disabled]=\"!selectedValues?.program?.name\" class=\"next-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-m-0 vx-d-flex vx-align-center vx-justify-center vx-txt-white\">Link\r\n <i class=\"icons vx-ml-2\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\">You have opted to link all the responsibilities under the selected program \"{{selectedValues?.program?.name }}\" and it's sub-categories.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChangesFromProgram(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChangesFromProgram(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentList=='categories'\">\r\n <div class=\"link-policy-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt vx-d-flex vx-align-center\"><button (click)=\"goBack('categories')\" class=\"back-btn vx-fs-14 vx-fw-500 vx-lable-txt vx-p-0 vx-mr-2 vx-d-flex vx-align-center\"><i class=\"icons\">&#xe91d;</i></button> Select Categories to link with this policy</div>\r\n </div>\r\n <div class=\"link-policy-body\">\r\n <div class=\"link-policy-search vx-mb-2\">\r\n <i class=\"icons vx-fs-12\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search categories\" #searchCategory\r\n (keyup.enter)=\"searchBy($event.target.value,'categories')\" />\r\n </div>\r\n <vui-pagination *ngIf=\"(!loader) && subCategoriesList.totalPage>1\" [from]=\"subCategoriesList.from\"\r\n [to]=\"subCategoriesList.to\" [total]=\"subCategoriesList.totalRecords\" [showPageDetail]=\"true\"\r\n [totalPage]=\"subCategoriesList.totalPage\" [currentPage]=\"subCategoriesList.currentPage\" [pageInSingleView]=\"5\"\r\n (pageChanged)=\"changePage($event,'programs')\">\r\n </vui-pagination>\r\n\r\n <div class=\"link-policy-table vx-mb-4\" [class.with-pagination]=\"(!loader) && subCategoriesList.totalPage>1\">\r\n <ng-container *ngIf=\"!loader && subCategoriesList.data?.length>0\">\r\n <div class=\"table-header\">\r\n <div class=\"table-row\">\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n #</div>\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n CATEGORIES</div>\r\n </div>\r\n </div>\r\n <div class=\"table-body\">\r\n <!-- when checkbox was checked then active class was true -->\r\n <div class=\"table-row\" [class.active]=\"selectedIds.categories.includes(category.category_id)\"\r\n *ngFor=\"let category of subCategoriesList.data; let i = index;\">\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+subCategoriesList.from\" placement=\"bottom\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"true\">{{i+subCategoriesList.from}}</div>\r\n <vui-checkbox [checked]=\"selectedIds.categories.includes(category.category_id)\"\r\n (change)=\"selectCategory($event.target.checked,category)\"></vui-checkbox>\r\n </div>\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n <div class=\"vx-d-block vx-w-100\">\r\n\r\n <div class=\"value vx-fs-12 vx-label-txt\" [appTooltip]=\"category?.item_name | tooltipValidation\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{category?.item_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <app-no-data *ngIf=\"!loader && subCategoriesList.data?.length==0\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n\r\n <div class=\"link-policy-floating-bar vx-d-flex vx-align-center vx-justify-between vx-p-3\">\r\n <div class=\"link-policy-floating-bar-left vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"selectedValues?.categories?.length>0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('categories',selectedValues?.categories[0])\">&#xe9ae;</i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedValues?.categories[0]?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedValues?.categories[0]?.item_name}}</span>\r\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\" appPopover (click)=\"programCount.popover()\" placement=\"left\" *ngIf=\"selectedValues?.categories?.length>1\">+{{selectedValues?.categories?.slice(1).length}}</button>\r\n </div>\r\n <app-popover #programCount>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let selectedCategory of selectedValues?.categories?.slice(1)\">\r\n <div class=\"avatar-card\">\r\n <i class=\"icons cross-btn vx-fs-12 vx-paragaph-txt vx-mr-2\" (click)=\"remove('categories',selectedCategory)\">&#xe9ae;</i>\r\n <span class=\"value\">{{selectedCategory?.item_name}}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n\r\n <!-- <div class=\"chip vx-pl-2 vx-pr-2 vx-txt-blue vx-fs-12 vx-lh-6 vx-mr-1\" *ngIf=\"selectedValues.categories.length>0\"><i (click)=\"remove('categories',selectedValues?.categories[0])\" class=\"icons vx-mr-1\">&#xe9ae;</i> {{selectedValues?.categories[0]?.item_name}}</div>\r\n <ng-container *ngIf=\"selectedValues.categories.length>1\">\r\n <button class=\"count vx-fs-12 vx-fw-500 vx-txt-white vx-p-0 vx-pl-1 vx-pr-1 vx-m-0 vx-ml-1 vx-d-flex vx-align-center vx-justify-center\" vcPopover (click)=\"programCount.popover()\" position=\"left\">+{{selectedValues?.categories?.slice(1).length}}</button>\r\n <div class=\"vx-fs-12 vx-fw-500 vx-paragraph-txt vx-ml-2\">{{(selectedValues?.categories?.slice(1)?.length==1)?'Category selected':'Categories selected'}}</div>\r\n <app-popover #programCount>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let selectedCategory of selectedValues?.categories?.slice(1)\">\r\n <div class=\"avatar-card\">\r\n <i class=\"icons cross-btn vx-fs-12 vx-txt-blue vx-mr-2\" (click)=\"remove('categories',selectedCategory)\">&#xe9ae;</i>\r\n <span class=\"value\">{{selectedCategory?.item_name}}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </ng-container> -->\r\n </div>\r\n <div class=\"link-policy-floating-bar-right vx-d-flex vx-align-center\">\r\n <button (click)=\"goBack('categories')\" class=\"cancel-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-red\">CANCEL</button>\r\n <button (click)=\"saveChanges('categories')\" [class.disabled]=\"!selectedValues?.categories?.length\" class=\"next-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-white\">Add <i class=\"icons vx-ml-2\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentList=='responsibilities'\">\r\n <div class=\"link-policy-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"page-title vx-fs-14 vx-fw-500 vx-label-txt\">Select Responsibilities to link with this policy </div>\r\n <!-- <button (click)=\"goBack('responsibilities')\"\r\n class=\"back-btn vx-fs-14 vx-fw-500 vx-label-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"><i\r\n class=\"icons vx-mr-1\">&#xe91d;</i> BACK</button> -->\r\n </div>\r\n <div class=\"link-policy-body\">\r\n <div class=\"link-policy-search vx-mb-2\">\r\n <i class=\"icons vx-fs-12\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search Responsibilities\" (keyup.enter)=\"searchBy($event.target.value,'responsibilities')\" />\r\n </div>\r\n <vui-pagination *ngIf=\"(!loader) && responsibilitiesList.totalPage>1\" [from]=\"responsibilitiesList.from\"\r\n [to]=\"responsibilitiesList.to\" [total]=\"responsibilitiesList.totalRecords\" [showPageDetail]=\"true\"\r\n [totalPage]=\"responsibilitiesList.totalPage\" [currentPage]=\"responsibilitiesList.currentPage\" [pageInSingleView]=\"5\"\r\n (pageChanged)=\"changePage($event,'responsibilities')\">\r\n </vui-pagination>\r\n\r\n <div class=\"link-policy-table vx-mb-4\" [class.with-pagination]=\"(!loader) && subCategoriesList.totalPage>1\">\r\n <ng-container *ngIf=\"!loader && responsibilitiesList.data?.length>0\">\r\n <div class=\"table-header\">\r\n <div class=\"table-row\">\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n #</div>\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n RESPONSIBLITIES</div>\r\n </div>\r\n </div>\r\n <div class=\"table-body\">\r\n <!-- when checkbox was checked then active class was true -->\r\n\r\n <div class=\"table-row\"\r\n [class.active]=\"selectedIds.responsibilities.includes(responsibility.ReportId)\"\r\n *ngFor=\"let responsibility of responsibilitiesList.data; let i = index;\">\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+responsibilitiesList.from\" placement=\"bottom\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"true\">{{i+responsibilitiesList.from}}</div>\r\n <vui-checkbox\r\n [checked]=\"selectedIds.responsibilities.includes(responsibility.ReportId)\"\r\n (change)=\"selectResponsibility($event.target.checked,responsibility)\">\r\n </vui-checkbox>\r\n </div>\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n\r\n <div class=\"value vx-fs-12 vx-label-txt\" [appTooltip]=\"responsibility?.control_id + responsibility?.ReportName | tooltipValidation\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-10 vx-fw-500 vx-tt-uppercase vx-mr-1\">{{responsibility?.control_id}}</span> {{responsibility?.ReportName}}</div>\r\n </div>\r\n <!-- <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n <div class=\"value vx-fs-12 vx-label-txt\"\r\n [appTooltip]=\"'[CID-20210005] A.8.1.3 Acceptable Use of Assets'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\"><span\r\n class=\"vx-fs-10 vx-fw-500 vx-tt-uppercase vx-mr-1\">[CID-20210005]</span> A.8.1.3\r\n Acceptable Use of Assets</div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <app-no-data *ngIf=\"!loader && responsibilitiesList.data?.length==0\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n <div class=\"link-policy-floating-bar vx-d-flex vx-align-center vx-justify-between vx-p-3 vx-mt-1\">\r\n <div class=\"link-policy-floating-bar-left vx-d-flex vx-align-center\">\r\n <div class=\"chip vx-pl-2 vx-pr-2 vx-txt-blue vx-fs-12 vx-lh-6 vx-mr-1\"\r\n *ngIf=\"selectedValues.responsibilities.length>0\"><i\r\n (click)=\"remove('responsibilities',selectedValues?.responsibilities[0])\"\r\n class=\"icons vx-mr-1\">&#xe9ae;</i> {{selectedValues?.responsibilities[0]?.ReportName}}</div>\r\n <ng-container *ngIf=\"selectedValues.responsibilities.length>1\">\r\n <button\r\n class=\"count vx-fs-12 vx-fw-500 vx-txt-white vx-p-0 vx-pl-1 vx-pr-1 vx-m-0 vx-ml-1 vx-d-flex vx-align-center vx-justify-center\"\r\n vcPopover (click)=\"responsibilitiesPopover.popover()\"\r\n position=\"left\">+{{selectedValues?.responsibilities?.slice(1).length}}</button>\r\n <div class=\"vx-fs-12 vx-fw-500 vx-paragraph-txt vx-ml-2\">\r\n {{(selectedValues?.responsibilities?.slice(1)?.length==1)?'Responsibility\r\n selected':'Responsibilities selected'}}</div>\r\n <app-popover #responsibilitiesPopover>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let selectedres of selectedValues?.responsibilities?.slice(1)\">\r\n <div class=\"avatar-card\">\r\n <i class=\"icons cross-btn vx-fs-12 vx-txt-blue vx-mr-2\" (click)=\"remove('responsibilities',selectedres)\">&#xe9ae;</i>\r\n <span class=\"value\">{{selectedres?.ReportName}}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </ng-container>\r\n\r\n </div>\r\n <div class=\"link-policy-floating-bar-right vx-d-flex vx-align-center\">\r\n <button (click)=\"goBack('responsibilities')\"\r\n class=\"cancel-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-red\">CANCEL</button>\r\n <button (click)=\"saveChanges('responsibilities')\" [class.disabled]=\"!selectedValues?.responsibilities?.length\"\r\n class=\"next-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-white\">ADD\r\n <i class=\"icons vx-ml-2\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <app-loader *ngIf=\"loader || submissionLoader\"></app-loader>\r\n\r\n\r\n</div>\r\n",
424
+ template: "<div class=\"link-policy\" [class.animate]=\"animation\">\r\n <ng-container *ngIf=\"currentList =='programs'\">\r\n <div class=\"program-listing-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt\">Select a Program</div>\r\n <!-- <button (click)=\"goBack()\" class=\"back-btn vx-fs-12 vx-fw-500 vx-lable-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"><i class=\"icons vx-mr-1\">&#xe91d;</i> Back</button> -->\r\n </div>\r\n <div class=\"program-listing-body\">\r\n <div class=\"filter-card-row vx-d-flex vx-mb-2\">\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTabProgram('regulations')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">REGULATIONS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">{{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTabProgram('standards')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">STANDARDS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">{{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'internal_controls'\" (click)=\"changeTabProgram('internal_controls')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">INTERNAL CONTROLS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">{{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div>\r\n </div>\r\n <div class=\"filter-card vx-bg-white vx-d-flex vx-justify-between vx-align-center vx-pt-2 vx-pb-2 vx-pl-3 vx-pr-3 vx-w-100\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTabProgram('others')\">\r\n <div class=\"left vx-d-block vx-w-100\">\r\n <div class=\"label vx-d-flex vx-align-center\">\r\n <div class=\"vx-d-block vx-lh-3\">\r\n <label class=\"vx-paragraph-txt vx-fw-500 vx-tt-uppercase vx-d-flex vx-justify-between vx-align-center\">OTHERS</label>\r\n <span class=\"vx-fs-10 vx-fw-600 vx-label-txt vx-lh-4\" *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">{{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"right vx-d-flex vx-justify-end vx-w-100\">\r\n <span class=\"counter vx-txt-white vx-fw-500 vx-d-inline-block vx-text-center\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'regulations'\" (click)=\"changeTabProgram('regulations')\">\r\n <div class=\"left\">\r\n <label>REGULATIONS</label>\r\n <p *ngIf=\"programData?.SelectedRegulationProgramsCount> 0\">\r\n {{programData?.SelectedRegulationProgramsCount}}\r\n {{(programData?.SelectedRegulationProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllRegulationProgramsCount}}</span>\r\n </div> -->\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'standards'\" (click)=\"changeTabProgram('standards')\">\r\n <div class=\"left\">\r\n <label>STANDARDS</label>\r\n <p *ngIf=\"programData?.SelectedStandardProgramsCount> 0\">\r\n {{programData?.SelectedStandardProgramsCount}}\r\n {{(programData?.SelectedStandardProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllStandardProgramsCount}}</span>\r\n </div> -->\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'internal_controls'\" (click)=\"changeTabProgram('internal_controls')\">\r\n <div class=\"left\">\r\n <label>INTERNAL CONTROLS</label>\r\n <p *ngIf=\"programData?.SelectedInternalControlsProgramsCount> 0\">\r\n {{programData?.SelectedInternalControlsProgramsCount}}\r\n {{(programData?.SelectedInternalControlsProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllInternalControlsProgramsCount}}</span>\r\n </div> -->\r\n <!-- <div class=\"filter-card\" [class.active]=\"activeTab == 'others'\" (click)=\"changeTabProgram('others')\">\r\n <div class=\"left\">\r\n <label>OTHERS</label>\r\n <p *ngIf=\"programData?.SelectedOthersProgramsCount> 0\">\r\n {{programData?.SelectedOthersProgramsCount}}\r\n {{(programData?.SelectedOthersProgramsCount==1)?'Program':'Programs'}} selected\r\n </p>\r\n </div>\r\n <span class=\"counter\">{{programData?.AllOthersProgramsCount}}</span>\r\n </div> -->\r\n </div>\r\n <div class=\"link-policy-search vx-mb-2\">\r\n <i class=\"icons vx-fs-12\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search Programs\" #searchProgram\r\n (keyup.enter)=\"searchBy($event.target.value,'programs')\" />\r\n </div>\r\n <vui-pagination *ngIf=\"(!loader) && programData.totalPages>1\" [from]=\"programData.from\"\r\n [to]=\"programData.to\" [total]=\"programData.totalRecords\" [showPageDetail]=\"true\"\r\n [totalPage]=\"programData.totalPages\" [currentPage]=\"programData.currentPage\" [pageInSingleView]=\"5\"\r\n (pageChanged)=\"changePage($event,'programs')\">\r\n </vui-pagination>\r\n <div class=\"program-listing-part vx-mb-4\" [class.with-pagination]=\"(!loader) && programData.totalPages>1\">\r\n <app-no-data *ngIf=\"programData?.data?.length==0 && !loader\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n\r\n <div class=\"program-listing-item\" [class.active]=\"selectedValues?.program?.category_id == program?.category_id\"\r\n *ngFor=\"let program of programData.data;let i = index\">\r\n <div class=\"table-row main-list\" [class.active]=\"selectedValues?.program?.category_id == program?.category_id\"\r\n [class.disabled]=\"program?.programReportExists==0\" (click)=\"selectProgram(true,program)\">\r\n <div class=\"table-column serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+programData.from\" placement=\"bottom\" delay=\"0\" type=\"black\"\r\n [tooltipMandatory]=\"true\">{{i+programData.from}}</div>\r\n\r\n <app-cs-radio [name]=\"'policyName'\"\r\n [checked]=\"selectedValues?.program?.category_id == program?.category_id\"\r\n (checkedEvent)=\"selectProgram($event.target.checked,program)\"></app-cs-radio>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"name-with-count\">\r\n <div class=\"value\" appTooltip=\"{{program?.name | tooltipValidation}}\" placement=\"bottom-left\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"false\">{{program?.name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"link-policy-floating-bar vx-d-flex vx-align-center vx-justify-between vx-p-3\">\r\n <div class=\"link-policy-floating-bar-left vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"selectedValues?.program?.name\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('programs','')\">&#xe9ae;</i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedValues?.program?.name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedValues?.program?.name}}</span>\r\n </div>\r\n\r\n <!-- <div class=\"chip vx-pl-2 vx-pr-2 vx-txt-blue vx-fs-12 vx-lh-6 vx-mr-1\" *ngIf=\"selectedValues?.program?.name\"><i class=\"icons vx-mr-1\" (click)=\"remove('programs','')\">&#xe9ae;</i>{{selectedValues?.program?.name}}</div> -->\r\n <!-- <div class=\"vx-fs-12 vx-fw-500 vx-paragraph-txt vx-ml-2\">Policy selected</div> -->\r\n\r\n </div>\r\n <div class=\"link-policy-floating-bar-right vx-d-flex vx-align-center\">\r\n <button (click)=\"goBack()\" class=\"cancel-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-m-0 vx-mr-2 vx-d-flex vx-align-center vx-justify-center vx-txt-red\">CANCEL</button>\r\n <!-- <button (click)=\"saveChanges('programs')\" [class.disabled]=\"!selectedValues?.program?.name\" class=\"white-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-m-0 vx-mr-1 vx-d-flex vx-align-center vx-justify-center vx-txt-blue\">\r\n LINK CATEGORIES AND RESPONSIBILITIES</button> -->\r\n <button (click)=\"saveChanges('programs')\" [class.disabled]=\"!selectedValues?.program?.name\" class=\"next-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-m-0 vx-d-flex vx-align-center vx-justify-center vx-txt-white\">Link\r\n <i class=\"icons vx-ml-2\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"program-listing-confirmation\" *ngIf=\"displayConfirmationMessage\">\r\n <div class=\"confirmation-top\">\r\n <div class=\"icon-block\"><i class=\"icons\">&#xe930;</i></div>\r\n <div class=\"text\">You have opted to link all the responsibilities under the selected program \"{{selectedValues?.program?.name }}\" and it's sub-categories.</div>\r\n </div>\r\n <div class=\"confirmation-bottom\">\r\n <div class=\"message\">Are you sure you would like to proceed?</div>\r\n <div class=\"button-group\">\r\n <button class=\"no-btn\" (click)=\"saveChangesFromProgram(false)\">NO</button>\r\n <button class=\"yes-btn\" (click)=\"saveChangesFromProgram(true)\">YES</button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentList=='categories'\">\r\n <div class=\"link-policy-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt vx-d-flex vx-align-center\"><button (click)=\"goBack('categories')\" class=\"back-btn vx-fs-14 vx-fw-500 vx-lable-txt vx-p-0 vx-mr-2 vx-d-flex vx-align-center\"><i class=\"icons\">&#xe91d;</i></button> Select program categories to link with this policy</div>\r\n </div>\r\n <div class=\"link-policy-body\">\r\n <div class=\"link-policy-search vx-mb-2\">\r\n <i class=\"icons vx-fs-12\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search program categories\" #searchCategory\r\n (keyup.enter)=\"searchBy($event.target.value,'categories')\" />\r\n </div>\r\n <vui-pagination *ngIf=\"(!loader) && subCategoriesList.totalPage>1\" [from]=\"subCategoriesList.from\"\r\n [to]=\"subCategoriesList.to\" [total]=\"subCategoriesList.totalRecords\" [showPageDetail]=\"true\"\r\n [totalPage]=\"subCategoriesList.totalPage\" [currentPage]=\"subCategoriesList.currentPage\" [pageInSingleView]=\"5\"\r\n (pageChanged)=\"changePage($event,'programs')\">\r\n </vui-pagination>\r\n\r\n <div class=\"link-policy-table vx-mb-4\" [class.with-pagination]=\"(!loader) && subCategoriesList.totalPage>1\">\r\n <ng-container *ngIf=\"!loader && subCategoriesList.data?.length>0\">\r\n <div class=\"table-header\">\r\n <div class=\"table-row\">\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n #</div>\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n CATEGORIES</div>\r\n </div>\r\n </div>\r\n <div class=\"table-body\">\r\n <!-- when checkbox was checked then active class was true -->\r\n <div class=\"table-row\" [class.active]=\"selectedIds.categories.includes(category.category_id)\"\r\n *ngFor=\"let category of subCategoriesList.data; let i = index;\">\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+subCategoriesList.from\" placement=\"bottom\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"true\">{{i+subCategoriesList.from}}</div>\r\n <vui-checkbox [checked]=\"selectedIds.categories.includes(category.category_id)\"\r\n (change)=\"selectCategory($event.target.checked,category)\"></vui-checkbox>\r\n </div>\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n <div class=\"vx-d-block vx-w-100\">\r\n\r\n <div class=\"value vx-fs-12 vx-label-txt\" [appTooltip]=\"category?.item_name | tooltipValidation\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n {{category?.item_name}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n\r\n <app-no-data *ngIf=\"!loader && subCategoriesList.data?.length==0\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n\r\n <div class=\"link-policy-floating-bar vx-d-flex vx-align-center vx-justify-between vx-p-3\">\r\n <div class=\"link-policy-floating-bar-left vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"selectedValues?.categories?.length>0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('categories',selectedValues?.categories[0])\">&#xe9ae;</i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedValues?.categories[0]?.item_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedValues?.categories[0]?.item_name}}</span>\r\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\" appPopover (click)=\"programCount.popover()\" placement=\"left\" *ngIf=\"selectedValues?.categories?.length>1\">+{{selectedValues?.categories?.slice(1).length}}</button>\r\n \r\n </div>\r\n <div *ngIf=\"selectedValues?.categories?.slice(1).length\" class=\"vx-fs-12 vx-fw-500 vx-paragraph-txt vx-ml-2\">\r\n {{(selectedValues?.categories?.slice(1).length === 1)? 'Program category\r\n selected':'Program categories selected'}}\r\n </div>\r\n <app-popover #programCount>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let selectedCategory of selectedValues?.categories?.slice(1)\">\r\n <div class=\"avatar-card\">\r\n <i class=\"icons cross-btn vx-fs-12 vx-paragraph-txt vx-mr-2\" (click)=\"remove('categories',selectedCategory)\">&#xe9ae;</i>\r\n <span class=\"value\">{{selectedCategory?.item_name}}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n\r\n <!-- <div class=\"chip vx-pl-2 vx-pr-2 vx-txt-blue vx-fs-12 vx-lh-6 vx-mr-1\" *ngIf=\"selectedValues.categories.length>0\"><i (click)=\"remove('categories',selectedValues?.categories[0])\" class=\"icons vx-mr-1\">&#xe9ae;</i> {{selectedValues?.categories[0]?.item_name}}</div>\r\n <ng-container *ngIf=\"selectedValues.categories.length>1\">\r\n <button class=\"count vx-fs-12 vx-fw-500 vx-txt-white vx-p-0 vx-pl-1 vx-pr-1 vx-m-0 vx-ml-1 vx-d-flex vx-align-center vx-justify-center\" vcPopover (click)=\"programCount.popover()\" position=\"left\">+{{selectedValues?.categories?.slice(1).length}}</button>\r\n <div class=\"vx-fs-12 vx-fw-500 vx-paragraph-txt vx-ml-2\">{{(selectedValues?.categories?.slice(1)?.length==1)?'Category selected':'Categories selected'}}</div>\r\n <app-popover #programCount>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let selectedCategory of selectedValues?.categories?.slice(1)\">\r\n <div class=\"avatar-card\">\r\n <i class=\"icons cross-btn vx-fs-12 vx-txt-blue vx-mr-2\" (click)=\"remove('categories',selectedCategory)\">&#xe9ae;</i>\r\n <span class=\"value\">{{selectedCategory?.item_name}}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </ng-container> -->\r\n </div>\r\n <div class=\"link-policy-floating-bar-right vx-d-flex vx-align-center\">\r\n <button (click)=\"goBack('categories')\" class=\"cancel-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-red\">CANCEL</button>\r\n <button (click)=\"saveChanges('categories')\" [class.disabled]=\"!selectedValues?.categories?.length\" class=\"next-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-white vx-ml-5\">Add <i class=\"icons vx-ml-2\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"currentList=='responsibilities'\">\r\n <div class=\"link-policy-head vx-d-flex vx-align-center vx-justify-between vx-pl-4 vx-pr-4\">\r\n <div class=\"vx-fs-14 vx-fw-500 vx-label-txt vx-d-flex vx-align-center\"><button (click)=\"goBack('responsibilities')\" class=\"back-btn vx-fs-14 vx-fw-500 vx-lable-txt vx-p-0 vx-mr-2 vx-d-flex vx-align-center\"><i class=\"icons\">&#xe91d;</i></button> Select Responsibilities to link with this policy </div>\r\n <!-- <div class=\"page-title vx-fs-14 vx-fw-500 vx-label-txt\">Select Responsibilities to link with this policy </div> -->\r\n\r\n <!-- <button (click)=\"goBack('responsibilities')\"\r\n class=\"back-btn vx-fs-14 vx-fw-500 vx-label-txt vx-tt-uppercase vx-p-0 vx-m-0 vx-d-flex vx-align-center\"><i\r\n class=\"icons vx-mr-1\">&#xe91d;</i> BACK</button> -->\r\n </div>\r\n <div class=\"link-policy-body\">\r\n <div class=\"link-policy-search vx-mb-2\">\r\n <i class=\"icons vx-fs-12\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search Responsibilities\" (keyup.enter)=\"searchBy($event.target.value,'responsibilities')\" />\r\n </div>\r\n <vui-pagination *ngIf=\"(!loader) && responsibilitiesList.totalPage>1\" [from]=\"responsibilitiesList.from\"\r\n [to]=\"responsibilitiesList.to\" [total]=\"responsibilitiesList.totalRecords\" [showPageDetail]=\"true\"\r\n [totalPage]=\"responsibilitiesList.totalPage\" [currentPage]=\"responsibilitiesList.currentPage\" [pageInSingleView]=\"5\"\r\n (pageChanged)=\"changePage($event,'responsibilities')\">\r\n </vui-pagination>\r\n\r\n <div class=\"link-policy-table vx-mb-4\" [class.with-pagination]=\"(!loader) && subCategoriesList.totalPage>1\">\r\n <ng-container *ngIf=\"!loader && responsibilitiesList.data?.length>0\">\r\n <div class=\"table-header\">\r\n <div class=\"table-row\">\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n #</div>\r\n <div\r\n class=\"table-column vx-fs-10 vx-fw-500 vx-label-txt vx-lh-5 vx-tt-uppercase vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n RESPONSIBLITIES</div>\r\n </div>\r\n </div>\r\n <div class=\"table-body\">\r\n <!-- when checkbox was checked then active class was true -->\r\n\r\n <div class=\"table-row\"\r\n [class.active]=\"selectedIds.responsibilities.includes(responsibility.ReportId)\"\r\n *ngFor=\"let responsibility of responsibilitiesList.data; let i = index;\">\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center serial\">\r\n <div class=\"sr-no\" [appTooltip]=\"i+responsibilitiesList.from\" placement=\"bottom\" delay=\"0\"\r\n type=\"black\" [tooltipMandatory]=\"true\">{{i+responsibilitiesList.from}}</div>\r\n <vui-checkbox\r\n [checked]=\"selectedIds.responsibilities.includes(responsibility.ReportId)\"\r\n (change)=\"selectResponsibility($event.target.checked,responsibility)\">\r\n </vui-checkbox>\r\n </div>\r\n <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n\r\n <div class=\"value vx-fs-12 vx-label-txt\" [appTooltip]=\"responsibility?.control_id + responsibility?.ReportName | tooltipValidation\"\r\n placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">\r\n <span class=\"vx-fs-10 vx-fw-500 vx-tt-uppercase vx-mr-1\">{{responsibility?.control_id}}</span> {{responsibility?.ReportName}}</div>\r\n </div>\r\n <!-- <div class=\"table-column vx-pl-1 vx-pr-1 vx-d-flex vx-align-center category-name\">\r\n <div class=\"value vx-fs-12 vx-label-txt\"\r\n [appTooltip]=\"'[CID-20210005] A.8.1.3 Acceptable Use of Assets'\" placement=\"bottom-left\"\r\n delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\"><span\r\n class=\"vx-fs-10 vx-fw-500 vx-tt-uppercase vx-mr-1\">[CID-20210005]</span> A.8.1.3\r\n Acceptable Use of Assets</div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <app-no-data *ngIf=\"!loader && responsibilitiesList.data?.length==0\"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No data to display'\"></app-no-data>\r\n </div>\r\n <div class=\"link-policy-floating-bar vx-d-flex vx-align-center vx-justify-between vx-p-3 vx-mt-1\">\r\n <div class=\"link-policy-floating-bar-left vx-d-flex vx-align-center\">\r\n <div class=\"chipContainer vx-d-flex vx-align-center vx-pl-2 vx-pr-2\" *ngIf=\"selectedValues.responsibilities.length>0\">\r\n <i class=\"icons cross vx-fs-10 vx-paragraph-txt vx-mr-1\" (click)=\"remove('responsibilities',selectedValues?.responsibilities[0])\">&#xe9ae;</i>\r\n <span class=\"chipName vx-fs-11 vx-label-txt\" [appTooltip]=\"selectedValues?.responsibilities[0]?.ReportName\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedValues?.responsibilities[0]?.ReportName}}</span>\r\n <button class=\"countBtn vx-fs-9 vx-fw-500 vx-txt-white vx-d-flex vx-align-center vx-justify-center vx-lh-4\" appPopover (click)=\"responsibilitiesPopover.popover()\" placement=\"left\" *ngIf=\"selectedValues.responsibilities.length>1\">+{{selectedValues?.responsibilities?.slice(1).length}}</button>\r\n <app-popover #responsibilitiesPopover>\r\n <div class=\"wf-action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let selectedres of selectedValues?.responsibilities?.slice(1)\">\r\n <div class=\"avatar-card\">\r\n <i class=\"icons cross-btn vx-fs-12 vx-paragraph-txt vx-mr-2\" (click)=\"remove('responsibilities',selectedres)\">&#xe9ae;</i>\r\n <span class=\"value\">{{selectedres?.ReportName}}</span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n <div class=\"link-policy-floating-bar-right vx-d-flex vx-align-center\">\r\n <button (click)=\"goBack('responsibilities')\" class=\"cancel-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-red\">CANCEL</button>\r\n <button (click)=\"saveChanges('responsibilities')\" [class.disabled]=\"!selectedValues?.responsibilities?.length\" class=\"next-btn vx-fs-11 vx-fw-500 vx-tt-uppercase vx-d-flex vx-align-center vx-justify-center vx-txt-white vx-ml-5\">ADD <i class=\"icons vx-ml-2\">&#xe91e;</i></button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <app-loader *ngIf=\"loader || submissionLoader\"></app-loader>\r\n</div>\r\n",
425
425
  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\";@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\";::ng-deep .link-policy{position:fixed;top:0;right:500px;bottom:0;left:0}::ng-deep .link-policy:before{background:#1E5DD3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .link-policy.animate{animation:.5s cubic-bezier(.25,.46,.45,.94) both animate-right;z-index:-1}::ng-deep .link-policy-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .link-policy-head button.back-btn{background:transparent;border-radius:0;border:none}::ng-deep .link-policy-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .link-policy-search{position:relative}::ng-deep .link-policy-search input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .link-policy-search input::placeholder{color:#747576;opacity:1}::ng-deep .link-policy-search i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .link-policy-table{overflow:hidden;overflow-y:auto;height:calc(100vh - 14rem)}::ng-deep .link-policy-table::-webkit-scrollbar-track{background-color:transparent}::ng-deep .link-policy-table .table-header{background:#fff;position:sticky;top:0;z-index:1}::ng-deep .link-policy-table .table-header .table-row{border:none!important;border-radius:0!important}::ng-deep .link-policy-table .table-header .table-row .table-column{line-height:1rem!important;min-height:1.5rem!important}::ng-deep .link-policy-table .table-row{border:1px solid #f1f1f1;border-radius:.25rem;display:flex;justify-content:space-between;position:relative;margin-bottom:.25rem}::ng-deep .link-policy-table .table-row:hover .table-column.serial .sr-no,::ng-deep .link-policy-table .table-row.active .table-column.serial .sr-no{opacity:0}::ng-deep .link-policy-table .table-row:hover .table-column.serial vui-cs-radio,::ng-deep .link-policy-table .table-row.active .table-column.serial vui-cs-radio,::ng-deep .link-policy-table .table-row:hover .table-column.serial vui-checkbox,::ng-deep .link-policy-table .table-row.active .table-column.serial vui-checkbox{opacity:1}::ng-deep .link-policy-table .table-row .table-column{min-height:2.5rem;position:relative;width:100%}::ng-deep .link-policy-table .table-row .table-column.serial{width:2rem;max-width:2rem;justify-content:center}::ng-deep .link-policy-table .table-row .table-column.serial .sr-no{width:1.25rem;background:#f8f8f8;writing-mode:vertical-lr;color:#747576;font-size:.625rem;font-weight:500;display:flex;height:2.5rem;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .link-policy-table .table-row .table-column.serial vui-cs-radio{background:#fff;border-radius:50%;position:absolute;top:.75rem;left:.5rem;width:1rem;height:1rem;opacity:0;transition:all .2s ease-in-out}::ng-deep .link-policy-table .table-row .table-column.serial vui-cs-radio .radio-item .radio,::ng-deep .link-policy-table .table-row .table-column.serial vui-cs-radio .radio-item .radiomark{position:absolute;top:0}::ng-deep .link-policy-table .table-row .table-column.serial vui-checkbox{background:#fff;border-radius:.125rem;position:absolute;top:.75rem;left:.5rem;width:1rem;height:1rem;opacity:0;transition:all .2s ease-in-out}::ng-deep .link-policy-table .table-row .table-column.serial vui-checkbox .checkbox-item{position:absolute!important}::ng-deep .link-policy-table .table-row .table-column.serial vui-checkbox .checkbox-item .checkbox,::ng-deep .link-policy-table .table-row .table-column.serial vui-checkbox .checkbox-item .checkmark{position:absolute;top:0}::ng-deep .link-policy-table .table-row .table-column.policies{width:calc(100% - 28rem);min-width:calc(100% - 28rem)}::ng-deep .link-policy-table .table-row .table-column.policies .value{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 5rem)}::ng-deep .link-policy-table .table-row .table-column.categories{width:26rem;min-width:26rem}::ng-deep .link-policy-table .table-row .table-column.categories .value{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:calc(100% - 1rem)}::ng-deep .link-policy-table .table-row .table-column.categories button.count{background:#1e5dd3;border:none;border-radius:.125rem;height:1.5rem}::ng-deep .link-policy-table .table-row .table-column.category-name{width:calc(100% - 2rem);min-width:calc(100% - 2rem)}::ng-deep .link-policy-table .table-row .table-column.category-name .value{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 5rem)}::ng-deep .link-policy .with-pagination{height:calc(100vh - 16rem)}::ng-deep .link-policy-floating-bar{background:#fff;border-radius:.25rem;box-shadow:0 2px 12px #4681ef40}::ng-deep .link-policy-floating-bar-left .counter{background:#34aa44;border-radius:.125rem;min-width:1.75rem}::ng-deep .link-policy-floating-bar-left .chip{background:#fff;border-radius:.125rem;box-shadow:0 2px 4px #1e5dd31a;height:1.5rem;display:block;max-width:13rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}::ng-deep .link-policy-floating-bar-left .chip i{position:relative;top:.0625rem;cursor:pointer}::ng-deep .link-policy-floating-bar-left button.count{background:#34aa44;border:none;border-radius:.125rem;height:1.5rem}::ng-deep .link-policy-floating-bar-right button{background:transparent;border:none;border-radius:.125rem;padding:0 .5rem;height:1.5rem}::ng-deep .link-policy-floating-bar-right button.white-btn{background:#fff;border:1px solid #f1f1f1}::ng-deep .link-policy-floating-bar-right button.white-btn.disabled{background:#f1f1f1!important;color:#747576!important;pointer-events:none!important}::ng-deep .link-policy-floating-bar-right button.next-btn{background:#1e5dd3}::ng-deep .link-policy-floating-bar-right button.next-btn.disabled{background:#f1f1f1!important;color:#747576!important;pointer-events:none!important}::ng-deep app-popover .wf-action-list ul.action-item li .avatar-card .cross-btn{cursor:pointer}::ng-deep .program-listing{position:fixed;top:0;right:500px;bottom:0;left:0}::ng-deep .program-listing:before{background:#1E5DD3;content:\"\";position:absolute;top:0;left:0;right:0;width:100%;height:3px}::ng-deep .program-listing-head{background:#fbfbfb;height:2.75rem;border-bottom:1px solid #f1f1f1}::ng-deep .program-listing-head button.back-btn{background:transparent;border:none;border-radius:0}::ng-deep .program-listing-body{background:#fff;height:calc(100vh - 2.75rem);padding:2rem}::ng-deep .program-listing-body .filter-card{box-shadow:0 0 2px #00000029;border-radius:.125rem;height:55px;cursor:pointer}::ng-deep .program-listing-body .filter-card.active{box-shadow:0 3px 12px #1e5dd340;border:none;pointer-events:none}::ng-deep .program-listing-body .filter-card.active span.counter{background:#F1F1F1;color:#042e7d}::ng-deep .program-listing-body .filter-card label{font-weight:500;text-transform:uppercase;color:#747576;line-height:16px;margin-left:0;font-size:11px;width:100%;pointer-events:none}::ng-deep .program-listing-body .filter-card p{line-height:16px;font-size:11px;color:#161b2f;font-weight:600;margin:0}::ng-deep .program-listing-body .filter-card span.counter{display:flex;height:28px;min-width:28px;border-radius:2px;background:#042E7D;color:#fff;font-size:11px;font-weight:600;justify-content:center;align-items:center;padding:0 4px;line-height:28px}::ng-deep .program-listing-body .filter-card .left{display:flex;flex-wrap:wrap}::ng-deep .program-listing-body .filter-card+.filter-card{margin-left:10px}::ng-deep .program-listing-body .filter-card-row .vx-table-card.active{box-shadow:0 3px 12px #1e5dd340!important}::ng-deep .program-listing-body .search-block{position:relative}::ng-deep .program-listing-body .search-block input{height:2.75rem;line-height:1.5rem;padding:.5rem 1rem .5rem 2.5rem;outline:none;border:1px solid #7475763f;border-radius:.25rem;width:100%;font-size:14px;color:#747576}::ng-deep .program-listing-body .search-block input::placeholder{font-weight:400}::ng-deep .program-listing-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .program-listing-body .search-block i{position:absolute;left:1rem;top:1rem;pointer-events:none;color:#f1f1f1;font-size:12px}::ng-deep .program-listing-body .program-listing-part{height:calc(100vh - 288px);overflow:auto;padding:0 12px 0 0;width:calc(100% + 12px)}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .program-listing-body .program-listing-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .program-listing-body .program-listing-part.with-pagination{height:calc(100vh - 320px)}::ng-deep .program-listing-body .program-listing-part .selected-area{background:#fff;height:32px;position:sticky;top:0;z-index:1}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:100%;height:16px}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item{width:100%;position:relative}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox .checkbox-item .value,::ng-deep .program-listing-body .program-listing-part .selected-area app-cs-checkbox-indeterminate .checkbox-item .value{color:#161b2f;font-size:12px;font-weight:500;margin-left:24px}::ng-deep .program-listing-body .program-listing-part .table-head .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column{color:#747576;font-size:11px;font-weight:500;height:28px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px;text-transform:uppercase}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .program-listing-body .program-listing-part .table-head .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item{border:1px solid #f1f1f1;border-radius:2px;margin-bottom:4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .main-list{cursor:pointer}::ng-deep .program-listing-body .program-listing-part .program-listing-item:hover .table-row .serial .sr-no{opacity:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active{border-color:#1e5dd3;box-shadow:0 3px 6px #4681ef26}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .serial .sr-no{opacity:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.disabled{pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column{color:#747576;height:48px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{position:absolute;top:14px;left:8px;opacity:0;transition:all .2s ease-in-out}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate{background:#fff;border-radius:2px;width:16px;height:16px;top:16px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox .checkbox-item .checkmark,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.serial app-cs-checkbox-indeterminate .checkbox-item .checkmark{position:absolute;top:0;left:0}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name{width:calc(100% - 32px);min-width:calc(100% - 32px)}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:8px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .count{background:#1E5DD3;border-radius:20px;color:#fff;font-size:9px;font-weight:500;line-height:16px;min-width:24px;display:inline-block;text-align:center;padding:0 4px}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.name .name-inner .name-with-count{display:flex;align-items:center;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row:hover .table-column.serial app-cs-checkbox-indeterminate,::ng-deep .program-listing-body .program-listing-part .program-listing-item .table-row.active .table-column.serial app-cs-checkbox-indeterminate{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .program-listing-body .program-listing-part .program-listing-item .sub-list .table-row .table-column.name .name-inner .value{color:#747576;font-size:12px}::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-radio,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox,::ng-deep .program-listing-body .program-listing-part .program-listing-item.active .table-row .table-column.serial app-cs-checkbox-indeterminate{opacity:1}::ng-deep .program-listing-confirmation{background:#161B2F;border-radius:.25rem;position:absolute;left:2rem;right:2rem;bottom:2rem;z-index:1}::ng-deep .program-listing-confirmation .confirmation-top{display:flex;align-items:center;justify-content:flex-start;padding:1.25rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block{height:2.25rem;width:2.25rem;min-width:2.25rem;border-radius:50%;background:#fff;border:1px solid #dbdbdb;display:flex;justify-content:center;align-items:center;margin-right:1rem}::ng-deep .program-listing-confirmation .confirmation-top .icon-block i{color:#eb2424;font-size:12px}::ng-deep .program-listing-confirmation .confirmation-top .text{color:#fff;font-size:14px;font-weight:300}::ng-deep .program-listing-confirmation .confirmation-bottom{background:#282E48;border-radius:0 0 .25rem .25rem;padding:.75rem .75rem .75rem 1.25rem;display:flex;align-items:center;justify-content:space-between}::ng-deep .program-listing-confirmation .confirmation-bottom .message{font-size:14px;font-weight:500;line-height:20px;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group{display:flex}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button{height:1.5rem;width:4rem;border:1px solid #fff;border-radius:.125rem;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.no-btn{background:transparent;color:#fff}::ng-deep .program-listing-confirmation .confirmation-bottom .button-group button.yes-btn{background:#fff;color:#1e5dd3;margin-left:.25rem}@keyframes animate-right{0%{transform:translate(100%)}to{transform:translate(0)}}\n"]
426
426
  },] }
427
427
  ];
@@ -445,4 +445,4 @@ LinkProgramComponent.propDecorators = {
445
445
  hideProgramsList: [{ type: Input }],
446
446
  searchProgram: [{ type: ViewChild, args: ['searchProgram',] }]
447
447
  };
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wcm9ncmFtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvbGluay1wcm9ncmFtL2xpbmstcHJvZ3JhbS9saW5rLXByb2dyYW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBUzlFLE1BQU0sT0FBTyxvQkFBb0I7SUEwRy9CLFNBQVM7SUFFVCxZQUFvQixjQUE4QixFQUN2QyxRQUF5QjtRQURoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDdkMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUE1R3BDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsc0JBQWlCLEdBQUc7WUFDbEIsSUFBSSxFQUFFLENBQUM7WUFDUCxFQUFFLEVBQUUsQ0FBQztZQUNMLFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLENBQUM7WUFDWixZQUFZLEVBQUUsQ0FBQztZQUNmLElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztRQUNGLHlCQUFvQixHQUFHO1lBQ3JCLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxDQUFDO1lBQ1osWUFBWSxFQUFFLENBQUM7WUFDZixJQUFJLEVBQUUsRUFBRTtTQUNULENBQUM7UUFFRixlQUFVLEdBQUc7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLFFBQVEsRUFBRSxFQUFFO1lBQ1osY0FBYyxFQUFFLEVBQUU7U0FDbkIsQ0FBQTtRQUVELG1CQUFjLEdBQW1CO1lBQy9CLE9BQU8sRUFBRSxFQUFFO1lBQ1gsVUFBVSxFQUFFLEVBQUU7WUFDZCxnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUE7UUFDRCxnQkFBVyxHQUFnQjtZQUN6QixVQUFVLEVBQUUsRUFBRTtZQUNkLGdCQUFnQixFQUFFLEVBQUU7U0FDckIsQ0FBQTtRQUVELHFCQUFnQixHQUFDLEtBQUssQ0FBQztRQUN2QixvQkFBZSxHQUFLLEVBQUUsQ0FBQztRQUVkLFdBQU0sR0FBUSxFQUFFLENBQUE7UUFFaEIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUNqQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQiwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3JELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixrQkFBYSxHQUFtQixNQUFNLENBQUM7UUFDdkMsZ0JBQVcsR0FBbUQsVUFBVSxDQUFDO1FBQ3pFLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNsQixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxQixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzQiwwQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3JELFNBQVM7UUFDVCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBV1AsdUJBQWtCLEdBQVUsRUFBRSxDQUFDO1FBQy9CLHdCQUFtQixHQUFFO1lBQzVCLEdBQUcsRUFBRSxFQUFFO1NBQ1IsQ0FBQztRQUtGLDJCQUFzQixHQUFLO1lBQ3pCLE9BQU8sRUFBQyxFQUFFO1lBQ1YsVUFBVSxFQUFDLEVBQUU7U0FDZCxDQUFBO1FBQ0QsZ0JBQVcsR0FBZ0I7WUFDekIsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsQ0FBQztZQUNQLEVBQUUsRUFBRSxDQUFDO1lBQ0wsVUFBVSxFQUFFLENBQUM7WUFDYixZQUFZLEVBQUUsQ0FBQztZQUNmLFdBQVcsRUFBRSxDQUFDO1lBQ2QsZ0NBQWdDLEVBQUUsQ0FBQztZQUNuQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3pCLDBCQUEwQixFQUFFLENBQUM7WUFDN0Isd0JBQXdCLEVBQUUsQ0FBQztZQUMzQixxQ0FBcUMsRUFBRSxDQUFDO1lBQ3hDLDJCQUEyQixFQUFFLENBQUM7WUFDOUIsK0JBQStCLEVBQUUsQ0FBQztZQUNsQyw2QkFBNkIsRUFBRSxDQUFDO1NBQ2pDLENBQUE7UUFDRCxzQkFBaUIsR0FBRztZQUNsQixXQUFXLEVBQUUsQ0FBQztZQUNkLFNBQVMsRUFBRSxDQUFDO1lBQ1osaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUE7UUFHRCwrQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFFbkMsY0FBUyxHQUFpRSxhQUFhLENBQUE7UUFPckYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUF2REQsb0NBQW9DO0lBQ3BDLElBQThCLGtCQUFrQixDQUFFLE9BQVk7O1FBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsbUNBQUk7WUFDM0QsT0FBTyxFQUFFLEVBQUU7WUFDWCxVQUFVLEVBQUUsRUFBRTtZQUNkLGdCQUFnQixFQUFFLEVBQUU7U0FDckIsQ0FBRTtRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUNsRixDQUFDO0lBaURELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVU7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztRQUNqRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsTUFBTSxLQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUN2QztZQUNGLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9EO2FBQU07WUFDTCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNoRTtRQUNELE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsY0FBYztZQUN0QixNQUFNO1NBQ1AsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25GLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxHQUFHLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQztnQkFDekYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLENBQUMsc0JBQXNCLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsMEJBQTBCLEdBQUcsR0FBRyxDQUFDLDBCQUEwQixDQUFDO2dCQUM3RSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixHQUFHLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDekUsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFFdEIsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlELGFBQWEsQ0FBQyxJQUFVOztRQUV0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTywwQ0FBRSxHQUFHLENBQUMsQ0FBQztRQUVyRSxJQUFJLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxNQUFNLEVBQUU7WUFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdkQ7UUFFRCxNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLHdCQUF3QjtZQUNoQyxNQUFNO1NBQ1AsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ25GLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFOztnQkFDakIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxNQUFBLEdBQUcsQ0FBQyxVQUFVLG1DQUFJLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxNQUFBLEdBQUcsQ0FBQyxRQUFRLG1DQUFJLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxNQUFBLEdBQUcsQ0FBQyxXQUFXLG1DQUFJLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxNQUFBLEdBQUcsQ0FBQyxXQUFXLG1DQUFJLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxNQUFBLEdBQUcsQ0FBQyxJQUFJLG1DQUFJLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUM7WUFDcEIsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELGdCQUFnQixDQUFDLElBQWtFO1FBQ2pGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQVU7O1FBRTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBRW5CLE1BQU0sT0FBTyxHQUFHO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixNQUFNLEVBQUUsbUNBQW1DO1lBQzNDLGFBQWEsRUFBRTtnQkFDYixZQUFZLEVBQUUsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLFVBQVU7Z0JBQ25ELFVBQVUsRUFBRSxNQUFBLElBQUksQ0FBQyxvQkFBb0IsMENBQUUsUUFBUTtnQkFDL0Msb0JBQW9CLEVBQUUsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLGtCQUFrQjtnQkFDbkUsZ0JBQWdCLEVBQUUsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLGNBQWM7Z0JBQzNELGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQzFDLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVztnQkFDL0MsWUFBWSxFQUFFLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUNuRTtTQUNGLENBQUE7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRixJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTs7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLE1BQUEsR0FBRyxDQUFDLFVBQVUsbUNBQUksQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxHQUFHLE1BQUEsR0FBRyxDQUFDLFFBQVEsbUNBQUksQ0FBQyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxHQUFHLE1BQUEsR0FBRyxDQUFDLFdBQVcsbUNBQUksQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxHQUFHLE1BQUEsR0FBRyxDQUFDLFdBQVcsbUNBQUksQ0FBQyxDQUFDO2dCQUM5RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLE1BQUEsR0FBRyxDQUFDLElBQUksbUNBQUksRUFBRSxDQUFDO1lBRWxELENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDdEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBVSxFQUFFLElBQW9EO1FBQ3pFLFFBQVEsSUFBSSxFQUFFO1lBQ1osS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU07WUFDUixLQUFLLGtCQUFrQjtnQkFDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzQixNQUFNO1NBQ1Q7SUFFSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLEtBQVUsRUFBRSxJQUFvRDtRQUN2RSxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssVUFBVTtnQkFDYixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLEtBQUssRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7aUJBQ25DO2dCQUNELE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUU7b0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2lCQUNyQztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxrQkFBa0I7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLElBQUksS0FBSyxFQUFFO29CQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO2lCQUMzQztnQkFDRCxNQUFNO1NBRVQ7SUFDSCxDQUFDO0lBSUQsYUFBYSxDQUFDLEtBQVUsRUFBRSxJQUFTO1FBQ2pDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsR0FBRSxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRSxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVUsRUFBRSxRQUFhO1FBQ3RDLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0M7YUFBTTtZQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7WUFDckgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN6RDtJQUNILENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFVLEVBQUUsSUFBUztRQUN4QyxJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqRDthQUFNO1lBQ0wsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMvRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBQ0QsTUFBTSxDQUFDLElBQXdDO1FBQzdDLElBQUksSUFBSSxFQUFFO1lBQ1IsUUFBUSxJQUFJLEVBQUU7Z0JBQ1osS0FBSyxZQUFZO29CQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO29CQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7b0JBQ2pDLE1BQU07Z0JBQ1IsS0FBSyxrQkFBa0I7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO29CQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztvQkFDdkMsTUFBTTthQUNUO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQW9ELEVBQUUsSUFBUztRQUNwRSxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7Z0JBQzFDLE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDbEgsSUFBSSxhQUFhLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2lCQUMzQztnQkFDRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzdHLElBQUcsZUFBZSxJQUFFLENBQUMsQ0FBQyxFQUFDO29CQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN4RDtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxrQkFBa0I7Z0JBQ3JCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUcsSUFBSSxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3RHLElBQUcsS0FBSyxJQUFFLENBQUMsQ0FBQyxFQUFDO29CQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEQ7Z0JBRUQsTUFBTTtTQUNUO0lBRUgsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFtRTtRQUM3RSxRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssVUFBVTtnQkFDYixJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFFM0IsTUFBTTtZQUNSLEtBQUssa0JBQWtCO2dCQUNyQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDaEMsTUFBTTtZQUNQLEtBQUssY0FBYztnQkFDbEIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztnQkFDdkMsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUNELHNCQUFzQixDQUFDLEtBQWE7UUFDbEMsSUFBRyxLQUFLLEVBQUM7WUFDUCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO1lBQ3hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ2pDO2FBQUk7WUFDSCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUdELHdCQUF3Qjs7UUFFdEIsZ0NBQWdDO1FBQ2hDLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLDRCQUE0QixDQUFDLENBQUM7UUFFN0QsTUFBTSxhQUFhLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVywwQ0FBRSxVQUFVLENBQUM7UUFFbkQsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLFNBQVMsbUNBQUksQ0FBQztZQUNyQyxVQUFVLEVBQUUsTUFBQSxNQUFBLElBQUksQ0FBQyxXQUFXLDBDQUFFLGdCQUFnQixtQ0FBSSxDQUFDO1lBQ25ELFdBQVcsRUFBQyxDQUFDLEdBQUksSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEMsUUFBUSxFQUFFLE1BQUEsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxPQUFPLDBDQUFFLFdBQVc7U0FDcEQsQ0FBQTtRQUNELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQTtRQUNmLElBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxtQkFBbUIsMENBQUUsR0FBRyxLQUFJLENBQUMsQ0FBQSxNQUFBLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsT0FBTywwQ0FBRSxHQUFHLE9BQUssTUFBQSxJQUFJLENBQUMsbUJBQW1CLDBDQUFFLEdBQUcsQ0FBQSxDQUFDLEVBQUU7WUFDekcsTUFBTSxHQUFJO2dCQUNWLFdBQVcsRUFBRSxDQUFDLE1BQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxTQUFTLG1DQUFJLENBQUMsQ0FBQztnQkFDMUMsV0FBVyxFQUFFLE1BQUEsSUFBSSxDQUFDLG1CQUFtQiwwQ0FBRSxHQUFHO2FBQ3pDLENBQUE7U0FDRjtRQUNELE1BQU0sb0JBQW9CLEdBQUc7WUFDM0IsWUFBWSxFQUFFLE1BQUEsSUFBSSxDQUFDLG9CQUFvQiwwQ0FBRSxVQUFVO1lBQ25ELFVBQVUsRUFBRSxNQUFBLElBQUksQ0FBQyxvQkFBb0IsMENBQUUsUUFBUTtZQUMvQyxvQkFBb0IsRUFBRSxNQUFBLElBQUksQ0FBQyxvQkFBb0IsMENBQUUsa0JBQWtCO1lBQ25FLGdCQUFnQixFQUFFLE1BQUEsSUFBSSxDQUFDLG9CQUFvQiwwQ0FBRSxjQUFjO1NBQzVELENBQUE7UUFDRCxJQUFJLFdBQVcsR0FBRztZQUNoQixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3BELENBQUE7UUFDRCxJQUFJLGVBQWUsR0FBRztZQUNwQixjQUFjLEVBQUcsSUFBSSxDQUFDLGNBQWM7WUFDcEMsV0FBVyxFQUFFLFdBQVc7WUFDeEIsYUFBYSxFQUFFLG9CQUFvQjtTQUNwQyxDQUFBO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUMvQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUs5QixNQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixNQUFNO1lBQ04sSUFBSSxFQUFFLE9BQU87WUFDYixhQUFhLEVBQUUsb0JBQW9CO1NBQ3BDLENBQUE7UUFDRCx5RkFBeUY7UUFDekYsMEJBQTBCO1FBQzFCLHFDQUFxQztRQUNyQyxzRkFBc0Y7UUFDdEYseUJBQXlCO1FBQ3pCLGtEQUFrRDtRQUNsRCw2Q0FBNkM7UUFDN0Msb0NBQW9DO1FBQ3BDLFVBQVU7UUFDViwyQkFBMkI7UUFDM0IsZ0JBQWdCO1FBRWhCLE9BQU87UUFDUCwyQkFBMkI7UUFDM0IscUNBQXFDO1FBQ3JDLHdJQUF3STtRQUN4SSxPQUFPO1FBQ1AsTUFBTTtJQUNSLENBQUM7OztZQTdjRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsNDY5QkFBNEM7O2FBRTdDOzs7WUFUUSxjQUFjO1lBQ2QsZUFBZTs7O3FCQWdEckIsS0FBSzt5QkFDTCxLQUFLO21CQUNMLEtBQUs7d0JBQ0wsTUFBTTtvQ0FDTixNQUFNO21CQU9OLE1BQU07b0JBQ04sTUFBTTtvQ0FFTixNQUFNOzJCQUdOLEtBQUs7aUNBRUwsS0FBSyxTQUFDLGlCQUFpQjtpQ0FRdkIsS0FBSztrQ0FDTCxLQUFLOytCQUdMLEtBQUs7NEJBQ0wsU0FBUyxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBSZXN0QXBpU2VydmljZSB9IGZyb20gJy4uL3Jlc3RhcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZElkcywgU2VsZWN0ZWRWYWx1ZXMgfSBmcm9tICcuLi9wcm9ncmFtLWludGVncmF0aW9uLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBwcm9ncmFtTGlzdCB9IGZyb20gJy4vcHJvZ3JhbS1saXN0LW1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmMtbGluay1wcm9ncmFtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbGluay1wcm9ncmFtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9saW5rLXByb2dyYW0uY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGlua1Byb2dyYW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xyXG5cclxuICBzdWJDYXRlZ29yaWVzTGlzdCA9IHtcclxuICAgIGZyb206IDEsXHJcbiAgICB0bzogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgdG90YWxQYWdlOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgZGF0YTogW10sXHJcbiAgfTtcclxuICByZXNwb25zaWJpbGl0aWVzTGlzdCA9IHtcclxuICAgIGZyb206IDEsXHJcbiAgICB0bzogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAxLFxyXG4gICAgdG90YWxQYWdlOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgZGF0YTogW10sXHJcbiAgfTtcclxuXHJcbiAgc2VhcmNoVGV4dCA9IHtcclxuICAgIHByb2dyYW06ICcnLFxyXG4gICAgY2F0ZWdvcnk6ICcnLFxyXG4gICAgcmVzcG9uc2liaWxpdHk6ICcnLFxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRWYWx1ZXM6IFNlbGVjdGVkVmFsdWVzID0ge1xyXG4gICAgcHJvZ3JhbToge30sXHJcbiAgICBjYXRlZ29yaWVzOiBbXSxcclxuICAgIHJlc3BvbnNpYmlsaXRpZXM6IFtdXHJcbiAgfVxyXG4gIHNlbGVjdGVkSWRzOiBTZWxlY3RlZElkcyA9IHtcclxuICAgIGNhdGVnb3JpZXM6IFtdLFxyXG4gICAgcmVzcG9uc2liaWxpdGllczogW11cclxuICB9XHJcblxyXG4gIHN1Ym1pc3Npb25Mb2FkZXI9ZmFsc2U7XHJcbiAgY3VycmVudENhdGVnb3J5OmFueT17fTtcclxuXHJcbiAgQElucHV0KCkgcG9saWN5OiBhbnkgPSB7fVxyXG4gIEBJbnB1dCgpIGN1cnJlbnRUYWIhOmFueTtcclxuICBASW5wdXQoKSBtb2RlOiBzdHJpbmcgPSAnJztcclxuICBAT3V0cHV0KCkgY2hhbmdlVGFiID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVkUHJvZ3JhbURldGFpbHMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGN1cnJlbnRCdXNpbmVzc0N5Y2xlITogYW55O1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIHByb2dyYW1Tb3J0Qnk6ICdkZXNjJyB8ICdhc2MnID0gJ2Rlc2MnO1xyXG4gIGN1cnJlbnRMaXN0OiAncHJvZ3JhbXMnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnID0gJ3Byb2dyYW1zJztcclxuICB1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAT3V0cHV0KCkgcmVmcmVzaExpbmtlZFBvbGljaWVzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIC8vcHJvZ3JhbVxyXG4gIHN1Ykxpc3QgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwcm9ncmFtc0xpc3Q6IGFueTtcclxuICAvLyBASW5wdXQoKSBhbGxQcm9ncmFtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoJ3NlbGVjdGVkUHJvZ3JhbScpIHNldCBnZXRTZWxlY3RlZFByb2dyYW0oIHByb2dyYW06IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJvZ3JhbSkpID8/IHtcclxuICAgICAgcHJvZ3JhbToge30sXHJcbiAgICAgIGNhdGVnb3JpZXM6IFtdLFxyXG4gICAgICByZXNwb25zaWJpbGl0aWVzOiBbXVxyXG4gICAgfSA7XHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMuc2VsZWN0ZWRWYWx1ZXNcIix0aGlzLnNlbGVjdGVkVmFsdWVzLCB0aGlzLnNlbGVjdGVkTGlua1Byb2dyYW0pXHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2F0ZWdvcmllczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBzZWxlY3RlZExpbmtQcm9ncmFtPSB7XHJcbiAgICBfaWQ6ICcnXHJcbiAgfTtcclxuICBASW5wdXQoKSBoaWRlUHJvZ3JhbXNMaXN0ITogYW55O1xyXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaFByb2dyYW0nKSBzZWFyY2hQcm9ncmFtITogYW55O1xyXG4gIFxyXG5cclxuICBwcmV2aW91c1NlbGVjdGVkVmFsdWVzOmFueT17XHJcbiAgICBwcm9ncmFtOnt9LFxyXG4gICAgY2F0ZWdvcmllczpbXVxyXG4gIH1cclxuICBwcm9ncmFtRGF0YTogcHJvZ3JhbUxpc3QgPSB7XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIGZyb206IDAsXHJcbiAgICB0bzogMCxcclxuICAgIHRvdGFsUGFnZXM6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIEFsbEludGVybmFsQ29udHJvbHNQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkT3RoZXJzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkUmVndWxhdGlvblByb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMFxyXG4gIH1cclxuICBwcm9ncmFtVHlwZU9iamVjdCA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiAxLFxyXG4gICAgc3RhbmRhcmRzOiAyLFxyXG4gICAgaW50ZXJuYWxfY29udHJvbHM6IDMsXHJcbiAgICBvdGhlcnM6IDAsXHJcbiAgfVxyXG5cclxuXHJcbiAgZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSBmYWxzZTtcclxuXHJcbiAgYWN0aXZlVGFiOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycgPSAncmVndWxhdGlvbnMnXHJcblxyXG4gIC8vcHJvZ3JhbVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlc3RBcGlTZXJ2aWNlOiBSZXN0QXBpU2VydmljZSxcclxuICAgICBwcml2YXRlIHNuYWNrYmFyOiBTbmFja0JhclNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgIHRoaXMuZ2V0UHJvZ3JhbXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LCAzMDApO1xyXG4gICAgdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZSA9IHRoaXMucmVzdEFwaVNlcnZpY2UuZ2V0QnVzaW5lc3NDeWNsZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvZ3JhbXMoZGF0YT86IGFueSkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdtb2RlJywgJ2NvbXBsaWFuY2VDYXRlZ29yeS9wcm9ncmFtTGlzdCcpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncHJvZ3JhbVR5cGUnLCB0aGlzLnByb2dyYW1UeXBlT2JqZWN0W3RoaXMuYWN0aXZlVGFiXSk7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3BhZ2VOYW1lJywgXCJwb2xpY3lXb3Jrcm9vbVwiKTtcclxuICAgIGlmIChkYXRhPy5zZWFyY2ggfHwgdGhpcy5zZWFyY2hUZXh0LnByb2dyYW1cclxuICAgICAgKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3NlYXJjaFRleHQnLCB0aGlzLnNlYXJjaFRleHQucHJvZ3JhbSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlTm8nLCB0aGlzLnByb2dyYW1EYXRhLmN1cnJlbnRQYWdlKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGFjdGlvbjogJy9jb21wbGlhbmNlLycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0QXBpU2VydmljZS5hcGlEZWxlZ2F0ZShyZXF1ZXN0KS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5kYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50byA9IHJlcy50bztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUGFnZXMgPSByZXMudG90YWxQYWdlcztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbE90aGVyc1Byb2dyYW1zQ291bnQgPSByZXMuQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50ID0gcmVzLkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50ID0gcmVzLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0Q2F0ZWdvcmllcyhkYXRhPzogYW55KSB7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYXJlbnRJZCcsIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHJvZ3JhbT8uX2lkKTtcclxuXHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3EnLCB0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGFjdGlvbjogJy9wcm9ncmFtL3N1YkNhdGVnb3JpZXMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgIH1cclxuICAgIHRoaXMucmVzdEFwaVNlcnZpY2UuYXBpRGVsZWdhdGUocmVxdWVzdCkucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QuZnJvbSA9IHJlcy5pdGVtc19mcm9tID8/IDE7XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC50byA9IHJlcy5pdGVtc190byA/PyAwO1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QudG90YWxQYWdlID0gcmVzLnRvdGFsX3BhZ2VzID8/IDA7XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC50b3RhbFJlY29yZHMgPSByZXMudG90YWxfaXRlbXMgPz8gMDtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LmRhdGEgPSByZXMuZGF0YSA/PyBbXTtcclxuICAgICAgICB0aGlzLmxvYWRlcj1mYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgY2hhbmdlVGFiUHJvZ3JhbSh0eXBlOiAncmVndWxhdGlvbnMnIHwgJ3N0YW5kYXJkcycgfCAnaW50ZXJuYWxfY29udHJvbHMnIHwgJ290aGVycycpIHtcclxuICAgIHRoaXMuYWN0aXZlVGFiID0gdHlwZTtcclxuICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0LnByb2dyYW0gPSAnJztcclxuICAgIHRoaXMuc2VhcmNoUHJvZ3JhbS5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRSZXNwb25zaWJpbGl0aWVzKGRhdGE/OiBhbnkpIHtcclxuXHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgbWV0aG9kOiAnZ2V0JyxcclxuICAgICAgYWN0aW9uOiAnL3Byb2dyYW0vY2F0ZWdvcnlSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgcGF5bG9hZE9iamVjdDoge1xyXG4gICAgICAgIFwic3RhcnRfZGF0ZVwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zdGFydF9kYXRlLFxyXG4gICAgICAgIFwiZW5kX2RhdGVcIjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uZW5kX2RhdGUsXHJcbiAgICAgICAgXCJzZWxlY3RlZF9jeWNsZV9hcnJcIjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGVfYXJyLFxyXG4gICAgICAgIFwic2VsZWN0ZWRfY3ljbGVcIjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGUsXHJcbiAgICAgICAgJ2NhdGVnb3J5SWRzJzogdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzLFxyXG4gICAgICAgICdwYWdlTm8nOiB0aGlzLnJlc3BvbnNpYmlsaXRpZXNMaXN0LmN1cnJlbnRQYWdlLFxyXG4gICAgICAgICdzZWFyY2hUZXh0JzogKGRhdGE/LnNlYXJjaCkgPyB0aGlzLnNlYXJjaFRleHQucmVzcG9uc2liaWxpdHkgOiAnJ1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RBcGlTZXJ2aWNlLmFwaURlbGVnYXRlKHJlcXVlc3QpLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QuZnJvbSA9IHJlcy5pdGVtc19mcm9tID8/IDE7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0aWVzTGlzdC50byA9IHJlcy5pdGVtc190byA/PyAwO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QudG90YWxQYWdlID0gcmVzLnRvdGFsX3BhZ2VzID8/IDE7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0aWVzTGlzdC50b3RhbFJlY29yZHMgPSByZXMudG90YWxfaXRlbXMgPz8gMDtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXRpZXNMaXN0LmRhdGEgPSByZXMuZGF0YSA/PyBbXTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VQYWdlKGV2ZW50OiBhbnksIHR5cGU6ICdwcm9ncmFtcycgfCAnY2F0ZWdvcmllcycgfCAncmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdwcm9ncmFtcyc6XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXRpZXNMaXN0LmN1cnJlbnRQYWdlID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5nZXRSZXNwb25zaWJpbGl0aWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuICBzZWFyY2hCeShldmVudDogYW55LCB0eXBlOiAncHJvZ3JhbXMnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbXMnOlxyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQucHJvZ3JhbSAhPSBldmVudCkge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0LnByb2dyYW0gPSBldmVudDtcclxuICAgICAgICAgIHRoaXMuZ2V0UHJvZ3JhbXMoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkgIT0gZXZlbnQpIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dC5jYXRlZ29yeSA9IGV2ZW50O1xyXG4gICAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzKHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LnJlc3BvbnNpYmlsaXR5ICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQucmVzcG9uc2liaWxpdHkgPSBldmVudDtcclxuICAgICAgICAgIHRoaXMuZ2V0UmVzcG9uc2liaWxpdGllcyh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHNlbGVjdFByb2dyYW0oZXZlbnQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5wcm9ncmFtID0gZGF0YTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5yZXNwb25zaWJpbGl0aWVzPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdENhdGVnb3J5KGV2ZW50OiBhbnksIGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLmNhdGVnb3JpZXMucHVzaChjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5X2lkID09IGNhdGVnb3J5LmNhdGVnb3J5X2lkKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuICBzZWxlY3RSZXNwb25zaWJpbGl0eShldmVudDogYW55LCBkYXRhOiBhbnkpIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLnJlc3BvbnNpYmlsaXRpZXMucHVzaChkYXRhLlJlcG9ydElkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzLnB1c2goZGF0YSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBkYXRhLlJlcG9ydElkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5yZXNwb25zaWJpbGl0aWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIGNvbnN0IHJlcG9ydEluZGV4ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5SZXBvcnRJZCA9PSBkYXRhLlJlcG9ydElkKVxyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMuc3BsaWNlKHJlcG9ydEluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ29CYWNrKGZyb20/OiAnY2F0ZWdvcmllcycgfCAncmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgIGlmIChmcm9tKSB7XHJcbiAgICAgIHN3aXRjaCAoZnJvbSkge1xyXG4gICAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdwcm9ncmFtcyc7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLmNhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdjYXRlZ29yaWVzJztcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcyA9IFtdO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKHR5cGU6ICdwcm9ncmFtcycgfCAnY2F0ZWdvcmllcycgfCAncmVzcG9uc2liaWxpdGllcycsIGl0ZW06IGFueSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3Byb2dyYW1zJzpcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnByb2dyYW0gPSB7fTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT0gaXRlbS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgICAgaWYgKGNhdGVnb3J5SW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnlJZEluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGl0ZW0uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmKGNhdGVnb3J5SWRJbmRleCE9LTEpe1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUlkSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgY29uc3QgcmVzcEluZGV4ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5SZXBvcnRJZCA9PSBpdGVtLlJlcG9ydElkKTtcclxuICAgICAgICBpZiAocmVzcEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMuc3BsaWNlKHJlc3BJbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZElkcy5yZXNwb25zaWJpbGl0aWVzLmZpbmRJbmRleCgoZWxlbWVudDogYW55KSA9PiBlbGVtZW50ID09IGl0ZW0uUmVwb3J0SWQpO1xyXG4gICAgICAgIGlmKGluZGV4IT0tMSl7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnJlc3BvbnNpYmlsaXRpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNhdmVDaGFuZ2VzKHR5cGU6ICdwcm9ncmFtcycgfCAnY2F0ZWdvcmllcycgfCAncmVzcG9uc2liaWxpdGllcyd8J3Byb2dyYW1zT25seScpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdwcm9ncmFtcyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdjYXRlZ29yaWVzJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2F0ZWdvcmllcyc6XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TGlzdCA9ICdyZXNwb25zaWJpbGl0aWVzJztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXMoKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIHRoaXMuc3VibWl0cHJvZ3JhbUludGVncmF0aW9uKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgICBjYXNlICdwcm9ncmFtc09ubHknOlxyXG4gICAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuICBzYXZlQ2hhbmdlc0Zyb21Qcm9ncmFtKGV2ZW50OmJvb2xlYW4pe1xyXG4gICAgaWYoZXZlbnQpe1xyXG4gICAgICB0aGlzLmRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3VibWl0cHJvZ3JhbUludGVncmF0aW9uKCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHN1Ym1pdHByb2dyYW1JbnRlZ3JhdGlvbigpIHtcclxuXHJcbiAgICAvLyB0aGlzLnN1Ym1pc3Npb25Mb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdtb2RlJywgJ3Byb2dyYW1Qb2xpY3lVcGRhdGUvdXBkYXRlJyk7XHJcblxyXG4gICAgY29uc3QgY2F0ZWdvcnlBcnJheSA9IHRoaXMuc2VsZWN0ZWRJZHM/LmNhdGVnb3JpZXM7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgcG9saWN5SWQ6IHRoaXMucG9saWN5Py5wb2xpY3lfaWQgPz8gMCxcclxuICAgICAgcmVwb3J0X2lkczogdGhpcy5zZWxlY3RlZElkcz8ucmVzcG9uc2liaWxpdGllcyA/PyAwLFxyXG4gICAgICBjYXRlZ29yeV9pZDpbLi4uIG5ldyBTZXQoY2F0ZWdvcnlBcnJheSldLFxyXG4gICAgICBwYXJlbnRJZDogdGhpcy5zZWxlY3RlZFZhbHVlcz8ucHJvZ3JhbT8uY2F0ZWdvcnlfaWRcclxuICAgIH1cclxuICAgIGxldCByZW1vdmUgPSB7fVxyXG4gICAgaWYodGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtPy5faWQgJiYgKHRoaXMuc2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/Ll9pZCAhPT0gdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtPy5faWQpKSB7XHJcbiAgICAgIHJlbW92ZSA9ICB7XHJcbiAgICAgIFwicG9saWN5SWRzXCI6IFt0aGlzLnBvbGljeT8ucG9saWN5X2lkID8/IDBdLFxyXG4gICAgICBcInByb2dyYW1JZFwiOiB0aGlzLnNlbGVjdGVkTGlua1Byb2dyYW0/Ll9pZCxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudEJ1c2luZXNzQ3ljbGUgPSB7XHJcbiAgICAgIFwic3RhcnRfZGF0ZVwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zdGFydF9kYXRlLFxyXG4gICAgICBcImVuZF9kYXRlXCI6IHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGU/LmVuZF9kYXRlLFxyXG4gICAgICBcInNlbGVjdGVkX2N5Y2xlX2FyclwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zZWxlY3RlZF9jeWNsZV9hcnIsXHJcbiAgICAgIFwic2VsZWN0ZWRfY3ljbGVcIjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGUsXHJcbiAgICB9XHJcbiAgICBsZXQgbGlua1Byb2dyYW0gPSB7XHJcbiAgICAgIGFkZGVkOiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGggPyBbcGF5bG9hZF0gOiBbXSxcclxuICAgICAgcmVtb3ZlZDogT2JqZWN0LmtleXMocmVtb3ZlKS5sZW5ndGggPyBbcmVtb3ZlXSA6IFtdLFxyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGVkUHJvZ3JhbSA9IHtcclxuICAgICAgc2VsZWN0ZWRWYWx1ZXMgOiB0aGlzLnNlbGVjdGVkVmFsdWVzLFxyXG4gICAgICBsaW5rUHJvZ3JhbTogbGlua1Byb2dyYW0sXHJcbiAgICAgIGJ1c2luZXNzQ3ljbGU6IGN1cnJlbnRCdXNpbmVzc0N5Y2xlXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcImxpbmsgUHJvZ3JhbSBQYXlsb2FkID0+XCIsIHBheWxvYWQpXHJcbiAgICB0aGlzLnVwZGF0ZWRQcm9ncmFtRGV0YWlscy5lbWl0KEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2VsZWN0ZWRQcm9ncmFtKSkpO1xyXG4gICAgdGhpcy5zdWJtaXNzaW9uTG9hZGVyID0gZmFsc2U7XHJcblxyXG4gICAgXHJcbiAgICBcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcclxuICAgICAgYWN0aW9uOiAnL2NvbXBsaWFuY2VfcG9zdCcsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgZGF0YTogcGF5bG9hZCxcclxuICAgICAgYnVzaW5lc3NDeWNsZTogY3VycmVudEJ1c2luZXNzQ3ljbGVcclxuICAgIH1cclxuICAgIC8vIHRoaXMucmVzdEFwaVNlcnZpY2UuYXBpRGVsZWdhdGUocmVxdWVzdCkucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpLnN1YnNjcmliZSh7XHJcbiAgICAvLyAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuc3VibWlzc2lvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gICAgIHRoaXMuc25hY2tiYXIuc2hvdygnVGhlIHByb2dyYW0gaGFzIGJlZW4gbGlua2VkIHdpdGggdGhpcyBQb2xpY3kuJywgJ3N1Y2Nlc3MnKTtcclxuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgIGlmKHRoaXMuY3VycmVudFRhYiAhPSAnbGlua2VkX3Byb2dyYW1zJyl7XHJcbiAgICAvLyAgICAgICAgIHRoaXMucmVmcmVzaExpbmtlZFBvbGljaWVzLmVtaXQoKTtcclxuICAgIC8vICAgICAgICAgLy8gdGhpcy5jaGFuZ2VUYWIuZW1pdCgpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgICAvLyAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5zdWJtaXNzaW9uTG9hZGVyID0gZmFsc2U7XHJcbiAgICAvLyAgICAgdGhpcy5zbmFja2Jhci5zaG93KFwiT29wcyBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2VyZSB1bmFibGUgdG8gY29tcGxldGUgdGhpcyBhY3Rpb24uIExldCdzIGdpdmUgaXQgYW5vdGhlciB0cnkgc2hhbGwgd2UgP1wiKTtcclxuICAgIC8vICAgfSxcclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1wcm9ncmFtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL3NoYXJlZENvbXBvbmVudHMvbGluay1wcm9ncmFtL2xpbmstcHJvZ3JhbS9saW5rLXByb2dyYW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBUzlFLE1BQU0sT0FBTyxvQkFBb0I7SUEwRy9CLFNBQVM7SUFFVCxZQUFvQixjQUE4QixFQUN2QyxRQUF5QjtRQURoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDdkMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUE1R3BDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsc0JBQWlCLEdBQUc7WUFDbEIsSUFBSSxFQUFFLENBQUM7WUFDUCxFQUFFLEVBQUUsQ0FBQztZQUNMLFdBQVcsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLENBQUM7WUFDWixZQUFZLEVBQUUsQ0FBQztZQUNmLElBQUksRUFBRSxFQUFFO1NBQ1QsQ0FBQztRQUNGLHlCQUFvQixHQUFHO1lBQ3JCLElBQUksRUFBRSxDQUFDO1lBQ1AsRUFBRSxFQUFFLENBQUM7WUFDTCxXQUFXLEVBQUUsQ0FBQztZQUNkLFNB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QUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsTUFBTTtZQUNOLElBQUksRUFBRSxPQUFPO1lBQ2IsYUFBYSxFQUFFLG9CQUFvQjtTQUNwQyxDQUFBO1FBQ0QseUZBQXlGO1FBQ3pGLDBCQUEwQjtRQUMxQixxQ0FBcUM7UUFDckMsc0ZBQXNGO1FBQ3RGLHlCQUF5QjtRQUN6QixrREFBa0Q7UUFDbEQsNkNBQTZDO1FBQzdDLG9DQUFvQztRQUNwQyxVQUFVO1FBQ1YsMkJBQTJCO1FBQzNCLGdCQUFnQjtRQUVoQixPQUFPO1FBQ1AsMkJBQTJCO1FBQzNCLHFDQUFxQztRQUNyQyx3SUFBd0k7UUFDeEksT0FBTztRQUNQLE1BQU07SUFDUixDQUFDOzs7WUE3Y0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxpQkFBaUI7Z0JBQzNCLG0wK0JBQTRDOzthQUU3Qzs7O1lBVFEsY0FBYztZQUNkLGVBQWU7OztxQkFnRHJCLEtBQUs7eUJBQ0wsS0FBSzttQkFDTCxLQUFLO3dCQUNMLE1BQU07b0NBQ04sTUFBTTttQkFPTixNQUFNO29CQUNOLE1BQU07b0NBRU4sTUFBTTsyQkFHTixLQUFLO2lDQUVMLEtBQUssU0FBQyxpQkFBaUI7aUNBUXZCLEtBQUs7a0NBQ0wsS0FBSzsrQkFHTCxLQUFLOzRCQUNMLFNBQVMsU0FBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUmVzdEFwaVNlcnZpY2UgfSBmcm9tICcuLi9yZXN0YXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VsZWN0ZWRJZHMsIFNlbGVjdGVkVmFsdWVzIH0gZnJvbSAnLi4vcHJvZ3JhbS1pbnRlZ3JhdGlvbi1pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgcHJvZ3JhbUxpc3QgfSBmcm9tICcuL3Byb2dyYW0tbGlzdC1tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3ZjLWxpbmstcHJvZ3JhbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2xpbmstcHJvZ3JhbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbGluay1wcm9ncmFtLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbmtQcm9ncmFtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBhbmltYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgc3ViQ2F0ZWdvcmllc0xpc3QgPSB7XHJcbiAgICBmcm9tOiAxLFxyXG4gICAgdG86IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHRvdGFsUGFnZTogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGRhdGE6IFtdLFxyXG4gIH07XHJcbiAgcmVzcG9uc2liaWxpdGllc0xpc3QgPSB7XHJcbiAgICBmcm9tOiAxLFxyXG4gICAgdG86IDAsXHJcbiAgICBjdXJyZW50UGFnZTogMSxcclxuICAgIHRvdGFsUGFnZTogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIGRhdGE6IFtdLFxyXG4gIH07XHJcblxyXG4gIHNlYXJjaFRleHQgPSB7XHJcbiAgICBwcm9ncmFtOiAnJyxcclxuICAgIGNhdGVnb3J5OiAnJyxcclxuICAgIHJlc3BvbnNpYmlsaXR5OiAnJyxcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkVmFsdWVzOiBTZWxlY3RlZFZhbHVlcyA9IHtcclxuICAgIHByb2dyYW06IHt9LFxyXG4gICAgY2F0ZWdvcmllczogW10sXHJcbiAgICByZXNwb25zaWJpbGl0aWVzOiBbXVxyXG4gIH1cclxuICBzZWxlY3RlZElkczogU2VsZWN0ZWRJZHMgPSB7XHJcbiAgICBjYXRlZ29yaWVzOiBbXSxcclxuICAgIHJlc3BvbnNpYmlsaXRpZXM6IFtdXHJcbiAgfVxyXG5cclxuICBzdWJtaXNzaW9uTG9hZGVyPWZhbHNlO1xyXG4gIGN1cnJlbnRDYXRlZ29yeTphbnk9e307XHJcblxyXG4gIEBJbnB1dCgpIHBvbGljeTogYW55ID0ge31cclxuICBASW5wdXQoKSBjdXJyZW50VGFiITphbnk7XHJcbiAgQElucHV0KCkgbW9kZTogc3RyaW5nID0gJyc7XHJcbiAgQE91dHB1dCgpIGNoYW5nZVRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdXBkYXRlZFByb2dyYW1EZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjdXJyZW50QnVzaW5lc3NDeWNsZSE6IGFueTtcclxuICBsb2FkZXIgPSBmYWxzZTtcclxuICBwcm9ncmFtU29ydEJ5OiAnZGVzYycgfCAnYXNjJyA9ICdkZXNjJztcclxuICBjdXJyZW50TGlzdDogJ3Byb2dyYW1zJyB8ICdjYXRlZ29yaWVzJyB8ICdyZXNwb25zaWJpbGl0aWVzJyA9ICdwcm9ncmFtcyc7XHJcbiAgdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIHJlZnJlc2hMaW5rZWRQb2xpY2llcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAvL3Byb2dyYW1cclxuICBzdWJMaXN0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHJvZ3JhbXNMaXN0OiBhbnk7XHJcbiAgLy8gQElucHV0KCkgYWxsUHJvZ3JhbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCdzZWxlY3RlZFByb2dyYW0nKSBzZXQgZ2V0U2VsZWN0ZWRQcm9ncmFtKCBwcm9ncmFtOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHByb2dyYW0pKSA/PyB7XHJcbiAgICAgIHByb2dyYW06IHt9LFxyXG4gICAgICBjYXRlZ29yaWVzOiBbXSxcclxuICAgICAgcmVzcG9uc2liaWxpdGllczogW11cclxuICAgIH0gO1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLnNlbGVjdGVkVmFsdWVzXCIsdGhpcy5zZWxlY3RlZFZhbHVlcywgdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtKVxyXG4gIH1cclxuICBASW5wdXQoKSBzZWxlY3RlZENhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRMaW5rUHJvZ3JhbT0ge1xyXG4gICAgX2lkOiAnJ1xyXG4gIH07XHJcbiAgQElucHV0KCkgaGlkZVByb2dyYW1zTGlzdCE6IGFueTtcclxuICBAVmlld0NoaWxkKCdzZWFyY2hQcm9ncmFtJykgc2VhcmNoUHJvZ3JhbSE6IGFueTtcclxuICBcclxuXHJcbiAgcHJldmlvdXNTZWxlY3RlZFZhbHVlczphbnk9e1xyXG4gICAgcHJvZ3JhbTp7fSxcclxuICAgIGNhdGVnb3JpZXM6W11cclxuICB9XHJcbiAgcHJvZ3JhbURhdGE6IHByb2dyYW1MaXN0ID0ge1xyXG4gICAgZGF0YTogW10sXHJcbiAgICBmcm9tOiAwLFxyXG4gICAgdG86IDAsXHJcbiAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgdG90YWxSZWNvcmRzOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICBBbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBBbGxSZWd1bGF0aW9uUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIEFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDogMCxcclxuICAgIFNlbGVjdGVkSW50ZXJuYWxDb250cm9sc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZE90aGVyc1Byb2dyYW1zQ291bnQ6IDAsXHJcbiAgICBTZWxlY3RlZFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50OiAwLFxyXG4gICAgU2VsZWN0ZWRTdGFuZGFyZFByb2dyYW1zQ291bnQ6IDBcclxuICB9XHJcbiAgcHJvZ3JhbVR5cGVPYmplY3QgPSB7XHJcbiAgICByZWd1bGF0aW9uczogMSxcclxuICAgIHN0YW5kYXJkczogMixcclxuICAgIGludGVybmFsX2NvbnRyb2xzOiAzLFxyXG4gICAgb3RoZXJzOiAwLFxyXG4gIH1cclxuXHJcblxyXG4gIGRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlID0gZmFsc2U7XHJcblxyXG4gIGFjdGl2ZVRhYjogJ3JlZ3VsYXRpb25zJyB8ICdzdGFuZGFyZHMnIHwgJ2ludGVybmFsX2NvbnRyb2xzJyB8ICdvdGhlcnMnID0gJ3JlZ3VsYXRpb25zJ1xyXG5cclxuICAvL3Byb2dyYW1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXN0QXBpU2VydmljZTogUmVzdEFwaVNlcnZpY2UsXHJcbiAgICAgcHJpdmF0ZSBzbmFja2JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB0aGlzLmdldFByb2dyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICAgIHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGUgPSB0aGlzLnJlc3RBcGlTZXJ2aWNlLmdldEJ1c2luZXNzQ3ljbGUoKTtcclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1zKGRhdGE/OiBhbnkpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnbW9kZScsICdjb21wbGlhbmNlQ2F0ZWdvcnkvcHJvZ3JhbUxpc3QnKTtcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3Byb2dyYW1UeXBlJywgdGhpcy5wcm9ncmFtVHlwZU9iamVjdFt0aGlzLmFjdGl2ZVRhYl0pO1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYWdlTmFtZScsIFwicG9saWN5V29ya3Jvb21cIik7XHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoIHx8IHRoaXMuc2VhcmNoVGV4dC5wcm9ncmFtXHJcbiAgICAgICkge1xyXG4gICAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdzZWFyY2hUZXh0JywgdGhpcy5zZWFyY2hUZXh0LnByb2dyYW0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgncGFnZU5vJywgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICBhY3Rpb246ICdjb21wbGlhbmNlR2V0JyxcclxuICAgICAgcGFyYW1zXHJcbiAgICB9XHJcbiAgICB0aGlzLnJlc3RBcGlTZXJ2aWNlLmFwaURlbGVnYXRlKHJlcXVlc3QsICdjb21wbGlhbmNlQ2F0ZWdvcnkvcHJvZ3JhbUxpc3QnKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5kYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5mcm9tID0gcmVzLmZyb207XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS50byA9IHJlcy50bztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUGFnZXMgPSByZXMudG90YWxQYWdlcztcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbFJlY29yZHM7XHJcbiAgICAgICAgdGhpcy5wcm9ncmFtRGF0YS5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudCA9IHJlcy5BbGxJbnRlcm5hbENvbnRyb2xzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbE90aGVyc1Byb2dyYW1zQ291bnQgPSByZXMuQWxsT3RoZXJzUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLnByb2dyYW1EYXRhLkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50ID0gcmVzLkFsbFJlZ3VsYXRpb25Qcm9ncmFtc0NvdW50O1xyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuQWxsU3RhbmRhcmRQcm9ncmFtc0NvdW50ID0gcmVzLkFsbFN0YW5kYXJkUHJvZ3JhbXNDb3VudDtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0Q2F0ZWdvcmllcyhkYXRhPzogYW55KSB7XHJcblxyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuYXBwZW5kKCdwYXJlbnRJZCcsIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHJvZ3JhbT8uX2lkKTtcclxuXHJcbiAgICBpZiAoZGF0YT8uc2VhcmNoKSB7XHJcbiAgICAgIHBhcmFtcyA9IHBhcmFtcy5hcHBlbmQoJ3EnLCB0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgIGFjdGlvbjogJ3Byb2dyYW1FbmRwb2ludCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN0QXBpU2VydmljZS5hcGlEZWxlZ2F0ZShyZXF1ZXN0LCAnL3N1YkNhdGVnb3JpZXMnKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC5mcm9tID0gcmVzLml0ZW1zX2Zyb20gPz8gMTtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LnRvID0gcmVzLml0ZW1zX3RvID8/IDA7XHJcbiAgICAgICAgdGhpcy5zdWJDYXRlZ29yaWVzTGlzdC50b3RhbFBhZ2UgPSByZXMudG90YWxfcGFnZXMgPz8gMDtcclxuICAgICAgICB0aGlzLnN1YkNhdGVnb3JpZXNMaXN0LnRvdGFsUmVjb3JkcyA9IHJlcy50b3RhbF9pdGVtcyA/PyAwO1xyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QuZGF0YSA9IHJlcy5kYXRhID8/IFtdO1xyXG4gICAgICAgIHRoaXMubG9hZGVyPWZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBjaGFuZ2VUYWJQcm9ncmFtKHR5cGU6ICdyZWd1bGF0aW9ucycgfCAnc3RhbmRhcmRzJyB8ICdpbnRlcm5hbF9jb250cm9scycgfCAnb3RoZXJzJykge1xyXG4gICAgdGhpcy5hY3RpdmVUYWIgPSB0eXBlO1xyXG4gICAgdGhpcy5wcm9ncmFtRGF0YS5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQucHJvZ3JhbSA9ICcnO1xyXG4gICAgdGhpcy5zZWFyY2hQcm9ncmFtLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcclxuICAgIHRoaXMuZ2V0UHJvZ3JhbXMoKTtcclxuICB9XHJcblxyXG4gIGdldFJlc3BvbnNpYmlsaXRpZXMoZGF0YT86IGFueSkge1xyXG5cclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICBtZXRob2Q6ICdnZXQnLFxyXG4gICAgICBhY3Rpb246ICdwcm9ncmFtRW5kcG9pbnQnLFxyXG4gICAgICBwYXlsb2FkT2JqZWN0OiB7XHJcbiAgICAgICAgXCJzdGFydF9kYXRlXCI6IHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGU/LnN0YXJ0X2RhdGUsXHJcbiAgICAgICAgXCJlbmRfZGF0ZVwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5lbmRfZGF0ZSxcclxuICAgICAgICBcInNlbGVjdGVkX2N5Y2xlX2FyclwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zZWxlY3RlZF9jeWNsZV9hcnIsXHJcbiAgICAgICAgXCJzZWxlY3RlZF9jeWNsZVwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5zZWxlY3RlZF9jeWNsZSxcclxuICAgICAgICAnY2F0ZWdvcnlJZHMnOiB0aGlzLnNlbGVjdGVkSWRzPy5jYXRlZ29yaWVzLFxyXG4gICAgICAgICdwYWdlTm8nOiB0aGlzLnJlc3BvbnNpYmlsaXRpZXNMaXN0Py5jdXJyZW50UGFnZSxcclxuICAgICAgICAnc2VhcmNoVGV4dCc6IChkYXRhPy5zZWFyY2gpID8gdGhpcy5zZWFyY2hUZXh0Py5yZXNwb25zaWJpbGl0eSA6ICcnXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucmVzdEFwaVNlcnZpY2UuYXBpRGVsZWdhdGUocmVxdWVzdCwgJy9jYXRlZ29yeVJlc3BvbnNpYmlsaXRpZXMnKS5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXRpZXNMaXN0LmZyb20gPSByZXMuaXRlbXNfZnJvbSA/PyAxO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QudG8gPSByZXMuaXRlbXNfdG8gPz8gMDtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXRpZXNMaXN0LnRvdGFsUGFnZSA9IHJlcy50b3RhbF9wYWdlcyA/PyAxO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdGllc0xpc3QudG90YWxSZWNvcmRzID0gcmVzLnRvdGFsX2l0ZW1zID8/IDA7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0aWVzTGlzdC5kYXRhID0gcmVzLmRhdGEgPz8gW107XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlUGFnZShldmVudDogYW55LCB0eXBlOiAncHJvZ3JhbXMnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbXMnOlxyXG4gICAgICAgIHRoaXMucHJvZ3JhbURhdGEuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldFByb2dyYW1zKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuc3ViQ2F0ZWdvcmllc0xpc3QuY3VycmVudFBhZ2UgPSBldmVudDtcclxuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0aWVzTGlzdC5jdXJyZW50UGFnZSA9IGV2ZW50O1xyXG4gICAgICAgIHRoaXMuZ2V0UmVzcG9uc2liaWxpdGllcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgc2VhcmNoQnkoZXZlbnQ6IGFueSwgdHlwZTogJ3Byb2dyYW1zJyB8ICdjYXRlZ29yaWVzJyB8ICdyZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgJ3Byb2dyYW1zJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LnByb2dyYW0gIT0gZXZlbnQpIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dC5wcm9ncmFtID0gZXZlbnQ7XHJcbiAgICAgICAgICB0aGlzLmdldFByb2dyYW1zKHsgc2VhcmNoOiB0cnVlIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXh0LmNhdGVnb3J5ICE9IGV2ZW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQuY2F0ZWdvcnkgPSBldmVudDtcclxuICAgICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcyh7IHNlYXJjaDogdHJ1ZSB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dC5yZXNwb25zaWJpbGl0eSAhPSBldmVudCkge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0LnJlc3BvbnNpYmlsaXR5ID0gZXZlbnQ7XHJcbiAgICAgICAgICB0aGlzLmdldFJlc3BvbnNpYmlsaXRpZXMoeyBzZWFyY2g6IHRydWUgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBzZWxlY3RQcm9ncmFtKGV2ZW50OiBhbnksIGRhdGE6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucHJvZ3JhbSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2F0ZWdvcmllcz0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMuY2F0ZWdvcmllcz0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcz0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcz0gW107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDYXRlZ29yeShldmVudDogYW55LCBjYXRlZ29yeTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzLnB1c2goY2F0ZWdvcnkuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMucHVzaChjYXRlZ29yeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuY2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2F0ZWdvcmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUluZGV4ID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PSBjYXRlZ29yeS5jYXRlZ29yeV9pZClcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzLnNwbGljZShjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2VsZWN0UmVzcG9uc2liaWxpdHkoZXZlbnQ6IGFueSwgZGF0YTogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZElkcy5yZXNwb25zaWJpbGl0aWVzLnB1c2goZGF0YS5SZXBvcnRJZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcy5wdXNoKGRhdGEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSWRzLnJlc3BvbnNpYmlsaXRpZXMuZmluZEluZGV4KChlbGVtZW50OiBhbnkpID0+IGVsZW1lbnQgPT0gZGF0YS5SZXBvcnRJZCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICBjb25zdCByZXBvcnRJbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuUmVwb3J0SWQgPT0gZGF0YS5SZXBvcnRJZClcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzLnNwbGljZShyZXBvcnRJbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdvQmFjayhmcm9tPzogJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICBpZiAoZnJvbSkge1xyXG4gICAgICBzd2l0Y2ggKGZyb20pIHtcclxuICAgICAgICBjYXNlICdjYXRlZ29yaWVzJzpcclxuICAgICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAncHJvZ3JhbXMnO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAnY2F0ZWdvcmllcyc7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSWRzLnJlc3BvbnNpYmlsaXRpZXMgPSBbXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZSh0eXBlOiAncHJvZ3JhbXMnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnLCBpdGVtOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdwcm9ncmFtcyc6XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5wcm9ncmFtID0ge307XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gW107XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SW5kZXggPSB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5X2lkID09IGl0ZW0uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIGlmIChjYXRlZ29yeUluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzLmNhdGVnb3JpZXMuc3BsaWNlKGNhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5SWRJbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMuY2F0ZWdvcmllcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBpdGVtLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBpZihjYXRlZ29yeUlkSW5kZXghPS0xKXtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2F0ZWdvcmllcy5zcGxpY2UoY2F0ZWdvcnlJZEluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgIGNvbnN0IHJlc3BJbmRleCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXMucmVzcG9uc2liaWxpdGllcy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuUmVwb3J0SWQgPT0gaXRlbS5SZXBvcnRJZCk7XHJcbiAgICAgICAgaWYgKHJlc3BJbmRleCAhPSAtMSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzLnNwbGljZShyZXNwSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJZHMucmVzcG9uc2liaWxpdGllcy5maW5kSW5kZXgoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudCA9PSBpdGVtLlJlcG9ydElkKTtcclxuICAgICAgICBpZihpbmRleCE9LTEpe1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5yZXNwb25zaWJpbGl0aWVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBzYXZlQ2hhbmdlcyh0eXBlOiAncHJvZ3JhbXMnIHwgJ2NhdGVnb3JpZXMnIHwgJ3Jlc3BvbnNpYmlsaXRpZXMnfCdwcm9ncmFtc09ubHknKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAncHJvZ3JhbXMnOlxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAnY2F0ZWdvcmllcyc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5jYXRlZ29yaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yaWVzKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NhdGVnb3JpZXMnOlxyXG4gICAgICAgIHRoaXMuY3VycmVudExpc3QgPSAncmVzcG9uc2liaWxpdGllcyc7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlcy5yZXNwb25zaWJpbGl0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy5nZXRSZXNwb25zaWJpbGl0aWVzKCk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICB0aGlzLnN1Ym1pdHByb2dyYW1JbnRlZ3JhdGlvbigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICAgY2FzZSAncHJvZ3JhbXNPbmx5JzpcclxuICAgICAgICB0aGlzLmRpc3BsYXlDb25maXJtYXRpb25NZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbiAgc2F2ZUNoYW5nZXNGcm9tUHJvZ3JhbShldmVudDpib29sZWFuKXtcclxuICAgIGlmKGV2ZW50KXtcclxuICAgICAgdGhpcy5kaXNwbGF5Q29uZmlybWF0aW9uTWVzc2FnZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnN1Ym1pdHByb2dyYW1JbnRlZ3JhdGlvbigpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMuZGlzcGxheUNvbmZpcm1hdGlvbk1lc3NhZ2UgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzdWJtaXRwcm9ncmFtSW50ZWdyYXRpb24oKSB7XHJcblxyXG4gICAgLy8gdGhpcy5zdWJtaXNzaW9uTG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xyXG4gICAgcGFyYW1zID0gcGFyYW1zLmFwcGVuZCgnbW9kZScsICdwcm9ncmFtUG9saWN5VXBkYXRlL3VwZGF0ZScpO1xyXG5cclxuICAgIGNvbnN0IGNhdGVnb3J5QXJyYXkgPSB0aGlzLnNlbGVjdGVkSWRzPy5jYXRlZ29yaWVzO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHBvbGljeUlkOiB0aGlzLnBvbGljeT8ucG9saWN5X2lkID8/IDAsXHJcbiAgICAgIHJlcG9ydF9pZHM6IHRoaXMuc2VsZWN0ZWRJZHM/LnJlc3BvbnNpYmlsaXRpZXMgPz8gMCxcclxuICAgICAgY2F0ZWdvcnlfaWQ6Wy4uLiBuZXcgU2V0KGNhdGVnb3J5QXJyYXkpXSxcclxuICAgICAgcGFyZW50SWQ6IHRoaXMuc2VsZWN0ZWRWYWx1ZXM/LnByb2dyYW0/LmNhdGVnb3J5X2lkXHJcbiAgICB9XHJcbiAgICBsZXQgcmVtb3ZlID0ge31cclxuICAgIGlmKHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbT8uX2lkICYmICh0aGlzLnNlbGVjdGVkVmFsdWVzPy5wcm9ncmFtPy5faWQgIT09IHRoaXMuc2VsZWN0ZWRMaW5rUHJvZ3JhbT8uX2lkKSkge1xyXG4gICAgICByZW1vdmUgPSAge1xyXG4gICAgICBcInBvbGljeUlkc1wiOiBbdGhpcy5wb2xpY3k/LnBvbGljeV9pZCA/PyAwXSxcclxuICAgICAgXCJwcm9ncmFtSWRcIjogdGhpcy5zZWxlY3RlZExpbmtQcm9ncmFtPy5faWQsXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRCdXNpbmVzc0N5Y2xlID0ge1xyXG4gICAgICBcInN0YXJ0X2RhdGVcIjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc3RhcnRfZGF0ZSxcclxuICAgICAgXCJlbmRfZGF0ZVwiOiB0aGlzLmN1cnJlbnRCdXNpbmVzc0N5Y2xlPy5lbmRfZGF0ZSxcclxuICAgICAgXCJzZWxlY3RlZF9jeWNsZV9hcnJcIjogdGhpcy5jdXJyZW50QnVzaW5lc3NDeWNsZT8uc2VsZWN0ZWRfY3ljbGVfYXJyLFxyXG4gICAgICBcInNlbGVjdGVkX2N5Y2xlXCI6IHRoaXMuY3VycmVudEJ1c2luZXNzQ3ljbGU/LnNlbGVjdGVkX2N5Y2xlLFxyXG4gICAgfVxyXG4gICAgbGV0IGxpbmtQcm9ncmFtID0ge1xyXG4gICAgICBhZGRlZDogT2JqZWN0LmtleXMocGF5bG9hZCkubGVuZ3RoID8gW3BheWxvYWRdIDogW10sXHJcbiAgICAgIHJlbW92ZWQ6IE9iamVjdC5rZXlzKHJlbW92ZSkubGVuZ3RoID8gW3JlbW92ZV0gOiBbXSxcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3RlZFByb2dyYW0gPSB7XHJcbiAgICAgIHNlbGVjdGVkVmFsdWVzIDogdGhpcy5zZWxlY3RlZFZhbHVlcyxcclxuICAgICAgbGlua1Byb2dyYW06IGxpbmtQcm9ncmFtLFxyXG4gICAgICBidXNpbmVzc0N5Y2xlOiBjdXJyZW50QnVzaW5lc3NDeWNsZVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJsaW5rIFByb2dyYW0gUGF5bG9hZCA9PlwiLCBwYXlsb2FkKVxyXG4gICAgdGhpcy51cGRhdGVkUHJvZ3JhbURldGFpbHMuZW1pdChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkUHJvZ3JhbSkpKTtcclxuICAgIHRoaXMuc3VibWlzc2lvbkxvYWRlciA9IGZhbHNlO1xyXG5cclxuICAgIFxyXG4gICAgXHJcblxyXG4gICAgY29uc3QgcmVxdWVzdCA9IHtcclxuICAgICAgbWV0aG9kOiAncG9zdCcsXHJcbiAgICAgIGFjdGlvbjogJy9jb21wbGlhbmNlX3Bvc3QnLFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIGRhdGE6IHBheWxvYWQsXHJcbiAgICAgIGJ1c2luZXNzQ3ljbGU6IGN1cnJlbnRCdXNpbmVzc0N5Y2xlXHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnJlc3RBcGlTZXJ2aWNlLmFwaURlbGVnYXRlKHJlcXVlc3QpLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoe1xyXG4gICAgLy8gICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgIC8vICAgICB0aGlzLnN1Ym1pc3Npb25Mb2FkZXIgPSBmYWxzZTtcclxuICAgIC8vICAgICB0aGlzLnNuYWNrYmFyLnNob3coJ1RoZSBwcm9ncmFtIGhhcyBiZWVuIGxpbmtlZCB3aXRoIHRoaXMgUG9saWN5LicsICdzdWNjZXNzJyk7XHJcbiAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICBpZih0aGlzLmN1cnJlbnRUYWIgIT0gJ2xpbmtlZF9wcm9ncmFtcycpe1xyXG4gICAgLy8gICAgICAgICB0aGlzLnJlZnJlc2hMaW5rZWRQb2xpY2llcy5lbWl0KCk7XHJcbiAgICAvLyAgICAgICAgIC8vIHRoaXMuY2hhbmdlVGFiLmVtaXQoKTtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xyXG4gICAgLy8gICAgIH0sIDEwMDApO1xyXG5cclxuICAgIC8vICAgfSxcclxuICAgIC8vICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuc3VibWlzc2lvbkxvYWRlciA9IGZhbHNlO1xyXG4gICAgLy8gICAgIHRoaXMuc25hY2tiYXIuc2hvdyhcIk9vcHMgU29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGNvbXBsZXRlIHRoaXMgYWN0aW9uLiBMZXQncyBnaXZlIGl0IGFub3RoZXIgdHJ5IHNoYWxsIHdlID9cIik7XHJcbiAgICAvLyAgIH0sXHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==